定義
removeShardのシャーディングされたクラスターからシャードを削除します。
removeShardを実行すると、 MongoDB はバランサーを使用してシャードのチャンクをクラスター内の他のシャードに移動し、シャードを空にします。注意
The balancer must be enabled for
removeShardto complete. If the balancer is disabled, the command remains in the draining state and does not finish, even if you have already moved all data off the shard.シャードにシャーディングされていないコレクションがある場合は、シャーディングされていないコレクションをすべてシャードからドレイニングする必要があります。MongoDB 8.0 以降では、
sh.moveCollection()を使用してシャーディングされていないコレクションを移動できます。シャードを空にする手順の詳細については、 シャードクラスタからシャードを削除する を参照してください。シャードが空になると、 MongoDB はクラスターからシャードを削除します。
注意
削除された シャード
storage.dbPathをシャーディングされたクラスターに再度追加する場合は、再追加する前に、シャードのすべてのノードの をクリアして、シャードの ファイルを削除する必要があります。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
注意
このコマンドは MongoDB Atlasではサポートされていません。See Atlas クラスターからシャードを追加または削除するには、「Atlasシャードクラスタの変更」を参照してください。
構文
このコマンドの構文は、次のとおりです。
db.adminCommand( { removeShard : <shardToRemove> } )
動作
シャード削除中、クラスターのバックアップはありません
シャードの削除中は、 クラスター データをバックアップできません。
removeShard 操作の同時実行
複数のremoveShard操作を進行させることができます。
アクセス要件
authorizationを有効にしている場合は、 clusterManagerロールまたはremoveShardアクションを含む任意のロールが必要です。
データベース移行要件
シャーディングされたシャーディングされたクラスターの各データベースにはプライマリシャードがあります。 削除するシャードがクラスターのデータベースの 1 つのプライマリでもある場合は、シャードからすべてのデータを移行した後、データベースを新しいシャードに手動で移動する必要があります。 詳細については、 movePrimaryコマンドとシャーディングされたシャードクラスタからシャードを削除するを参照してください。
チャンク バランシング
チャンクの分布が不均一なクラスター内のシャードを削除すると、バランサーはまずドレイン シャードからチャンクを削除し、次に残りの不均一なチャンクの分布のバランスをとります。
書込み保証 (write concern)
"majority"は、mongos コマンドの書込み保証( writeremoveShard concern )を に変換します。
変更ストリーム
シャードを削除すると、開いている変更ストリームのカーソルが閉じてしまい、閉じた変更ストリームのカーソルが完全に再開できなくなることがあります。
DDL 操作
クラスターが DDL操作( reshardCollectionなどのコレクションを変更する操作)を実行しているときにremoveShardを実行すると、 removeShardは同時 DDL操作が完了した後にのみ実行されます。
例
mongosh以降、 removeShard操作は次のようになります。
db.adminCommand( { removeShard : "bristol01" } )
bristol01を削除するシャードの名前に置き換えます。 removeShardを実行すると、コマンドによって次のようなメッセージが返されます。
{ "msg" : "draining started successfully", "state" : "started", "shard" : "bristol01", "note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove", "dbsToMove" : [ "fizz", "buzz" ], "collectionsToMove" : [ "fizz.coll1", "buzz.coll1" ], "ok" : 1, "operationTime" : Timestamp(1575398919, 2), "$clusterTime" : { "clusterTime" : Timestamp(1575398919, 2), "signature" : { "hash" : BinData(0,"Oi68poWCFCA7b9kyhIcg+TzaGiA="), "keyId" : Long("6766255701040824328") } } }
バランサーによって、 bristol01という名前のシャードからクラスター内の他のシャードへの チャンクの移行(「ドレイン」) が開始されます。 これらの移行は、クラスターに不要な負荷がかかるのを避けるために、低速で行われます。
コマンドを再度実行すると、 removeShardはプロセスの現在のステータスを返します。 たとえば、操作がongoing状態の場合、コマンドは次のような出力を返します。
{ "msg" : "draining ongoing", "state" : "ongoing", "remaining" : { "chunks" : NumberLong(2), "dbs" : NumberLong(2), "jumboChunks" : NumberLong(0), "collectionsToMove": NumberLong(2) }, "note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove", "dbsToMove" : [ "fizz", "buzz" ], "collectionsToMove" : [ "fizz.coll1", "buzz.coll1" ], "ok" : 1, "operationTime" : Timestamp(1575399086, 1655), "$clusterTime" : { "clusterTime" : Timestamp(1575399086, 1655), "signature" : { "hash" : BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="), "keyId" : Long("6766255701040824328") } } }
出力では、 remainingフィールドには次のフィールドが含まれます。
フィールド | 説明 |
|---|---|
| 現在シャードに残っているチャンクの合計数。 |
| プライマリ シャードがシャードであるデータベースの合計数。 これらのデータベースは |
|
|
| シャードから移動する必要がある、シャーディングされていないコレクションの総数。 |
引き続きremoveShardコマンドのステータス( 残りのチャンク数が0になるまで、 コマンドを再実行します)。
{ "msg" : "draining ongoing", "state" : "ongoing", "remaining" : { "chunks" : NumberLong(0), // All chunks have moved "dbs" : NumberLong(2), "jumboChunks" : NumberLong(0), "collectionsToMove": NumberLong(2) }, "note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove", "dbsToMove" : [ "fizz", "buzz" ], "collectionsToMove" : [ "fizz.coll1", "buzz.coll1" ], "ok" : 1, "operationTime" : Timestamp(1575400343, 1), "$clusterTime" : { "clusterTime" : Timestamp(1575400343, 1), "signature" : { "hash" : BinData(0,"9plu5B/hw4uWAgEmjjBP3syw1Zk="), "keyId" : Long("6766255701040824328") } } }
バランサーがシャードからすべてのチャンクをドレインした後、ドレインされたシャードからコレクションとデータベースを手動で移動する必要がある場合があります。
の出力にremoveShard フィールドのコレクションが含まれている場合は、collectionsToMove moveCollectionを使用してそれらのコレクションをドレインシャード以外のシャードに移動するか、コレクションを削除します(関連するデータファイルが削除されます)。
removeShard の出力に dbsToMoveフィールドのデータベースが含まれている場合は、それらのデータベースに movePrimary を使用するか、データベースを削除します(関連するデータファイルを削除します)。
注意
最高のパフォーマンスを得るには、データベースを移動する前にコレクションを移動してください。
バランサーがすべてのチャンクをシャードから移動し、dbsToMove と collectionsToMove を処理したら、removeShard は終了できます。removeShard を再度実行すると、次のような出力が返されます。
{ "msg" : "removeshard completed successfully", "state" : "completed", "shard" : "bristol01", "ok" : 1, "operationTime" : Timestamp(1575400370, 2), "$clusterTime" : { "clusterTime" : Timestamp(1575400370, 2), "signature" : { "hash" : BinData(0,"JjSRciHECXDBXo0e5nJv9mdRG8M="), "keyId" : Long("6766255701040824328") } } }