1. ホーム
  2. データベース
  3. モンゴルディーブ

MongoDBバランサーの使い方を解説

2022-01-19 09:47:12

   MongoDBでは、バランサーはバックグラウンドのプロセスで、各シャードのチャンク数を監視し、チャンク数の差が閾値を超えると、バランサーが自動的にチャンクをマイグレーションして、各シャードのチャンク数が相対的にバランスよくなるようにします。

   再配置のプロセス全体はユーザーに対して透過的ですが、再配置のプロセス中にユーザーへの影響があります。

01 バランサーの紹介

   MongoDB 3.4 からは、バランサーは設定サーバーのマスターノードで動作するようになりました。

    バージョン3.4では、バランサーのプロセスがアクティブな間に、 ロックコレクションの中の _id balancer を持つドキュメントを変更することによって、 config server のプライマリノードが "balancer lock" を保持します。

    バージョン3.6では、バランサーはロックを保持しなくなりました。

    デフォルトでは、バランサーは常にオンになっており、以下のコマンドでバランサーの動作を確認することができます。

mongos> sh.getBalancerState()
true

    同様に、バランサーも以下のコマンドで簡単に管理することができます。

To see if the banlancer is working
sh.isBalancerRunning() 

Stop the balancer
sh.stopBalancer()

Start the balancer
sh.setBalancerState( true )

02 バランサー作業で考えられるビジネスインパクトは?

1.ディスクのフットプリント。
   MongoDB 2.6 からは、移行したチャンクドキュメントを自動的にアーカイブし、チャンクの再配置で問題が発生した場合にドキュメントのリカバリーを容易にします。

   設定ファイルのパラメータである sharding.archiveMovedChunks を使用します。

を使用して、マイグレーション中にチャンクの自動アーカイブをオンにするかどうかを制御します。このパラメータは MongoDB のバージョン 2.6 と 3.0 ではデフォルトでオン、それ以外のバージョンではデフォルトでオフになっています。

2. 帯域幅と負荷の使用量。

    そして、バランサーはチャンクの移行時に帯域幅と負荷の面でオーバーヘッドを発生させます。これらの影響を軽減するために、バランサーは次のようなことを行います。

a. 一度に移行できるチャンクは1つだけです。

b. シャードが一度に実行できるマイグレーションタスクは1つだけです。

c. MongoDB 3.4からチャンクの並列移行が導入され、n個のシャードを持つクラスタでは、一度に最大n/2(切り捨て)のチャンクを並列移行できるようになった。

d. チャンクの数が最も多いシャードと最も少ないシャードの差が閾値に達したときのみ、チャンクの移行を開始する。

e. バランサーがチャンクのマイグレーションを行うウィンドウタイムを、ビジネスのローピークウィンドウタイムに設定することをユーザーにサポートし、ビジネスへの影響を最小化する。

03 バランサーの実行時間帯を設定する

 1. mongo シェルで mongos に接続する。

2、コンフィグデータベースに切り替わる

    コンフィグを使う

3. 現在のバランサーがオンであることを確認する

    sh.getBalancerState()がtrueを返す。

4. ウィンドウの時間を設定する

db.settings.update(
   { _id: "balancer" }
   { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } }
   { upsert: true }
)

ここで、start-timeとstop-timeは以下の値をとる。

  • HH値の場合、00~23の時値を使用する。
  • MM値には、00~59の分単位を使用します。

MongoDb は設定データベースのプライマリノードの時刻を参照して、該当するチャンクの再配置を開始します。

すべてのチャンクが設定された時間内に再配置されるようにすることが重要です。そうしないと、再配置後もデータベースのバランスが崩れたままになります。

チャンク再配置のタイムウィンドウを削除するコマンドは次のとおりです。

use config
db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })

04 バックアップとバランサー

   MongoDBでは、バックアップ中はバランサーを有効にしないでください。そうしないと、バックアップされたデータの整合性がとれなくなります。通常、バックアップのタイムウィンドウはバランサーのタイムウィンドウとずらす必要があるので、バランサーにタイムウィンドウが設定されていない場合は、バックアップの際にバランサーをオフにします。

   今回はここまで。時間が重要なので、詳しくは後述します

以上、MongoDBバランサーの使用について詳しく説明しましたが、MongoDBバランサーの使用についての詳しい情報は、スクリプトハウスの他の関連記事に注目してください