MongoDB の バランサー とは

0 件のコメント

今回は「MongoDBのシャードクラスタバランサー」についてまとめます。

概要

MongoDB のバランサーはバックグランドでシャーディングサーバー間でチャンク数が均等になるよう平準化を行います。 平準化はシャードクラスタ内の「最もチャンクが多いシャードのチャンク数」と「最もチャンクが少ないシャードのチャンク数」の差(平準化基準)が一定値を超えたときに開始されます。 平準化処理自体は MongoDB の利用側から見ると透過的ですが、性能劣化するのでいくつか動作制限があります。

平準化基準

平準化操作がシャードクラスタに及ぼす影響を最小限にするため、バランサーは以下の閾値を超えたときだけ平準化操作を行います。 閾値とは「"チャンクが最も多いシャード" と "チャンクが最も少ないシャード" のチャンク数の差」です。

チャンク数 閾値
20未満 2
20~79 4
80以上 8

平準化時の動作制限

バランサーの平準化操作(チャンクの移動)は利用している側(ユーザーまたはアプリケーション)から見ると透過的ですが、チャンク移動中は性能劣化する可能性があります。 MongoDBではできるだけ性能劣化を防ぐため、平準化操作には以下のような制限が設けられています。

  • 1度に実施できるチャンクの移動は1つだけ。
    ただし、MongoDB 3.4 以降ではシャード n 台の場合、 n/2 (切り捨て) まで同時に実行できる。
  • 平準化基準を満たしたときだけチャンクの移動を実行。

平準化プロセスは設定サーバーのレプリカセット内のプライマリサーバーで実行されます。

平準化プロセス

バランサーは以下の手順でチャンクをシャードサーバー間で移動させます。

  1. バランサーは moveChunk コマンドを移動元シャードサーバーへ送信します。

  2. チャンク移動元シャードサーバーはチャンクの移動を開始します。
    チャンクへの書き込みは移動元シャードサーバーで受け付けます。

  3. チャンク移動先シャードサーバーでは、移動元シャードサーバーに存在して移動先シャードサーバーに存在しないインデックスを構築します。

  4. 移動先シャードサーバーは移動元シャードサーバーにドキュメントの移動要求を行い、チャンクの移動を開始します。

  5. チャンク内のすべてのドキュメントを移動後、移動先シャードサーバーは同期処理を実行して、ドキュメント移動中に発生した変更操作を反映します。

  6. すべての同期が終わると、移動元シャードサーバーは設定サーバーへ接続してチャンクの保存場所を保存したメタデータを更新します。

  7. メタデータ更新後、移動元シャードサーバーのチャンクに接続中のカーソルがなければチャンクを削除します。

今回は「MongoDBのバランサー」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!