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