DBAtlas · Atlas d'exploitation des bases de données

Maintenance en rolling sur un replica set (redémarrage, correctif OS, mise à niveau mineure)

MongoDBReplica Set

Commande

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

Ce que fait la commande

Donne l'ordre de mise en maintenance des membres un par un, les secondaires d'abord et le primaire en dernier, afin que redémarrages, correctifs OS ou mises à jour des binaires se fassent sans mettre le set hors service.

Quand l'utiliser

Lors des mises à jour OS/noyau planifiées, des mises à niveau de version mineure, des modifications de paramètres mongod ou de la maintenance disque/matérielle.

Attention

N'arrêtez jamais plus d'un membre à la fois ; dans un set de 3 membres, perdre deux membres fait perdre la majorité. Après chaque membre, confirmez l'état SECONDARY et que le retard est résorbé. stepDown provoque une courte interruption des écritures ; assurez-vous que les drivers se reconnectent avec les retryable writes. S'il y a un arbitre, traitez-le dans la même séquence.

Ouvrir dans DBAtlas →

Voir aussi