定義
- removeShard
- の シャーディングされたクラスターからシャードを削除します。 - removeShardを実行すると、MongoDB は バランサー を使用してシャードのチャンクをクラスター内の他のシャードに移動し、シャードをドレイニングします。 シャードが空になると、MongoDB はクラスターからシャードを削除します。- 注意- 削除された シャード - storage.dbPathをシャーディングされたクラスターに再度追加する場合は、再追加する前に、シャードのすべてのノードの をクリアして、シャードの ファイルを削除する必要があります。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
- MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン 
- MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン 
注意
このコマンドはMongoDB Atlasではサポートされていません。Atlas クラスターからシャードを追加または削除するには、「Atlasシャードクラスタの変更」を参照してください。
構文
このコマンドの構文は、次のとおりです。
db.adminCommand(    {      removeShard : <shardToRemove>    } ) 
動作
シャード削除中、クラスターのバックアップはありません
シャードの削除中は、 クラスター データをバックアップできません。
removeShard操作の同時実行
複数のremoveShard操作を進行させることができます。
アクセス要件
authorizationを有効にしている場合は、 clusterManagerロールまたはremoveShardアクションを含む任意のロールが必要です。
データベース移行要件
シャーディングされたクラスター内の各データベースには プライマリシャード があります。 削除するシャードがクラスターのデータベースの 1 つのプライマリでもある場合は、シャードからすべてのデータを移行した後、データベースを新しいシャードに手動で移動する必要があります。 詳細については、 movePrimaryコマンドと既存のシャーディングされたクラスターからシャードを削除するを参照してください。
チャンク バランシング
チャンクの分布が不均一なクラスター内のシャードを削除すると、バランサーはまずドレイン シャードからチャンクを削除し、次に残りの不均一なチャンクの分布のバランスをとります。
書込み保証 (write concern)
"majority"は、mongos コマンドの書込み保証( writeremoveShard concern )を に変換します。
変更ストリーム
シャードを削除すると、開いている変更ストリームのカーソルが閉じてしまい、閉じた変更ストリームのカーソルが完全に再開できなくなることがあります。
例
mongosh以降、 removeShard操作は次のようになります。
db.adminCommand( { removeShard : "bristol01" } ) 
bristol01を削除するシャードの名前に置き換えます。 removeShardを実行すると、コマンドによって次のようなメッセージが返されます。
{    "msg" : "draining started successfully",    "state" : "started",    "shard" : "bristol01",    "note" : "you need to drop or movePrimary these databases",    "dbsToMove" : [       "fizz",       "buzz"    ],    "ok" : 1,    "operationTime" : Timestamp(1575398919, 2),    "$clusterTime" : {       "clusterTime" : Timestamp(1575398919, 2),       "signature" : {          "hash" : BinData(0,"Oi68poWCFCA7b9kyhIcg+TzaGiA="),          "keyId" : Long("6766255701040824328")       }    } } 
バランサーによって、 bristol01という名前のシャードからクラスター内の他のシャードへの チャンクの移行(「ドレイン」) が開始されます。 これらの移行は、クラスターに不要な負荷がかかるのを避けるために、低速で行われます。
The output includes the field dbsToMove indicating the databases for which bristol01 is the primary shard. すべてのチャンクがシャードからドレインされた後、データベースに対してmovePrimaryを実行するか、またはこれらのデータベースを削除する必要があります。
注意
削除しているシャードがどのデータベースのプライマリシャードでもない場合、 dbsToMove配列は空になり、 removeShardは介入せずに移行を完了できます。
コマンドを再度実行すると、 removeShardはプロセスの現在のステータスを返します。 たとえば、操作がongoing状態の場合、コマンドは次のような出力を返します。
{    "msg" : "draining ongoing",    "state" : "ongoing",    "remaining" : {       "chunks" : Long(2),       "dbs" : Long(2),       "jumboChunks" : Long(0)    },    "note" : "you need to drop or movePrimary these databases",    "dbsToMove" : [       "fizz",       "buzz"    ],    "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" : Long(0),             // All chunks have moved       "dbs" : Long(2),       "jumboChunks" : Long(0)    },    "note" : "you need to drop or movePrimary these databases",    "dbsToMove" : [       "fizz",       "buzz"    ],    "ok" : 1,    "operationTime" : Timestamp(1575400343, 1),    "$clusterTime" : {       "clusterTime" : Timestamp(1575400343, 1),       "signature" : {          "hash" : BinData(0,"9plu5B/hw4uWAgEmjjBP3syw1Zk="),          "keyId" : Long("6766255701040824328")       }    } } 
すべてのチャンクがシャードからドレインされた後、 dbsToMoveがある場合は、それらのデータベースに対してmovePrimaryを実行するか、またはデータベースを削除します(関連するデータファイルを削除します)。
バランサーがシャードからすべてのチャンクの移動を完了し、 dbsToMoveを処理すると、 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")       }    } }