movePrimaryシャーディングされたクラスターでは、 は、データベース内のシャーディングされていないすべてのコレクションを保持するプライマリシャードを再割り当てします。
movePrimarymovePrimaryはまず、 クラスターメタデータ内のプライマリシャードを変更し、次にシャーディングされていないすべてのコレクションを指定されたシャードに移行します。次の形式の コマンドを使用します。db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } ) たとえば、次のコマンドは、プライマリシャードを
testからshard0001に移動します。db.adminCommand( { movePrimary : "test", to : "shard0001" } ) コマンドが返すと、データベースのプライマリシャードの場所は指定されたシャードに切り替えられました。 シャードを完全に廃止するには、
removeShardコマンドを使用します。movePrimaryは、mongosインスタンスでのみ使用できる管理コマンドです。警告
movePrimaryを起動してから、コマンドが完了するまで、そのデータベース内のシャーディングされていないコレクションに対して読み取りまたは書込み操作を実行しないでください。移行中にこれらのコレクションに対して読み取りまたは書き込み操作を発行すると、移行操作が失敗したりデータが失われたりするなど、予期しない動作が発生する可能性があります。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
Considerations
mongosmovePrimaryは に対して 書込み保証"majority" (write concern)を使用します。
シャーディングされていないコレクション
を使用してシャーディングされていないコレクションを移動した後にのみ movePrimarysh.moveCollection()を実行します。 MongoDB.8 以降、0movePrimary プロセス中は移動されていない、シャーディングされていないコレクションは使用できません。
MongoDB Search インデックス
移動中のデータベースにMongoDB Search を使用するシャーディングされていないコレクションが含まれている場合、movePrimary の完了後にそれらの検索インデックスは使用できなくなります。 movePrimary は、移動したシャーディングされていないコレクションの UUID を更新するため、それらのコレクションのMongoDB Search インデックスを手動で再構築する必要があります。
メンテナンスウィンドウ
movePrimaryは、データベースのサイズやネットワークの健全性やマシン リソースなどの要因によっては、完了までにかなりの時間が必要になる場合があります。移行中、 は移動されるデータベース上のシャーディングされていないコレクションに対して DDL 操作の書込みまたは実行を試み、次のエラーを出して失敗します:"movePrimary is in progress" 。
こうした場合、アプリケーションでクラスターへのすべての読み取りと書込みを停止するメンテナンスウィンドウの予定を立てることを検討します。計画的なダウンタイム中にmovePrimary を発行すると、データベース内の非シャードコレクションへの読み取りまたは書込みがインターリーブされることによって、未定義の動作が発生するリスクを軽減します。
名前空間の競合
movePrimary 宛先シャードに競合するコレクション名前空間が含まれている場合、 は失敗します。 例:
管理者は、
hrデータベースのプライマリシャードを変更するためにmovePrimaryを発行します。movePrimaryがそのコレクションを移動している間に、ユーザーまたはアプリケーションがhrのシャーディングされていないコレクションに対して書込み操作を発行します。 書込み (write) 操作により、元のプライマリシャードに コレクションが作成されます。管理者は後で
movePrimaryを発行して、hrデータベースの元のプライマリ シャードを復元します。movePrimaryインターリーブ書込み (write) 操作から残った名前空間と競合するため失敗します。
インデックスの再ビルド
movePrimary操作の一部として、宛先シャードは、プライマリ シャードになった後、移行されたコレクションのインデックスを再構築する必要があります。 これには、コレクションあたりのインデックス数とインデックスを作成するデータ量によっては、かなりの時間が必要になる場合があります。
インデックス構築プロセスの詳細については、「入力済みコレクションでのインデックス構築 」を参照してください。
変更ストリーム
MongoDB8.0 以降、movePrimary は 変更ストリーム を持つイベント コレクションを無効化しません。コレクションが新しいシャードに移動された後も、変更ストリームはコレクションからイベントを引き続き読み取ります。
MongoDBの以前のバージョンでは、 movePrimaryはコレクション変更ストリームを無効にし、変更ストリームはコレクションからイベントを読み取れません。
すべてのMongoDBバージョンで、移動されたシャーディングされていないコレクションのUUIDをmovePrimaryが更新します。
詳細情報
完全な手順については、「 シャーディングされたシャードクラスタからシャードを削除する」を参照してください。