Construction d'index en rolling sur un replica set (membre par membre)
MongoDBMaintenanceCommande
// 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.