定義
removeShard
のシャーディングされたクラスターからシャードを削除します。
removeShard
を実行すると、 MongoDB はバランサーを使用してシャードのチャンクをクラスター内の他のシャードに移動し、シャードを空にします。シャードにシャーディングされていないコレクションがある場合は、シャーディングされていないコレクションをすべてシャードからドレイニングする必要があります。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" : Long(2), "dbs" : Long(2), "jumboChunks" : Long(0), "collectionsToMove": Long(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" : Long(0), // All chunks have moved "dbs" : Long(2), "jumboChunks" : Long(0), "collectionsToMove": Long(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") } } }