Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

シャーディングされたクラスターからシャードを削除する

シャードを削除するには、シャードのデータがクラスター内の残りのシャードに移行されていることを確認する必要があります。 この手順では、データを安全に移行し、シャードを削除する方法について説明します。

  1. この手順では、 sh.moveCollection()メソッドを使用して、削除されたシャードからコレクションを移動します。 この手順を開始する前に、コマンドの動作を理解するためにmoveCollection考慮事項要件を確認してください。

  2. シャードを削除するには、まず を使用してクラスターの インスタンスのmongos 1mongosh つに接続します。

注意

複数のシャードを削除する場合は、一度に 1 つずつではなく、同時に削除します。一度に 1 つのシャードを削除すると、バランサーは残りのシャードにデータを排除します。シャードは一度に 1 つのチャンク移行のみに参加できるため、1 つのシャードを削除すると データ移行のスループットが制限されます。

1

シャードからデータを移行するには、バランサープロセスを有効にする必要があります。 バランサーの状態を確認するには、 sh.getBalancerState()メソッドを使用します。

sh.getBalancerState()

操作がtrueを返す場合、バランサーは有効になっています。

この操作でfalseが返される場合は、 「 バランサーを有効にする 」を参照してください。

2

シャードの名前を見つけるには、 listShardsコマンドを実行します。

db.adminCommand( { listShards: 1 } )

shards._idフィールドにはシャード名が含まれます。

3

startShardDrainingコマンドを実行して、シャーディングされたコレクションからクラスター内の他のシャードへのチャンクの移動を開始します。

db.adminCommand( { startShardDraining: "shard04" } )

複数のシャードを排除する必要がある場合は、ドレインプロセスを開始して並行して実行できます。

4

でコレクションを作成し、mongos shardCollectionを呼び出しない場合、そのコレクションはシャーディングされないまま、 MongoDB はそれをクラスター内の特定のシャードに完全に保存します。シャードをプライマリとして使用するデータベースは、コレクションもシャードに保存します。

削除するシャードにシャーディングされていないコレクションまたは プライマリデータベースが含まれている場合は、コレクションを別のシャードに移動する必要があります。

削除するシャードにこれらのコレクションが含まれているかどうか、およびドレインステータスを確認するには、 コマンドを実行し、shardDrainingStatus 出力フィールドの配列を確認します。collectionsToMove

db.adminCommand( { shardDrainingStatus: "shard04" } )
{
msg: "draining ongoing",
state: "ongoing",
remaining: {
chunks: Long(2),
dbs: Long(2),
jumboChunks: Long(0),
collectionsToMove: Long(2)
},
shard: "shard04",
note: "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
dbsToMove: [
"accounts",
],
collectionsToMove: [
"accounts.us-east",
"accounts.us-west",
"locations.us",
],
ok: 1,
operationTime: Timestamp(1575399086, 1655),
$clusterTime: {
clusterTime: Timestamp(1575399086, 1655),
signature: {
hash: BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
keyId: Long("6766255701040824328")
}
}
}

collectionsToMoveフィールドで見つかったコレクションは、このシャードに保存されているコレクションです。シャードを削除する前に、まずこれらのコレクションを別のシャードに移動する必要があります。

コレクションを別のシャードに移動するには、moveCollection コマンドを使用します。

db.adminCommand( {
moveCollection: "accounts.us-east",
toShard: "shard05"
} )
5

シャーディングされたクラスター は、データベースのプライマリシャードとして機能する特定のシャードを指定します。削除するシャードがプライマリの場合は、それを別のシャードに移動する必要があります。

プライマリを識別するには、shardDrainingStatus コマンドを実行し、dbsToMove 出力フィールドの配列を確認します。

db.adminCommand( { shardDrainingStatus: "shard04" } )
{
msg: "draining ongoing",
state: "ongoing",
remaining: {
chunks: Long(2),
dbs: Long(2),
jumboChunks: Long(0),
collectionsToMove: Long(2)
},
shard: "shard04",
note: "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
dbsToMove: [
"accounts",
],
collectionsToMove: [ ],
ok: 1,
operationTime: Timestamp(1575399086, 1655),
$clusterTime: {
clusterTime: Timestamp(1575399086, 1655),
signature: {
hash: BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
keyId: Long("6766255701040824328")
}
}
}

dbsToMoveフィールドに表示されている各データベースは、別のシャードに移動する必要があるデータベースです。

データベース を移動するには、次のようにmovePrimary コマンドを使用します。

db.adminCommand( {
movePrimary: "accounts",
to: "shard05"
})
6

シャードを削除する前に、ドレイン操作が完了していることを確認してください。

ドレイン操作のステータスを確認するには、shardDrainingStatus コマンドを実行します。

db.adminCommand( { shardDrainingStatus: "shard04" } )
{
"msg" : "draining completed successfully",
"state" : "drainingComplete",
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1771839836, 139),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1771839836, 139)
}

stateフィールドが削除するシャードの drainingComplete を返すと、ドレインプロセスは完了します。シャードを削除できるようになりました。

シャードを削除するには、commitShardRemoval コマンドを実行します。

db.adminCommand( { commitShardRemoval: "shard04" } )
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1771840037, 12),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1771840037, 12)
}

シャードが完全にドレインされていない場合、コマンドはエラーを返します。

戻る

シャードへのノードの追加

項目一覧