DBAtlas · Atlas de operações de banco de dados

Construção de índice rolling em um replica set (membro a membro)

MongoDBManutenção

Comando

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

O que faz

Constrói o índice em cada membro separadamente, rodando temporariamente o membro como standalone fora do set; o primário nunca carrega a carga da construção.

Quando usar

Quando o impacto da construção distribuída padrão no primário e no lag de replicação é inaceitável para uma collection muito grande.

Atenção

O tempo de manutenção de cada membro precisa ser menor que a janela do oplog; caso contrário, o membro fica too stale ao voltar. Ao construir um índice único pelo método rolling, pare as escritas na collection durante toda a construção; caso contrário, alguns membros podem acabar com documentos que violam o índice. Inicie o membro standalone em outra porta para que as aplicações não se conectem a ele.

Abrir no DBAtlas →

Relacionados