Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

deleteShard(データベースコマンド)

removeShard

のシャーディングされたクラスターからシャードを削除します。removeShard を実行すると、 MongoDB はバランサーを使用してシャードのチャンクをクラスター内の他のシャードに移動し、シャードを空にします。

注意

The balancer must be enabled for removeShard to 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操作を進行させることができます。

authorizationを有効にしている場合は、 clusterManagerロールまたはremoveShardアクションを含む任意のロールが必要です。

シャーディングされたシャーディングされたクラスターの各データベースにはプライマリシャードがあります。 削除するシャードがクラスターのデータベースの 1 つのプライマリでもある場合は、シャードからすべてのデータを移行した後、データベースを新しいシャードに手動で移動する必要があります。 詳細については、 movePrimaryコマンドとシャーディングされたシャードクラスタからシャードを削除するを参照してください。

チャンクの分布が不均一なクラスター内のシャードを削除すると、バランサーはまずドレイン シャードからチャンクを削除し、次に残りの不均一なチャンクの分布のバランスをとります。

Tip

"majority"は、mongos コマンドの書込み保証( writeremoveShard concern )を に変換します。

シャードを削除すると、開いている変更ストリームのカーソルが閉じてしまい、閉じた変更ストリームのカーソルが完全に再開できなくなることがあります。

クラスターが 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フィールドには次のフィールドが含まれます。

フィールド
説明

chunks

現在シャードに残っているチャンクの合計数。

dbs

プライマリ シャードがシャードであるデータベースの合計数。 これらのデータベースはdbsToMove出力フィールドで指定されます。

jumboChunks

chunksの合計数のうち、ジャンボである数値。

jumboChunksが 0 より大きい場合は、 jumboChunksのみがシャード上に残るまで待ちます。 ジャンボ チャンクのみが残ったら、ドレイン が完了する前に ジャンボ フラグを手動でクリアする必要があります。 「 jumboフラグのクリア 」を参照してください。

jumboフラグがクリアされると、バランサーはこれらのチャンクを移行できます。 移行手順の詳細については、「範囲の移行手順 」を参照してください。

collectionsToMove

シャードから移動する必要がある、シャーディングされていないコレクションの総数。

引き続き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 を使用するか、データベースを削除します(関連するデータファイルを削除します)。

注意

最高のパフォーマンスを得るには、データベースを移動する前にコレクションを移動してください。

バランサーがすべてのチャンクをシャードから移動し、dbsToMovecollectionsToMove を処理したら、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")
}
}
}

戻る

refineCollectionShardKey

項目一覧