Splitter ist ein MongoDB-Prozess zum Speichern von Datensätzen auf verschiedenen Computern. Es ermöglicht Ihnen, eine horizontale Skalierung von Daten durchzuführen und alle Daten über unabhängige Instanzen hinweg zu partitionieren. Sharding ermöglicht es Ihnen, je nach Datenwachstum weitere Maschinen zu Ihrem Stack hinzuzufügen.
Sharding und Replikation
Machen wir es uns einfach. Wenn Sie Musiksammlungen haben, speichert und bewahrt „Sharding“ Ihre Musiksammlungen in verschiedenen Ordnern auf verschiedenen Instanzen oder Replikat-Sets auf, während „Replikation“ Ihre Musiksammlungen nur mit anderen Instanzen synchronisiert.
Drei Sharding-Komponenten
Splitter - Wird verwendet, um alle Daten zu speichern. Und in einer Produktionsumgebung ist jeder Shard ein Replikatsatz. Bietet Hochverfügbarkeit und Datenkonsistenz.
Konfigurationsserver – Wird zum Speichern von Cluster-Metadaten verwendet und enthält eine Zuordnung von Cluster-Datensatz und Shards. Diese Daten werden vom Mongos/Query-Server verwendet, um Operationen bereitzustellen. Es wird empfohlen, mehr als 3 Instanzen in der Produktion zu verwenden.
Mongos/Query-Router - Dies sind nur Mongo-Instanzen, die als Anwendungsschnittstellen ausgeführt werden. Die Anwendung stellt Anforderungen an die „mongos“-Instanz, und „mongos“ übermittelt die Anforderungen dann mithilfe von Shard-Schlüsseln an die Shards-Replikatsätze.
Voraussetzungen
- 2 centOS 7-Server als Config Replica Sets
- 10.0.15.31 configsvr1
- 10.0.15.32 configsvr2
- 4 CentOS 7-Server als Shard Replica Sets
- 10.0.15.21 Shardsvr1
- 10.0.15.22 Shardsvr2
- 10.0.15.23 Shardsvr3
- 10.0.15.24 Shardsvr4
- 1 CentOS 7-Server als Mongos/Query Router
- 10.0.15.11 Mongos
- Root-Rechte
- Jeder Server ist mit einem anderen Server verbunden
Schritt 1 – SELinux deaktivieren und Hosts konfigurieren
In diesem Tutorial werden wir SELinux deaktivieren. Ändern Sie die SELinux-Konfiguration von „Erzwingen“ auf „Deaktiviert“.
Stellen Sie über OpenSSH eine Verbindung zu allen Knoten her.
ssh [email protected]
Deaktivieren Sie SELinux, indem Sie die Konfigurationsdatei bearbeiten.
vim /etc/sysconfig/selinux
Ändern Sie den SELINUX-Wert auf „deaktiviert“.
SELINUX=disabled
Speichern und beenden.
Als nächstes bearbeiten Sie die hosts-Datei auf jedem Server.
vim /etc/hosts
Fügen Sie die folgende Hostkonfiguration ein:
10.0.15.31 configsvr1
10.0.15.32 configsvr2
10.0.15.11 mongos
10.0.15.21 shardsvr1
10.0.15.22 shardsvr2
10.0.15.23 shardsvr3
10.0.15.24 shardsvr4
Speichern und beenden.
Starten Sie nun alle Server mit dem Befehl reboot neu.
reboot
Schritt 2 – MongoDB auf allen Instanzen installieren
Wir werden die neueste MongoDB-Version (3.4) für alle Instanzen verwenden. Fügen Sie ein neues MongoDB-Repository hinzu, indem Sie den folgenden Befehl ausführen:
cat <<'EOF' >> /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
EOF
Installieren Sie nun MongoDB 3.4 aus dem Mongodb-Repository mit dem folgenden yum-Befehl.
sudo yum -y install mongodb-org
Nachdem Mongodb installiert ist, können Sie die Datei „mongo ' oder 'Mongott ' Befehl.
mongod --version
Schritt 3 – Konfigurationsserver-Replikatsatz erstellen
Im Abschnitt „Voraussetzungen“ haben wir bereits einen Konfigurationsserver mit 2 Maschinen „configsvr1“ und „configsvr2“ definiert. Und in diesem Schritt konfigurieren wir es als Replikatsatz.
Wenn auf dem Server ein Mongod-Dienst läuft, stoppen Sie ihn mit dem Befehl systemctl.
systemctl stop mongod
Bearbeiten Sie die standardmäßige mongodb-Konfiguration „mongod.conf ' mit dem Vim-Editor.
vim /etc/mongod.conf
Ändern Sie den DB-Speicherpfad in Ihr eigenes Verzeichnis. Wir werden das Verzeichnis „/data/db1“ für den ersten Server und das Verzeichnis „/data/db2“ für den zweiten Konfigurationsserver verwenden.
storage:
dbPath: /data/db1
Ändern Sie den Wert der Zeile 'bindIP' auf Ihre interne Netzwerkadresse - 'configsvr1' mit der IP-Adresse 10.0.15.31 und der zweite Server mit 10.0.15.32.
bindIP: 10.0.15.31
Legen Sie im Replikationsabschnitt einen Replikationsnamen fest.
replication:
replSetName: "replconfig01"
Definieren Sie im Abschnitt „Sharding“ eine Rolle der Instanzen. Wir werden diese beiden Instanzen als 'configsvr' verwenden.
sharding:
clusterRole: configsvr
Speichern und beenden.
Als Nächstes müssen wir ein neues Verzeichnis für MongoDB-Daten erstellen und dann den Eigentümer dieses Verzeichnisses in den Benutzer „mongod“ ändern.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Starten Sie danach den Mongod-Dienst mit dem folgenden Befehl.
mongod --config /etc/mongod.conf
Sie können den Befehl netstat verwenden, um zu überprüfen, ob der Mongod-Dienst auf Port 27017 ausgeführt wird.
netstat -plntu
Configsvr1 und Configsvr2 sind bereit für den Replikatsatz. Verbinden Sie sich mit dem 'configsvr1'-Server und greifen Sie auf die Mongo-Shell zu.
ssh [email protected]
mongo --host configsvr1 --port 27017
Initiieren Sie den Replikatsatznamen mit allen configsvr-Mitgliedern, indem Sie die folgende Abfrage verwenden.
rs.initiate(
{
_id: "replconfig01",
configsvr: true,
members: [
{ _id : 0, host : "configsvr1:27017" },
{ _id : 1, host : "configsvr2:27017" }
]
}
)
Wenn Sie ein Ergebnis erhalten '{ "ok" :1 } ', bedeutet dies, dass der configsvr bereits mit dem Replikatsatz konfiguriert ist.
und Sie können sehen, welcher Knoten Master und welcher sekundäre Knoten ist.
rs.isMaster()
rs.status()
Die Konfiguration des Config Server Replica Sets ist abgeschlossen.
Schritt 4 – Erstellen Sie die Shard-Replik-Sets
In diesem Schritt konfigurieren wir 4 'centos 7'-Server als 'Shard'-Server mit 2 'Replica Set'.
- 2-Server – 'shardsvr1 ' und 'shardsvr2 ' mit dem Namen des Replikatsatzes:'shardreplica01 '
- 2-Server – 'shardsvr3 ' und 'shardsvr4 ' mit dem Namen des Replikatsatzes:'shardreplica02 '
Stellen Sie eine Verbindung zu jedem Server her, stoppen Sie den Mongod-Dienst (falls ein Dienst ausgeführt wird) und bearbeiten Sie die MongoDB-Konfigurationsdatei.
systemctl stop mongod
vim /etc/mongod.conf
Ändern Sie den Standardspeicher in Ihr spezifisches Verzeichnis.
storage:
dbPath: /data/db1
Ändern Sie in der Zeile „bindIP“ den Wert, um Ihre interne Netzwerkadresse zu verwenden.
bindIP: 10.0.15.21
Im Replikationsabschnitt können Sie „shardreplica01 verwenden “ für die erste und zweite Instanz. Und verwenden Sie 'shardreplica02 ' für den dritten und vierten Shard-Server.
replication:
replSetName: "shardreplica01"
Definieren Sie als Nächstes die Rolle des Servers. Wir werden all dies als Shardsvr-Instanzen verwenden.
sharding:
clusterRole: shardsvr
Speichern und beenden.
Erstellen Sie nun ein neues Verzeichnis für MongoDB-Daten.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Starten Sie den Mongod-Dienst.
mongod --config /etc/mongod.conf
Überprüfen Sie mit dem folgenden Befehl, ob MongoDB ausgeführt wird:
netstat -plntu
Sie werden sehen, dass MongoDB auf der lokalen Netzwerkadresse ausgeführt wird.
Erstellen Sie als Nächstes einen neuen Replikatsatz für diese beiden Shard-Instanzen. Verbinden Sie sich mit 'shardsvr1' und greifen Sie auf die Mongo-Shell zu.
ssh [email protected]
mongo --host shardsvr1 --port 27017
Initiieren Sie den Replikatsatz mit dem Namen „shardreplica01 ', und die Mitglieder sind 'shardsvr1 ' und 'shardsvr2 '.
rs.initiate(
{
_id : "shardreplica01",
members: [
{ _id : 0, host : "shardsvr1:27017" },
{ _id : 1, host : "shardsvr2:27017" }
]
}
)
Wenn kein Fehler auftritt, werden die Ergebnisse wie folgt angezeigt.
Ergebnisse von shardsvr3 und shardsvr4 mit dem Replikatsatznamen „shardreplica02 '.
Wiederholen Sie diesen Schritt für shardsvr3 und shardsvr4 Server mit anderem Replikatsatznamen „shardreplica02 '.
Jetzt haben wir 2 Replikatsätze erstellt – 'shardreplica01 ' und 'shardreplica02 ' - als die Scherbe.
Schritt 5 – Mongos/Query Router konfigurieren
Der „Query Router“ oder Mongos sind nur Instanzen, die „Mongos“ ausführen. Sie können Mongos mit der Konfigurationsdatei oder nur mit einer Befehlszeile ausführen.
Melden Sie sich beim Mongos-Server an und stoppen Sie den MongoDB-Dienst.
ssh [email protected]
systemctl stop mongod
Führen Sie Mongos mit der Befehlszeile wie unten gezeigt aus.
mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"
Verwenden Sie die Option „--configdb“, um den Konfigurationsserver zu definieren. Wenn Sie in Produktion sind, verwenden Sie mindestens 3 Konfigurationsserver.
Sie sollten ähnliche Ergebnisse wie die folgenden sehen.
Successfully connected to configsvr1:27017
Successfully connected to configsvr2:27017
Mongos-Instanzen werden ausgeführt.
Schritt 6 – Shards zu Mongos/Query Router hinzufügen
Öffnen Sie eine weitere Shell aus dem vorherigen Schritt, verbinden Sie sich erneut mit dem Mongos-Server und greifen Sie auf die Mongo-Shell zu.
ssh [email protected]
mongo --host mongos --port 27017
Fügen Sie den Shard-Server mit der sh mongodb-Abfrage hinzu.
Für „shardreplica01 ' Instanzen:
sh.addShard( "shardreplica01/shardsvr1:27017")
sh.addShard( "shardreplica01/shardsvr2:27017")
Für „shardreplica02 ' Instanzen:
sh.addShard( "shardreplica02/shardsvr3:27017")
sh.addShard( "shardreplica02/shardsvr4:27017")
Stellen Sie sicher, dass kein Fehler vorliegt, und überprüfen Sie den Shard-Status.
sh.status()
Der Sharding-Status wird ähnlich wie im folgenden Screenshot angezeigt.
Wir haben 2 Shard-Replikat-Sets und 1 Mongos-Instanz, die auf unserem Stack ausgeführt werden.
Schritt 7 – Testen
Greifen Sie zum Testen der Einrichtung auf die Mongo-Shell des Mongos-Servers zu.
ssh [email protected]
mongo --host mongos --port 27017
Sharding für eine Datenbank aktivieren
Erstellen Sie eine neue Datenbank und aktivieren Sie Sharding für die neue Datenbank.
use lemp
sh.enableSharding("lemp")
sh.status()
Sehen Sie sich jetzt den Status der Datenbank an, sie wurde in den Replikatsatz „shardreplica01“ partitioniert.
Sharding für Sammlungen aktivieren
Fügen Sie als Nächstes neue Sammlungen mit Sharding-Unterstützung zur Datenbank hinzu. Wir fügen eine neue Sammlung mit dem Namen „Stack“ mit der Shard-Sammlung „Name“ hinzu und sehen dann den Datenbank- und Sammlungsstatus.
sh.shardCollection("lemp.stack", {"name":1})
sh.status()
Neue Sammlungen „Stack“ mit Shard-Sammlung „Name“ wurden hinzugefügt.
Fügen Sie Dokumente zum "Stapel" der Sammlungen hinzu.
Fügen Sie nun die Dokumente den Sammlungen hinzu. Wenn wir der Sammlung Dokumente auf einem Sharded-Cluster hinzufügen, müssen wir den „Shard-Schlüssel“ einschließen.
Im folgenden Beispiel verwenden wir den Shard-Schlüssel „name“. ', wie wir hinzugefügt haben, als wir das Sharding für Sammlungen aktiviert haben.
db.stack.save({
"name": "LEMP Stack",
"apps": ["Linux", "Nginx", "MySQL", "PHP"],
})
Wie in den folgenden Screenshots gezeigt, wurden Dokumente erfolgreich zur Sammlung hinzugefügt.
Wenn Sie die Datenbank testen möchten, können Sie eine Verbindung mit dem Replikatsatz „shardreplica01“ herstellen ' PRIMARY-Server und öffnen Sie die Mongo-Shell. Ich melde mich beim PRIMARY-Server „shardsvr2“ an.
ssh [email protected]
mongo --host shardsvr2 --port 27017
Überprüfen Sie die auf dem Replikatsatz verfügbare Datenbank.
show dbs
use lemp
db.stack.find()
Sie werden sehen, dass die Datenbank, Sammlungen und Dokumente im Replikatsatz verfügbar sind.
MongoDB Sharded Cluster auf CentOS 7 wurde erfolgreich installiert und bereitgestellt.