MongoDB-Sharding
Sharding
In MongoDB gibt es eine weitere Art von Cluster, nämlich die Sharding-Technologie, die den Anforderungen des massiven Wachstums des MongoDB-Datenvolumens gerecht werden kann.
Wenn MongoDB massive Datenmengen speichert, reicht eine einzelne Maschine möglicherweise nicht aus, um die Daten zu speichern, und sie reicht möglicherweise auch nicht aus, um einen akzeptablen Lese- und Schreibdurchsatz bereitzustellen. Zu diesem Zeitpunkt können wir Daten auf mehrere Maschinen partitionieren, damit das Datenbanksystem mehr Daten speichern und verarbeiten kann.
Warum Sharding verwenden
- Alle Schreibvorgänge werden auf den Primärknoten kopiert
- Latenzempfindliche Daten werden auf dem Primärknoten abgefragt
- Ein einzelnes Replica-Set ist auf 12 Knoten begrenzt
- Bei einem riesigen Anfragevolumen kann unzureichender Arbeitsspeicher auftreten.
- Unzureichender lokaler Festplattenspeicher
- Vertikale Skalierung ist teuer
MongoDB-Sharding
Das folgende Diagramm zeigt die Strukturverteilung eines Sharded Clusters in MongoDB:

Das obige Diagramm umfasst hauptsächlich die folgenden drei Hauptkomponenten:
-
Shard:
Dient zum Speichern der tatsächlichen Datenblöcke. In einer echten Produktionsumgebung kann die Rolle eines Shard-Servers von einem Replica-Set übernommen werden, das aus mehreren Maschinen besteht, um einen Single Point of Failure des Hosts zu verhindern.
-
Konfigurationsserver:
Eine mongod-Instanz, die die gesamte ClusterMetadata speichert, einschließlich Chunk-Informationen.
-
Query-Router:
Ein Front-End-Router, über den sich Clients verbinden, wodurch der gesamte Cluster wie eine einzelne Datenbank erscheint. Front-End-Anwendungen können ihn transparent verwenden.
Sharding-Beispiel
Die Portverteilung der Sharding-Struktur ist wie folgt:
Shard Server 1:27020 Shard Server 2:27021 Shard Server 3:27022 Shard Server 4:27023 Config Server :27100 Route Process:40000
Schritt 1: Shard-Server starten
[root@100 /]# mkdir -p /www/mongoDB/shard/s0 [root@100 /]# mkdir -p /www/mongoDB/shard/s1 [root@100 /]# mkdir -p /www/mongoDB/shard/s2 [root@100 /]# mkdir -p /www/mongoDB/shard/s3 [root@100 /]# mkdir -p /www/mongoDB/shard/log [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork .... [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork
Schritt 2: Config-Server starten
[root@100 /]# mkdir -p /www/mongoDB/shard/config [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork
Hinweis:Hier können wir ihn genau wie einen normalen mongodb-Dienst starten, ohne die Parameter --shardsvr und --configsvr hinzuzufügen. Da die Funktion dieser beiden Parameter darin besteht, den Startport zu ändern, können wir den Port einfach selbst angeben.
Schritt 3: Routing-Prozess starten
/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500
Unter den Startparametern von mongos wird das Element chunkSize verwendet, um die Größe von Chunks in MB anzugeben, wobei die Standardgröße 200MB beträgt.
Schritt 4: Sharding konfigurieren
Als Nächstes melden wir uns mit der MongoDB Shell bei mongos an und fügen Shard-Knoten hinzu.
[root@100 shard]# /usr/local/mongoDB/bin/mongo admin --port 40000
MongoDB shell version: 2.0.7
connecting to: 127.0.0.1:40000/admin
mongos> db.runCommand({ addshard:"localhost:27020" })
{ "shardAdded" : "shard0000", "ok" : 1 }
......
mongos> db.runCommand({ addshard:"localhost:27029" })
{ "shardAdded" : "shard0009", "ok" : 1 }
mongos> db.runCommand({ enablesharding:"test" }) #设置分片存储的数据库
{ "ok" : 1 }
mongos> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
{ "collectionsharded" : "test.log", "ok" : 1 }
Schritt 5: Im Programmcode sind keine größeren Änderungen erforderlich. Verbinden Sie die Datenbank einfach mit Port 40000 auf dieselbe Weise, wie Sie sich mit einer gewöhnlichen Mongo-Datenbank verbinden würden.
Andere Erweiterungen