Принудительная реконфигурация набора реплик после потери большинства (force reconfig)
MongoDBReplica SetКоманда
// 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 }))Что делает
Когда большинство голосующих участников потеряно безвозвратно (например, пропал целый ЦОД), строит новую конфигурацию из уцелевших участников, чтобы набор снова мог избрать primary.
Когда использовать
Только в сценарии катастрофы: большинство не вернётся, и набор застрял в режиме только для чтения.
Внимание
Это крайняя мера. Если потерянные участники позже вернутся со старой конфигурацией, возможны split-brain и rollback; изолируйте их от сети и при возвращении очистите их данные и добавьте через начальную синхронизацию. Выберите участника с самым свежим optime; иначе записи, не подтверждённые большинством на других участниках, попадут в rollback. Не используйте force для рутинных изменений состава.