Sharding MongoDB
Partitionnement
Dans MongoDB, il existe un autre type de cluster, à savoir la technologie de partitionnement, qui peut répondre aux exigences d'une croissance massive du volume de données MongoDB.
Lorsque MongoDB stocke des quantités massives de données, une seule machine peut être insuffisante pour stocker les données, et elle peut également être insuffisante pour fournir un débit de lecture et d'écriture acceptable. À ce stade, nous pouvons partitionner les données sur plusieurs machines afin que le système de base de données puisse stocker et traiter davantage de données.
Pourquoi utiliser le sharding
- Toutes les opérations d'écriture sont copiées vers le nœud primaire
- Les données sensibles à la latence seront interrogées sur le nœud primaire
- Un ensemble de réplicas unique est limité à 12 nœuds
- Une mémoire insuffisante peut se produire lorsque le volume de requêtes est énorme.
- Espace disque local insuffisant
- La mise à l'échelle verticale est coûteuse
Sharding MongoDB
Le diagramme suivant montre la répartition de la structure d'un cluster shardé dans MongoDB :

Le diagramme ci-dessus comprend principalement les trois composants principaux suivants :
-
Shard :
Utilisé pour stocker les blocs de données réels. Dans un environnement de production réel, le rôle d'un serveur shard peut être assumé par un ensemble de réplicas composé de plusieurs machines afin d'éviter un point de défaillance unique de l'hôte.
-
Serveur de configuration :
Une instance mongod qui stocke l'intégralité des ClusterMetadata, y compris les informations sur les chunks.
-
Routeurs de requêtes :
Un routeur frontal par lequel les clients se connectent, faisant apparaître l'ensemble du cluster comme une seule base de données. Les applications front-end peuvent l'utiliser de manière transparente.
Exemple de sharding
La répartition des ports de la structure de sharding est la suivante :
Shard Server 1:27020 Shard Server 2:27021 Shard Server 3:27022 Shard Server 4:27023 Config Server :27100 Route Process:40000
Étape 1 : Démarrer le serveur Shard
[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
Étape 2 : Démarrer le serveur de configuration
[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
Remarque :Ici, nous pouvons le démarrer comme un service mongodb normal, sans ajouter les paramètres --shardsvr et --configsvr. Étant donné que la fonction de ces deux paramètres est de modifier le port de démarrage, nous pouvons simplement spécifier le port nous-mêmes.
Étape 3 : Démarrer le processus de routage
/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500
Parmi les paramètres de démarrage de mongos, l'élément chunkSize sert à spécifier la taille des chunks, en MB, avec une taille par défaut de 200MB.
Étape 4 : Configurer le sharding
Ensuite, nous utilisons MongoDB Shell pour nous connecter à mongos et ajouter des nœuds Shard.
[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 }
Étape 5 : Aucune modification majeure n'est requise dans le code du programme. Connectez simplement la base de données au port 40000 de la même manière que vous vous connecteriez à une base de données mongo ordinaire.
Autres extensions