この手順を使用して、 の シャーディングされたデータ分散 を分析します。この情報を使用して、クラスターで大量のバランシングが行われるかどうかを判断できます。
このタスクについて
この手順では、次の方法を示します。
クラスターを 5.0 から 6.0 にアップグレードします。
$shardedDataDistributionステージを使用して、シャーディングされたデータのクラスター全体の分散を決定します。必要に応じて、バランサー設定を更新します。
始める前に
アップグレード プロセスとこの手順全体でバランサーをオフにしてください。 新しいバランシング ポリシーの下でのコレクションの均等性が理解できたら、バランサーをオンに戻すことができます。
手順
クラスターを 5.0 から 6.0 にアップグレードします。
クラスターを から5.0 6.0にアップグレードするには、 「 シャードクラスタを にアップグレードする 」を参照してください。6.0
mongosh を使用して mongos に接続します。
クラスターのどの mongos にも接続できます。
クラスター上のデータ分布を分析します。
コレクションのデータ分散がバランシングにどのように影響かを理解するには、$shardedDataDistribution 集計ステージを使用します。
すべてのシャーディングされたデータ分布のメトリクスを返すには、次のコマンドを実行します。
db.aggregate([ { $shardedDataDistribution: { } } ])
出力例:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
ownedSizeBytesが最大のシャードと が最も少ないシャードとの差が移行しきい値ownedSizeBytes 内にある場合、コレクションはバランスがとれていると見なされます。これらのコレクションでバランサーが有効になっている場合、移行は発行されません。
( 任意 )6.0 のバランサーを構成します。
コレクションがアンバランスで、バランサーの動作を制御する場合は、次のいずれかの方法または両方を使用できます。
バランシング ウィンドウの変更
コンフィギュレーションデータベースに切り替えます。
次のコマンドを発行して、
configデータベースに切り替えます。use config バランシングウィンドウの開始時間と終了時間を設定します。
アクティブなウィンドウ を設定するには、 メソッドを使用します。
updateOne()db.settings.updateOne( { _id: "balancer" }, { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, { upsert: true } ) <start-time>と<end-time>を、バランシングウィンドウの開始境界と終了境界を指定する 2 桁の時間と分の値を使った時間の値に置き換えます(つまりHH:MM)。HH値には、00~23の範囲の時間の値を使用します。MM値には、00~59の範囲の分の値を使用します。
自己管理型のシャーディングされたクラスターの場合、 MongoDB はコンフィギュレーションサーバーレプリカセット内のプライマリ ノードのタイムゾーンを基準にして、開始時間と停止時間を評価します。
Atlas クラスターの場合、MongoDB は UTC タイムゾーンに対して開始時間と停止時間を相対的に評価します。
注意
バランサー ウィンドウは、その日に挿入されたすべてのデータの移行を完了するのに十分でなければなりません。
データ挿入率はアクティビティや使用パターンによって変わる可能性があるため、選択したバランシングウィンドウが配置のニーズをサポートするのに十分であることを確認してください。
( 任意 )範囲の削除が同期されていることを確認します。
範囲の削除を バランシングウィンドウに制限する場合にのみ、この手順を使用してください。
デフォルトでは 、バランサーは進行中の移行の削除フェーズが完了するのを待たずに、次の チャンクの移行 を開始します。 削除フェーズで次の チャンク移行の開始を ブロックする には、
_waitForDeleteを true に設定します。configデータベースのsettingsコレクション内にある_waitForDelete値を更新します。 (例: )。use config db.settings.updateOne( { "_id" : "balancer" }, { $set : { "_waitForDelete" : true } }, { upsert : true } )
特定のコレクションのバランシングを無効化する
デフォルトでは 、すべてのコレクションでバランシングが有効になっています。
特定のコレクションのバランシングを無効にするには、mongos mongoshシェルを使用してsh.disableBalancing() に接続し、 メソッドを呼び出します。
この例では、 students.gradesコレクションのバランシングを無効にします。
sh.disableBalancing("students.grades")
クラスターでバランサーを再度有効にします。
バランサーを無効にし、再度有効にする準備ができたら、次の手順に従います。
次のいずれかの操作を発行して、バランサーを有効にします。
mongoshシェルから、次を実行します。sh.startBalancer() 注意
ドライバーからバランサーを有効にするには、次のように
adminデータベースに対して balancerStart コマンドを使用します。db.adminCommand( { balancerStart: 1 } ) MongoDB 6.0.3 以降では、自動チャンク分割は実行されません。 これはバランシング ポリシーの改善によるものです。 自動分割コマンドは引き続き存在しますが、操作は実行されません。 詳細については、「バランシング ポリシーの変更 」を参照してください。
MongoDB バージョン 6.0.3 より前では、
sh.startBalancer()によってシャーディングされたクラスターの自動分割も有効になります。