Auf einen Blick: Die Einrichtung eines MongoDB-Clusters beinhaltet die Installation eines Konfigurationsservers, eines Abfragerouters und eines Shard-Servers. Der Prozess umfasst die Konfiguration jedes Servers, die Sicherstellung eines ordnungsgemäßen Netzwerks und das Aktivieren von Sharding für die Datenverteilung. Wichtige Schritte umfassen das Bearbeiten von Konfigurationsdateien, das Starten von Diensten und die Überprüfung von Protokollen auf Fehler. Für detaillierte Anweisungen folgen Sie den bereitgestellten Schritten und Links zu weiteren MongoDB-Ressourcen.
- Installiere den Konfigurationsserver, frage den Router und den Shard-Server ab.
- Aktiviere Sharding für die Datenverteilung im gesamten Cluster.
Hier zeigen wir, wie man einen MongoDB-Cluster einrichtet. Im vorherigen Beitrag haben wir gezeigt, wie man ihn auf einem Rechner installiert.
Es gibt drei Teile zu installieren:
- Config Server
- Abfragerouter
- Shard-Server, also Datenbank
Betrachtet man das untenstehende Diagramm, läuft der Mongos-Prozess als Router, was bedeutet, dass er den Clients anzeigt, wo sie nach Daten suchen sollen. Die Daten werden über den Cluster verteilt, basierend auf dem Teilen. Sharding ist die Zuweisung von Datensätzen an Server basierend auf dem gehashten Wert eines Indexes. Der Konfigurationsserver speichert Konfigurationsinformationen.
Konfigurationsserver
Installieren Sie MongoDB
Technisch gesehen bedeutet eine MongoDB als Cluster einfach drei Schichten der MongoDB-Architektur als separate Prozesse. Das könnte man für akademische Zwecke auf einer Maschine machen. Aber hier verwenden wir zwei.
Wir installieren den Router und die Konfigurationsserver auf 172.31.46.15 und den Shard-Server auf 172.31.47.43. Der Einfachheit halber nennen wir den ersten Server den Konfigurationsserver und den zweiten Server den Datenbankserver.
Verwenden Sie nicht apt-get zur Installation von MongoDB, da dies normalerweise nicht die aktuelle Version ist. Folgen Sie stattdessen den folgenden Schritten. Beachten Sie, dass mongod (Konfiguration und Shard-Server), mongos (Router) und Mongo Client als drei separate Pakete installiert werden.
Öffnen Sie die Firewall-Ports 27017, 27018 und 27019 zwischen den beiden Servern.
Du brauchst alle drei Pakete auf dem Konfigurationsserver, aber nur mongodb-org-server auf dem Datenbankserver. Unter Ubuntu installiere sie so.
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-server_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-server_4.0.5_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-shell_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-shell_4.0.5_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-mongos_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-mongos_4.0.5_amd64.deb
Beachte, dass du bei einem Fehler den Server entfernst und dann die Datendateibibliothek /var/lib/mongodb löschst. Wenn du die Datendateien beim Neuinstallieren der Software nicht löschst, behält sie die vorherige Konfiguration und stellt somit alle Fehler wieder her.
Melde dich beim Konfigurationsserver an.
Um alle drei Server einzurichten, wiederholen wir auf jedem Server dieselben vier Schritte:
- Konfigurationsdatei bearbeiten
- Startprozess
- Überprüfen Sie das Protokoll auf Fehler
- Melde dich in Shell an, um weitere Konfigurationen vorzunehmen
Jetzt bearbeite auf dem Konfigurationsserver die Konfigurationsdatei. Zur Einfachheit lassen wir jede Konfigurationsdatei einen beschreibenden Namen haben:
Melde dich beim Konfigurationsserver an.
sudo vim /etc/mongodConfig.conf
Fügen Sie den untenstehenden Text ein. Zuerst erklären wir einige der Felder:
Weg: /var/log/mongodb/mongodConfig.log |
Für jeden Prozess geben wir dem Log einen Namen, der klar angibt, für welchen Prozess es sich handelt. |
Port: 27019 bindIp: 172.31.46.15 |
Standardmäßig läuft der Konfigurationsserver auf Port 2019 in einer clusterbasierten Konfiguration. Das machen wir hier explizit, daher muss man sich das nicht merken. Außerdem ist die IP-Adresse eine Non-Loopback-Adresse. Das ist, damit andere Server diesen Server finden können. |
sharding: clusterRolle: configsvr |
Sharding bedeutet, Daten nach einem Hashing-Schema zu verteilen. Hier sagen wir MongoDB, dass dieser Server ein Konfigurationsserver ist, im Gegensatz zu einem Sharing-Server. |
replication: replSetName: ConfigReplSet |
Das bedeutet, diese Konfigurationsdaten zu replizieren. Wir verwenden rs. ()-Funktionen, um weitere Repliken hinzuzufügen. Wir können jeden Namen verwenden. |
Fügen Sie diesen Text in /etc/mongodConfig.conf ein:
Beginnen Sie mit dem Prozess:
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongodConfig.log
net:
port: 27019
bindIp: 172.31.46.15
sharding:
clusterRole: configsvr
replication:
replSetName: ConfigReplSet
Beginnen Sie mit dem Prozess:
sudo mongod --config /etc/mongodConfig.conf&
Überprüfen Sie die Protokolle auf Fehler:
sudo tail -100 /var/log/mongodb/mongodConfig.log
Loggen Sie sich in die Hülle ein:
mongo 172.31.46.15:27019
Aktiviere die Replikation mit rs.initiate() und prüfe den Status mit rs.status(). Beachte, dass der Name des Replikationssets, das wir in der Konfigurationsdatei ConfigReplSet konfiguriert haben, abgerufen wird.
> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "172.31.46.15:27019",
"ok" : 1,
"operationTime" : Timestamp(1548598138, 1),
"$gleStats" : {
"lastOpTime" : Timestamp(1548598138, 1),
"electionId" : ObjectId("000000000000000000000000")
},
"lastCommittedOpTime" : Timestamp(0, 0),
"$clusterTime" : {
"clusterTime" : Timestamp(1548598138, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
ConfigReplSet:SECONDARY> rs.status()
{
"set" : "ConfigReplSet",
Abfragerouter konfigurieren
Bearbeite die Konfigurationsdatei:
sudo vim /etc/mongoRouter.conf
Fügen Sie den untenstehenden Text ein. Hinweis:
configDB: ConfigReplSet/172.31.46.15:27019 |
Dies zeigt dem Abfragerouter, wo er den Konfigurationsserver und deren Replikensätze finden kann. |
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongoRouter.log
net:
port: 27017
bindIp: 172.31.46.15
sharding:
configDB: ConfigReplSet/172.31.46.15:27019
Starte den Service. Beachte das s in Mongos. Das ist der Prozess des Abfragerouters.
sudo mongos --config /etc/mongoRouter.conf&
Überprüfen Sie das Protokoll und achten Sie auf Fehler:
mongo 172.31.46.15:27017
Shard konfigurieren
Melden Sie sich beim Datenbankserver an.
sudo vim /etc/mongodShard.conf
Fügen Sie den untenstehenden Text ein. Beachten Sie, dass:
Beginnen Sie mit dem Prozess.
clusterRolle: shardsvr |
Das bedeutet, dass es sich um einen Shard-Server handelt, im Gegensatz zu einem Konfigurationsserver. |
replSetName: ShardReplSet |
Das bedeutet, die Daten zu replizieren. Im Konfigurationsserver haben wir ihm gesagt, dass die Konfiguration repliziert werden soll. |
Port: 27018 |
Standardmäßig laufen Shard-Server auf Port 27018. Deshalb machen wir das explizit, damit wir uns daran nicht erinnern müssen. |
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongodShard.log
net:
port: 27018
bindIp: 172.31.47.43
sharding:
clusterRole: shardsvr
replication:
replSetName: ShardReplSet
Beginnen Sie mit dem Prozess.
sudo mongod --config /etc/mongodShard.conf&
Überprüfe das Protokoll auf Fehler.
Logge dich in die Hülle ein.
sudo tail -f /var/log/mongodb/mongodShard.log
Logge dich in die Hülle ein.
mongo 172.31.47.43:2018
Aktiviere Replikationen mit rs.initiate() und überprüfe dann den Status mit rs.status(). Beachte den Namen ShardReplSet. Wir könnten jeden Namen verwenden, solange wir denselben Namen für alle Shards im Cluster verwenden.
rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "172.31.47.43:27018",
"ok" : 1,
"operationTime" : Timestamp(1548602253, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602253, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
ShardReplSet:SECONDARY> rs.status()
{
"set" : "ShardReplSet",
Shard zum Cluster hinzufügen
Gehe zurück zum Konfigurationsserver und verbinde dich mit dem Router:
mongo 172.31.46.15:27017
Füge alle folgenden Befehle in die Hülle ein:
sh.addShard( "ShardReplSet/172.31.47.43:27018")
{
"shardAdded" : "ShardReplSet",
"ok" : 1,
"operationTime" : Timestamp(1548602529, 4),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602529, 4),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Erstelle eine Datenbank namens Books und aktiviere dann Sharding.
use books
switched to db books
sh.enableSharding("books")
{
"ok" : 1,
"operationTime" : Timestamp(1548602601, 6),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602601, 6),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Erstellen Sie eine Sammlung.
db.createCollection("collection")
{
"ok" : 1,
"operationTime" : Timestamp(1548602659, 5),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602659, 5),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Erstellen Sie einen Index. Wir indexieren das Feld ISBN in absteigender Reihenfolge.
Füge eine Platte hinzu.
db.collection.createIndex( { isbn: -1 } )
{
"raw" : {
"ShardReplSet/172.31.47.43:27018" : {
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
},
"ok" : 1,
"operationTime" : Timestamp(1548602670, 9),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602670, 9),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Füge eine Platte hinzu.
db.collection.insertOne( { isbn: 100 } )
{
"acknowledged" : true,
"insertedId" : ObjectId("5c4dcd69e83741cb900b46f8")
}
Schalte das Splittern für die Sammlung ein.
sh.shardCollection("books.collection", { isbn : "hashed" } )
{
"collectionsharded" : "books.collection",
"collectionUUID" : UUID("0d10320b-3086-472e-a3ac-4be67fae21f9"),
"ok" : 1,
"operationTime" : Timestamp(1548603537, 12),
"$clusterTime" : {
"clusterTime" : Timestamp(1548603537, 12),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Überprüfen Sie nun, dass die Daten wie unten gezeigt über den Cluster verteilt sind. Natürlich haben wir nur einen Datenbankserver, also wird nur einer angezeigt. In einem weiteren Blogbeitrag zeigen wir, wie man weitere Server hinzufügen kann.
db.collection.getShardDistribution()
Shard ShardReplSet at ShardReplSet/172.31.47.43:27018
data : 0B docs : 0 chunks : 2
estimated data per chunk : 0B
estimated docs per chunk : 0
Totals
data : 0B docs : 0 chunks : 2
Shard ShardReplSet contains NaN% data, NaN% docs in cluster, avg obj size on shard : NaNGiB
MongoDB-Leitfaden
- MongoDB-Überblick: Einstieg mit MongoDB
- Wie man MongoDB auf Ubuntu und Mac installiert
- Erstellung einer Datenbank in MongoDB
- MongoDB Shell Grundbefehle
- MongoDB Compass: Nutzung der Mongo GUI
- MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt
- MongoDB-Projektion und Projektionsoperatoren erklärt
- MongoDB-Aggregatfunktionen erklärt
- MongoDB-Sortierung: sort()-Methode & Beispiele
- Verwendung von Push-and-Pull-Operatoren in MongoDB
- Wie man MongoDB $unwind
- 23 Gängige MongoDB-Abfrageoperatoren und deren Verwendung
- MongoDB GeoLocation-Abfragebeispiele
- Einführung in MongoDB-Transaktionen
- MongoDB-Indizes: Top-Indextypen und deren Verwaltung
- Die wichtigsten MongoDB-Befehle, die du kennen solltest
- MongoDB-Replikation: Eine vollständige Einführung
- Wie man einen MongoDB-Cluster einrichtet
- MongoDB Sharding: Konzepte, Beispiele & Tutorials
- MongoDB Atlas: Einrichtung und Nutzung von verwaltetem MongoDB
- Wie man MongoDB als Docker-Container ausführt
- MongoDB-Speichernutzung, Verwaltung und Anforderungen
- Wie man Mongodump für MongoDB-Backups verwendet
- Mongorestore-Beispiele zur Wiederherstellung von MongoDB-Backups
- Wie man PyMongo benutzt
- Wie man Mongoose für MongoDB und NodeJS verwendet
- MongoDB Spickzettel
- MongoDB vs Cassandra: NoSQL-Datenbanken im Vergleich
- PostgreSQL vs MongoDB: Vergleich von Datenbanken
- MySQL vs. MongoDB: Vergleich von Datenbanken
- MongoDB-Zertifizierungen: Eine Einführung
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.