Creación de índices rolling en un replica set (miembro a miembro)
MongoDBMantenimientoComando
// 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)Qué hace
Crea el índice en cada miembro por separado ejecutando temporalmente el miembro en modo standalone fuera del conjunto; el primario nunca soporta la carga de la creación.
Cuándo usarlo
Cuando el impacto de la creación distribuida por defecto sobre el primario y sobre el retraso de replicación es inaceptable para una colección muy grande.
Precaución
El tiempo de mantenimiento de cada miembro debe ser menor que la ventana del oplog; de lo contrario el miembro estará too stale al volver. Al crear un índice único de forma rolling, detenga las escrituras en la colección durante toda la creación; de lo contrario algunos miembros pueden acabar con documentos que lo violan. Inicie el miembro standalone en un puerto distinto para que las aplicaciones no se conecten a él.