MongoDB: Replica set (HA)
Comment configurer un replica set haute disponibilité
Un replica set est un groupe de nœuds MongoDB qui travaillent ensemble pour assurer une haute disponibilité et de meilleures performances en dupliquant les données sur plusieurs serveurs. Avec un replica set, votre base de données reste accessible même si l’un des nœuds tombe en panne, et vous pouvez traiter davantage de requêtes en répartissant la charge de travail.
Exemple d’un replica set avec 3 nœuds
Dans une configuration haute disponibilité, si un nœud devient hors ligne, vos données restent accessibles via les autres nœuds. Les performances sont également améliorées puisque toutes les opérations d’écriture sont dirigées vers le nœud primaire, tandis que les lectures peuvent être réparties sur les nœuds secondaires.
Si vous débutez avec les replica sets, vous pouvez consulter la documentation officielle de MongoDB pour plus d’informations.
Fonctionnement des replica sets
Pour mettre en place un replica set, vous aurez besoin d’au moins trois nœuds MongoDB :
- Un nœud agit comme primary et gère toutes les opérations d’écriture ainsi que, par défaut, les lectures.
- Les autres nœuds sont des secondaries. Ils répliquent en continu les données du primary quasiment en temps réel.
Si un nœud secondaire devient indisponible, votre application continue de fonctionner normalement. Lorsqu’il rejoint à nouveau le cluster, il synchronise les données manquées et se remet à jour avec le reste du replica set.
Si le nœud primary tombe en panne, le replica set déclenche automatiquement une élection pour choisir un nouveau primary. Ce processus prend généralement environ 10 secondes. Pendant cette période, le replica set est en lecture seule. Dès qu’un nouveau primary est élu, toutes les opérations reprennent normalement.
Exemple d’une élection
Premiers pas avec un replica set MongoDB
Pour créer un replica set sur Stackhero, il vous faut au moins trois instances MongoDB. Voici un guide étape par étape :
- Lancez vos trois (ou plus) instances MongoDB depuis le tableau de bord Stackhero.
- Une fois vos instances démarrées, mettez à jour leur configuration dans le tableau de bord :
- Définissez le même mot de passe admin sur chaque instance.
- Activez l’option Activer le replica set.
- Choisissez un nom de replica et une clé secrète que tous les nœuds partageront. (À noter : Le nom du replica ne peut pas être modifié après création. Si vous n’êtes pas certain,
rs-1est une bonne valeur par défaut.)
Rappelez-vous que TOUTES vos instances doivent avoir une configuration identique (mot de passe admin, nom du replica set et clé secrète du replica).
Une fois la configuration enregistrée, vous devrez définir tous les membres de votre replica set dans MongoDB. Voici comment procéder :
- Vous pouvez utiliser cette commande pour vous connecter avec le Mongo CLI :
mongo --quiet mongodb://admin@<XXXXXX>.stackhero-network.com/?tls=true
Si vous n’avez pas le Mongo CLI installé, vous pouvez utiliser l’image Docker officielle avec cette commande :
> docker run -it mongo /bin/bash
Cette commande ouvre un shell dans lequel vous pouvez exécuter directement des commandes Mongo.
- Une fois connecté, vous pouvez initialiser votre replica set avec la commande suivante. Assurez-vous de remplacer le
_idpar le nom de votre replica set et d’adapter les noms d’hôtes des membres selon vos besoins :
rs.initiate({
_id: "rs-1",
members: [
{ _id: 0, host: "<XXXXXX>.stackhero-network.com:27017" },
{ _id: 1, host: "<XXXXXX>.stackhero-network.com:27017" },
{ _id: 2, host: "<XXXXXX>.stackhero-network.com:27017" }
]
})
Si la commande réussit, vous verrez une réponse du type { "ok" : 1 }.
- Si vous souhaitez consulter la configuration de votre replica set, vous pouvez exécuter :
rs.conf()
Vous n’avez besoin d’appliquer cette configuration que sur un seul nœud. Les autres nœuds sont mis à jour automatiquement.
Votre replica set MongoDB devrait maintenant être opérationnel.
Vérifier le statut de votre replica set MongoDB
Pour vous aider à surveiller le statut de votre replica set, nous avons créé un script Node.js qui vérifie l’état chaque seconde. Vous pouvez retrouver ce script sur notre dépôt GitHub.
Capture d’écran du script
Dépannage
Gérer l’erreur : "network error while attempting to run command 'isMaster' on host"
Si vous voyez cette erreur, c’est généralement parce que le chiffrement TLS n’a pas été activé. Vous pouvez corriger cela en ajoutant le paramètre tls=true à votre URL de connexion. Par exemple :
mongodb://admin:PASSWORD@<XXXXXX>.stackhero-network.com:27017/admin?tls=true