失去多数派后强制重新配置副本集(force reconfig)
MongoDB副本集命令
// 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。
适用场景
仅用于灾难场景:多数派无法恢复,副本集卡在只读状态。
注意
这是最后手段。若丢失的成员之后带着旧配置回来,可能出现脑裂和回滚;将其与网络隔离,带回时清空其数据并通过初始同步加入。选择 optime 最新的成员;否则其他成员上未经多数派提交的写入会进入回滚。不要在常规成员变更中使用 force。