DBAtlas · Atlas de operaciones de bases de datos

Forzar una reconfiguración del replica set tras perder la mayoría (force reconfig)

MongoDBReplica Set

Comando

// 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 }))

Qué hace

Cuando la mayoría de los miembros con voto se ha perdido de forma permanente (p. ej. ha desaparecido un centro de datos entero), construye una nueva configuración con los miembros supervivientes para que el conjunto pueda volver a elegir un primario.

Cuándo usarlo

Solo en un escenario de desastre: la mayoría no volverá y el conjunto está atascado en solo lectura.

Precaución

Es el último recurso. Si los miembros perdidos vuelven después con la configuración antigua, pueden producirse split-brain y rollback; aíslelos de la red y, al reincorporarlos, borre sus datos y añádalos con una sincronización inicial. Elija el miembro con el optime más reciente; de lo contrario, las escrituras no confirmadas por mayoría en otros miembros caen en rollback. No use force para cambios rutinarios de pertenencia.

Abrir en DBAtlas →

Relacionado