Comment déployer un Cluster MongoDB (version 3.4)
J’ai travaillé sur un projet ces jours-ci sur un projet basé sur MongoDB. Le projet était de permettre à un client d’avoir l’historique de son compte (toutes les transactions qu’il a faites) en temps réel dans l’environnement telco. Due à certaines raisons, nous avons choisi d’utiliser la technologie MongoDB et parce que nous parlons de téraoctets de données, un cluster MongoDB était nécessaire. Après avoir creusé sur Internet, j’ai réussi à le faire. (
en passant, le projet a été un succès)Cet article vous montrera les étapes que j’ai suivies pour configurer mon cluster sur MongoDB 3.4 lors du projet. Nous voulions avoir un trois Replica Set et deux routeurs. Pour un objectif d’optimisation, nous avons choisi d’avoir 3 nœuds par Replica Set (un primaire, un secondaire et un arbitre) et de lancer tous les arbitres sur le même nœud en raison du fait qu’il ne consomme pas beaucoup de ressources.
Commençons les configurations.
Preparation
Nous supposons que vous travaillez sur linux et que MongoDB est bien installé. Sinon, consultez ce lien: https://docs.mongodb.com/manual/administration/install-on-linux/
Si MongoDB est installé, tous les nœuds doivent être configurés en fonction de leur but (Replica set, config servers or routeurs).
# Configurer le répertoire de données mkdir /data/mongo-metadata chown -R mongod:mongod /data/mongo-metadata/ # Configuration du nœud dbPath = /data/mongo-metadata/ bindIp = 0.0.0.0 replication: replSetName: replica-name or config-name sharding: clusterRole: shardsvr or configsvr
Explication:
- replSetName et clusterRole changent en fonction du noeud
- replSetName doit être rs1, rs2 or rs3 pour le Replica Set et cs pour le Config Server.
- clusterRole doit être shardsvr pour Replica Set et configsvr pour Config Server.
Maintenant que tout est configuré, commençons la configuration du MongoDB Cluster.
Config Servers
Les Config Servers contiennent toutes les métadonnées de votre Cluster MongoDB. Tout le mappage de vos données dans votre Cluster MongoDB est stocké ici. S’ils tombent, tout votre Cluster MongoDB est en panne. Dans cette version de MongoDB (depuis la version 3) les Config Servers sont configurés comme un Replica Set et dans notre cas, nous l’appelerons cs. Comme recommandé par MongoDB, nous utiliserons trois nœuds avec les noms d’hôte suivant: host-conf01, host-conf02 et host-conf03.
Pour le configurer, créez une connexion sur le shell de mongo sur l’un des nœuds et tapez les commandes ci-dessous:
rs.initiate( { _id: "cs", configsvr: true, members: [ { _id : 0, host : "host-conf01:27017" }, { _id : 1, host : "host-conf02:27017" }, { _id : 2, host : "host-conf03:27017" } ] } )
Replica Set configuration
Replica Set est un ensemble de nœuds mongo db qui maintiennent le même jeu de données. Il offre une haute disponibilité de données et une redondance dans l’environnement de production. Dans Replica Set, vous avez un noeud principal qui gère les opérations d’écriture et de lecture et le noeud secondaire qui gère les opérations de lecture. Lorsque le noeud principal a échoué, l’un des nœuds secondaires devient le noeud principal.
Dans certains cas, vous pouvez configurer un arbitre, son but est de gérer l’élection entre les noeuds secondaires en cas d’indisponibilité du noeud principal. Il n’a pas de données du Replica Set: il est simplement utilisé pour l’élection. Dans notre cas, nous aurons deux nœuds et un aribitre: un primaire, un secondaire et un arbitre.
configuration du Replica Set
For each Replica Set connect on the mongo shell of each primary node and type the command below:
rs.initiate( { _id : "rs1", members: [ { _id : 0, host : "host-replica-rs1-1:27017" } ] }) rs.add("host-replica-rs1-2:27017") rs.addArb("host-arbiter:30000") rs.status()
Explication:
- Vous devez répéter le processus ci-dessus sur le noeud primaire de chaque Replica Set.
- rs1 est le nom du Replica Set vous pouvez le changer.
- host-replica-rs1-1 est le nom d’hôte du noeud primaire.
- host-replica-rs1-2 est le nom d’hôte du noeud secondaire.
- host-arbiter est le nom d’hôte de l’arbitre.
NB: Dans notre architecture, tous les arbitres sont lancés sur le même nœud, donc vous devez changer le port lorsque vous configurez votre Replica Set. Par exemple ici (sur rs1 le port est 30000, sur rs2 il ca 30001, …)
Forcer la priorité
Dans certains cas, vous souhaitez donner priorité à un nœud en cas d’élection. Donc, si ce nœud est disponible pendant et l’élection du noeud principal, il sera privilégié.
Pour ce faire, connectez-vous simplement sur le shell mongo du noeud primaire et tapez la commande ci-dessous.
cfg = rs.conf(); cfg.members[0].priority = 10; cfg.members[1].priority = 5; # ... rs.reconfig(cfg); rs.conf();
Configuration du Cluster MongoDB
Replica Set et Configs Server sont maintenant OK. Mettons le dernier morceau de notre puzzle: mettons tous ces éléments ensemble.
Pour ce faire, vous devez démarrer le client mongos, vous connecter au client mongos et ajouter Replica Set à votre cluster MongoDB.
Démarrez le client mongos (lancez le routeur)
Tout d’abord, assurez-vous que le service mongod n’est pas démarré sur le serveur si c’est le cas, arrêtez-le puis tapez la commande ci-dessous:
sudo -u mongod mongos --logpath /var/log/mongodb/mongos.log --configdb cs/host-conf01:27017,host-conf02:27017,host-conf03:27017 &
Si vous rappelez qu’un MongoDB Cluster possède 3 parties: Config Servers, Replica Set et Router. Nous étions OK avec les Replica Set et le Config Server, et maintenant nous sommes OK avec les routeurs car pour définir un routeur, il vous suffit de lancer une instance de mongos.
Ajouter les Replica Set au cluster MongoDB
Connectez-vous à son client mongo une fois que les mongos sont lancés et tapez les commandes ci-dessous:
sh.addShard( "rs1/host-replica-rs1-1:27017") sh.addShard( "rs1/host-replica-rs1-2:27017") sh.addShard( "rs2/host-replica-rs2-1:27017") sh.addShard( "rs2/host-replica-rs2-2:27017") sh.addShard( "rs3/host-replica-rs3-1:27017") sh.addShard( "rs3/host-replica-rs3-2:27017")
Conclusion
Voici les étapes que j’ai utilisées pour configurer mon cluster MongoDB. Aujourd’hui, notre Cluster MongoDB comporte 3 Replica Set (chaque Replica Set a deux noeuds et sur un arbitre) et tout fonctionne bien.
Merci beaucoup d’avoir lu cet article.
Sources: