Поочерёдное построение индекса в наборе реплик (участник за участником)
MongoDBОбслуживаниеКоманда
// 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)Что делает
Строит индекс на каждом участнике отдельно, временно запуская его как standalone вне набора; primary никогда не несёт нагрузку построения.
Когда использовать
Когда влияние распределённого построения по умолчанию на primary и на отставание репликации неприемлемо для очень большой коллекции.
Внимание
Время обслуживания каждого участника должно быть короче окна oplog; иначе участник при возвращении окажется too stale. При поочерёдном построении уникального индекса остановите запись в коллекцию на всё время построения; иначе на некоторых участниках могут оказаться документы, нарушающие ограничение. Запускайте standalone-участника на другом порту, чтобы к нему не подключались приложения.