Rollierender Index-Build auf einem Replica Set (Mitglied für Mitglied)
MongoDBWartungBefehl
// 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)Was es tut
Baut den Index auf jedem Mitglied separat, indem das Mitglied vorübergehend standalone außerhalb des Sets betrieben wird; der Primary trägt nie die Build-Last.
Wann einsetzen
Wenn die Auswirkung des standardmäßigen verteilten Builds auf den Primary und die Replikationsverzögerung bei einer sehr großen Collection nicht akzeptabel ist.
Vorsicht
Die Wartungszeit jedes Mitglieds muss kürzer als das Oplog-Fenster sein; sonst ist das Mitglied bei der Rückkehr too stale. Beim rollierenden Aufbau eines Unique Index die Schreibzugriffe auf die Collection für den gesamten Build stoppen; sonst können einige Mitglieder verletzende Dokumente enthalten. Starte das Standalone-Mitglied auf einem anderen Port, damit sich keine Anwendungen damit verbinden.