レプリカセットでのローリングインデックス構築 (メンバーごと)
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)概要
メンバーを一時的にセット外のスタンドアロンとして実行し、各メンバーで個別にインデックスを構築する。プライマリが構築の負荷を負うことはない。
使用する場面
非常に大きなコレクションで、デフォルトの分散構築によるプライマリとレプリケーション遅延への影響が許容できない場合。
注意
各メンバーのメンテナンス時間は oplog ウィンドウより短くする必要がある。そうしないと、メンバーは復帰時に too stale となる。ローリング方式で一意インデックスを構築する場合は、構築全体の間コレクションへの書き込みを停止する。そうしないと、一部のメンバーに制約違反のドキュメントが残る可能性がある。アプリケーションが接続しないよう、スタンドアロンのメンバーは別のポートで起動する。