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œudsExemple 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.

Pour mettre en place un replica set, vous aurez besoin d’au moins trois nœuds MongoDB :

  1. Un nœud agit comme primary et gère toutes les opérations d’écriture ainsi que, par défaut, les lectures.
  2. 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 électionExemple d’une élection

Pour créer un replica set sur Stackhero, il vous faut au moins trois instances MongoDB. Voici un guide étape par étape :

  1. Lancez vos trois (ou plus) instances MongoDB depuis le tableau de bord Stackhero.
  2. Une fois vos instances démarrées, mettez à jour leur configuration dans le tableau de bord :
    1. Définissez le même mot de passe admin sur chaque instance.
    2. Activez l’option Activer le replica set.
    3. 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-1 est 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 :

  1. 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.

  1. Une fois connecté, vous pouvez initialiser votre replica set avec la commande suivante. Assurez-vous de remplacer le _id par 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 }.

  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.

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 scriptCapture d’écran du script

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