MongoDB: Replica set (HA)
Comment configurer un replica set haute disponibilité
Un replica set est un groupe de nœuds MongoDB qui collaborent pour offrir 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 gérer davantage de requêtes en répartissant la charge.
Exemple d'un replica set avec 3 nœuds
Dans une configuration haute disponibilité, si un nœud devient indisponible, vos données restent accessibles via les autres nœuds. Les performances sont également améliorées car 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écouvrez les replica sets, vous pouvez consulter la documentation officielle de MongoDB pour en savoir plus.
Fonctionnement des replica sets
Pour mettre en place un replica set, vous aurez besoin d'au moins trois nœuds MongoDB :
- Un nœud joue le rôle de 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 désigner un nouveau primary. Ce processus prend généralement environ 10 secondes. Pendant cette période, le replica set passe 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 minimum trois instances MongoDB. Voici les étapes à suivre :
- 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. (A noter : Le nom du replica ne peut pas être modifié après création. Si vous hésitez,
rs-1est une bonne valeur par défaut.)
Veillez à ce que TOUTES vos instances aient 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 :
- Utilisez cette commande pour vous connecter avec le Mongo CLI :
mongo --quiet mongodb://admin@<XXXXXX>.stackhero-network.com/?tls=true
Si vous n'avez pas installé le Mongo CLI, 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. Pensez à remplacer le
_idpar le nom de votre replica set et à adapter les noms d'hôtes des membres :
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 }.
- Pour consulter la configuration de votre replica set, vous pouvez exécuter :
rs.conf()
Il suffit d'appliquer cette configuration sur un seul nœud. Les autres sont mis à jour automatiquement.
Votre replica set MongoDB est maintenant 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 rencontrez cette erreur, cela provient généralement du fait 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