Aller au contenu

Mise en place et entretien d'un replica set#

Configuration initiale d'un replica set#

  • Installer MongoDB sur chaque serveur
    • utiliser la version stable et compatible entre les membres
  • Configurer les fichiers de configuration (mongod.conf) :
    • replicaSet: spécifier le nom unique du replica set
    • bindIp: définir l'adresse IP du serveur pour écouter les connexions
    • port: déterminer le port d'écoute (par défaut : 27017)
  • Démarrer le service MongoDB sur chaque serveur
    • systemctl start mongod ou service mongod start
  • Se connecter à l'instance principale avec mongo shell
    • mongosh --host adresse_IP_du_serveur --port port_d'écoute
  • Initialiser le replica set :
rs.initiate({
  _id: "nom_du_replica_set",
  members: [
    { _id: 0, host: "adresse_IP_serveur1:port" },
    { _id: 1, host: "adresse_IP_serveur2:port" },
    { _id: 2, host: "adresse_IP_serveur3:port" }
  ]
})

Ajout et suppression de membres#

Ajouter un membre au replica set :

rs.add("adresse_IP_serveur4:port")

Supprimer un membre du replica set :

rs.remove("adresse_IP_serveur2:port")

Gestion des priorités et votes des membres#

Intérêt#

  • Les priorités déterminent l'ordre de préférence pour l'élection d'un membre en tant que primaire.
  • Les votes servent à attribuer un poids aux membres lors de l'élection d'un nouveau primaire.

Modifier la priorité d'un membre#

cfg = rs.conf()
cfg.members[1].priority = 2
rs.reconfig(cfg)

Modifier les votes d'un membre#

cfg = rs.conf()
cfg.members[1].votes = 0
rs.reconfig(cfg)

Surveillance et maintenance d'un replica set#

Vérifier l'état#

  • Vérifier l'état du replica set : rs.status()
  • Vérifier l'état des membres et les rôles actuels avec rs.isMaster()
  • Consulter les logs : db.adminCommand({ logRotate: 1 })

Surveiller#

  • Utiliser les outils de surveillance :
    • mongostat : statistiques en temps réel
    • mongotopa : activité des collections

Maintenance#

  • Gérer la maintenance planifiée :
    • Mettre un membre en mode maintenance : rs.stepDown(temps) (où temps est la durée en secondes)
    • Redémarrer un membre avec une configuration modifiée : rs.reconfig(cfg, { force: true }) (attention, forcer une reconfiguration peut entraîner une perte de données)