Rekonfiguration des Replica Sets nach Verlust der Mehrheit erzwingen (force reconfig)
MongoDBReplica SetBefehl
// 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 }))Was es tut
Baut bei dauerhaftem Verlust der Mehrheit der stimmberechtigten Mitglieder (z. B. ein ganzes Rechenzentrum ist weg) aus den verbliebenen Mitgliedern eine neue Konfiguration, damit das Set wieder einen Primary wählen kann.
Wann einsetzen
Nur im Katastrophenfall: Die Mehrheit kommt nicht zurück und das Set hängt im Nur-Lese-Zustand fest.
Vorsicht
Dies ist das letzte Mittel. Kehren die verlorenen Mitglieder später mit der alten Konfiguration zurück, können Split-Brain und Rollback auftreten; isoliere sie vom Netzwerk und lösche beim Zurückholen ihre Daten und füge sie mit einer Initial Sync hinzu. Wähle das Mitglied mit der neuesten optime; sonst fallen Schreibvorgänge, die auf anderen Mitgliedern nicht majority-committed sind, ins Rollback. Verwende force nicht für routinemäßige Änderungen der Mitgliedschaft.