Forçar a reconfiguração de um replica set após perder a maioria (force reconfig)
MongoDBReplica SetComando
// 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 }))O que faz
Quando a maioria dos membros com voto é perdida permanentemente (ex.: um data center inteiro caiu), monta uma nova configuração a partir dos membros sobreviventes para que o set possa eleger um primário novamente.
Quando usar
Apenas em um cenário de desastre: a maioria não vai voltar e o set está preso em somente leitura.
Atenção
Este é o último recurso. Se os membros perdidos voltarem depois com a configuração antiga, pode ocorrer split-brain e rollback; isole-os da rede e, ao trazê-los de volta, apague seus dados e adicione-os com um initial sync. Escolha o membro com o optime mais recente; caso contrário, as escritas não confirmadas pela maioria nos outros membros caem em rollback. Não use force para mudanças rotineiras de membros.