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

Construction d'index en rolling sur un replica set (membre par membre)

MongoDBMaintenance

Commande

// 1) Shut down a SECONDARY; comment out replication.replSetName and start it standalone on another port:
//    mongod --config /etc/mongod.conf --port 27217 --setParameter disableLogicalSessionCacheRefresh=true
// 2) Build the index on the standalone member:
db.getSiblingDB("shop").musteri.createIndex({ email: 1 }, { name: "idx_email" })
// 3) Restart with the normal configuration; wait until it is SECONDARY and lag has closed:
rs.printSecondaryReplicationInfo()
// 4) When all secondaries are done, step down the primary and apply steps 1-3 to the old primary:
rs.stepDown(120, 30)

Ce que fait la commande

Construit l'index sur chaque membre séparément en exécutant temporairement le membre en standalone hors du set ; le primaire ne supporte jamais la charge de la construction.

Quand l'utiliser

Quand l'impact de la construction distribuée par défaut sur le primaire et sur le retard de réplication est inacceptable pour une très grande collection.

Attention

La durée de maintenance de chaque membre doit être inférieure à la fenêtre de l'oplog ; sinon le membre est too stale à son retour. Lors de la construction d'un index unique en rolling, arrêtez les écritures sur la collection pendant toute la construction ; sinon certains membres peuvent se retrouver avec des documents en violation. Démarrez le membre standalone sur un port différent pour que les applications ne s'y connectent pas.

Ouvrir dans DBAtlas →

Voir aussi