Forcer la reconfiguration d'un replica set après perte de la majorité (force reconfig)
MongoDBReplica SetCommande
// On a surviving member with the most recent optime (runs as a secondary):
rs.status().members.map(m => ({ host: m.name, state: m.stateStr, health: m.health, optime: m.optimeDate }))
cfg = rs.conf()
cfg.members.map((m, i) => ({ i: i, host: m.host }))
// Keep only the reachable members (example: members 0 and 2):
cfg.members = [cfg.members[0], cfg.members[2]]
rs.reconfig(cfg, { force: true })
// Verify the new primary election:
rs.status().members.map(m => ({ host: m.name, state: m.stateStr }))Ce que fait la commande
Quand la majorité des membres votants est définitivement perdue (par ex. un data center entier a disparu), construit une nouvelle configuration à partir des membres survivants pour que le set puisse de nouveau élire un primaire.
Quand l'utiliser
Uniquement dans un scénario de sinistre : la majorité ne reviendra pas et le set est bloqué en lecture seule.
Attention
C'est un dernier recours. Si les membres perdus reviennent plus tard avec l'ancienne configuration, un split-brain et un rollback peuvent se produire ; isolez-les du réseau et, lors de leur retour, effacez leurs données et ajoutez-les avec une synchronisation initiale. Choisissez le membre ayant l'optime le plus récent ; sinon les écritures non validées par la majorité sur les autres membres tombent en rollback. N'utilisez pas force pour les changements de membres courants.