movePrimary
movePrimary
のシャーディングされたクラスターでは、
movePrimary
は、データベース内のシャーディングされていないすべてのコレクションを保持するプライマリシャードを再割り当てします。movePrimary
はまず、クラスター メタデータ内のプライマリシャードを変更し、次にシャーディングされていないすべてのコレクションを指定されたシャードに移行します。 次の形式の コマンドを使用します。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
mongos
は movePrimary
に対して"majority"
書込み保証(write concern)を使用し 。
メンテナンスウィンドウ中に を発行するmovePrimary
movePrimary
データベースのサイズやネットワークの健全性やマシン リソースなどの要因によっては、完了までにかなりの時間が必要になる場合があります。 移行中にデータベースに対して発行された読み取りまたは書き込み操作は、移行操作が失敗したり、データが失われたりするなど、予期しない動作を引き起こす可能性があります。
こうした場合、アプリケーションでクラスターへのすべての読み取りと書込みを停止するメンテナンスウィンドの予定を立てることを検討します。 計画的なダウンタイム中にmovePrimary
を発行すると、データベース内の非シャードコレクションへの読み取りまたは書込みがインターリーブされることによって、未定義の動作が発生するリスクを軽減します。
名前空間の競合による移行の妨げ
movePrimary
宛先シャードに競合するコレクション名前空間が含まれている場合、 は失敗します。 例:
管理者は、
hr
データベースのプライマリシャードを変更するためにmovePrimary
を発行します。movePrimary
がそのコレクションを移動している間に、ユーザーまたはアプリケーションがhr
のシャーディングされていないコレクションに対して書込み操作を発行します。 書込み (write) 操作により、元のプライマリシャードに コレクションが作成されます。管理者は後で
movePrimary
を発行して、hr
データベースの元のプライマリ シャードを復元します。movePrimary
インターリーブ書込み (write) 操作から残った名前空間と競合するため失敗します。
宛先シャードはインデックスを再ビルドする必要がある
movePrimary
操作の一部として、宛先シャードは、プライマリ シャードになった後、移行されたコレクションのインデックスを再構築する必要があります。 これには、コレクションあたりのインデックス数とインデックスを作成するデータ量によっては、かなりの時間が必要になる場合があります。
インデックス構築プロセスの詳細については、「入力済みコレクションでのインデックス構築 」を参照してください。
Change Streamsを持つコレクションの移動
MongoDB8.0 以降、movePrimary
は 変更ストリーム を持つコレクションを 無効化 しません。コレクションが新しいシャードに移動された後も、変更ストリームはコレクションからイベントを引き続き読み取ります。
MongoDBの以前のバージョンでは、 movePrimary
はコレクション変更ストリームを無効にし、変更ストリームはコレクションからイベントを読み取れません。
すべてのMongoDBバージョンで、移動されたシャーディングされていないコレクションの UUIDをmovePrimary
は更新します。
詳細情報
完全な手順については、「 シャーディングされたシャードクラスタからシャードを削除する」を参照してください。