DBAtlas · Atlas de operações de banco de dados

Manutenção rolling em um replica set (restart, patch do SO, upgrade menor)

MongoDBReplica Set

Comando

// 1) Before starting: all members healthy, low lag, and an oplog window longer than the maintenance
rs.printSecondaryReplicationInfo()
// 2) Clean shutdown on the SECONDARY under maintenance (then OS/binary work, restart with the same config):
db.getSiblingDB("admin").shutdownServer({ timeoutSecs: 60 })
// 3) Wait until the member is SECONDARY and lag has closed, then move to the next secondary:
rs.status().members.map(m => ({ host: m.name, state: m.stateStr, health: m.health }))
// 4) When all secondaries are done, on the PRIMARY: hand over to a secondary that catches up within 30 s
rs.stepDown(120, 30)
// 5) The old primary is now a SECONDARY: apply steps 2 and 3 to it

O que faz

Dá a ordem para colocar os membros em manutenção um de cada vez, secundários primeiro e o primário por último, para que restarts, patches do SO ou atualizações de binários sejam feitos sem tirar o set de serviço.

Quando usar

Durante atualizações planejadas de SO/kernel, upgrades de versão menor, mudanças de parâmetros do mongod ou manutenção de disco/hardware.

Atenção

Nunca desligue mais de um membro por vez; em um set de 3 membros, perder dois membros significa perder a maioria. Após cada membro, confirme o estado SECONDARY e que o lag foi zerado. O stepDown causa uma breve interrupção de escrita; garanta que os drivers se reconectem com retryable writes. Se houver um arbiter, trate-o na mesma sequência.

Abrir no DBAtlas →

Relacionados