2.5.3 EADSサーバの追加とデータの再配置(スケールアウトとリバランス)
EADSでは,クラスタを停止させないで,新しいEADSサーバを追加し,クラスタ内のデータを再配置できます。
クラスタを停止させないで,新しいEADSサーバをクラスタに追加する処理を,スケールアウト処理といいます。追加するEADS サーバは,コンシステント・ハッシングの円周上の任意の位置に追加できます。
スケールアウト処理を実行してEADSサーバを追加すると,新しいEADSサーバを追加したレンジが分割されます。そのため,各レンジの大きさ(各レンジに格納できるkeyの数)に偏りが生じるおそれがあります。このような場合に,EADSサーバの位置を変更して,各レンジに格納できるkeyの数を均等にすることで,クラスタ内のデータを配置し直すことができます。
クラスタを停止させないで,クラスタ内のデータを再配置する処理を,リバランス処理といいます。
各EADSサーバの容量を均等に近づけるために,スケールアウト処理と併せてリバランス処理を実行することを推奨します。
(1) EADSサーバの追加(スケールアウト)
スケールアウト処理では,クラスタを停止させないで,EADSサーバを追加できます。
スケールアウト処理を実行すると,新しいEADSサーバを追加したレンジが分割されます。追加されたEADSサーバの位置(ハッシュ値)よりも大きな値の範囲が,新しいレンジとなります。また,分割前のレンジを管理していたEADSサーバから,追加されたレンジの範囲のデータが,追加されたEADSサーバに転送されます。
新しいEADSサーバをクラスタに追加することで,クラスタ全体の物理的なメモリの総容量を増加させたり,クラスタ全体の処理性能を向上させたりすることができます。また,レンジを分割することで,分割前のレンジを管理していたEADSサーバのメモリ使用量を低減したり,負荷を軽減したりすることができます。
クラスタに新しいEADSサーバを1台追加したときの概要を次の図に示します。
なお,スケールアウト処理を実行すると,各レンジに格納できるkeyの数が均等に配分されなくなるおそれがあります。スケールアウト処理後は,リバランス処理を実行して,各レンジに格納できるkeyの数を均等に配分し直すことを推奨します。
(2) クラスタ内のデータの再配置(リバランス)
リバランス処理では,クラスタを停止させないで,クラスタ内のEADSサーバの位置を変更します。EADSサーバの位置を変更することで,クラスタ内のデータを配置し直します。
リバランス処理をすることによって,各EADSサーバが保持するデータの容量やデータの数,および各レンジに格納できるkeyの数を均等に近づけることができます。
リバランス処理は,スケールアウト処理後など,各レンジに格納できるkeyの数が均等に配分されていない場合に実行します。
リバランス処理の概要を次の図に示します。
リバランス処理を実行するには,任意のEADSサーバ上でeztool rebalanceコマンドを実行します。
リバランス処理を実行すると,まず起点となるEADSサーバが1つ決められます。その後,そのEADSサーバを起点に,ほかのEADSサーバをコンシステント・ハッシングの円周上に均等に配置し直します(各レンジに格納できるkeyの数が均等になるようにEADSサーバの位置を変更します)。
各レンジの大きさ(各レンジに格納できるkeyの数)は,各EADSサーバが管理するレンジを分割および結合して均等にされます。EADSサーバが新しく管理するレンジのデータは,元々そのレンジを管理していたEADSサーバ(分割前のレンジを管理していたEADSサーバ)から転送されます。
リバランス処理の流れを次の図に示します。なお,コンシステント・ハッシングでは,EADSサーバやkeyが円周上に配置されるものとして考えますが,便宜上,ここでは次の図のように線で表して説明します。
- 参考
-
EADSサーバの位置の変更処理
-
EADSサーバの位置の変更処理を実行することで,各レンジの大きさ(各レンジに格納できるkeyの数)を均等にします。
-
EADSサーバの位置の変更が大きい場合,1回で位置を変更しないで,複数回に分けて位置を変更します。
-
各EADSサーバは,コンシステント・ハッシングの円周上をハッシュ値が小さくなる方に移動します。
-
1回の処理では,1つのEADSサーバの位置が変更されます。EADSサーバの位置の変更処理は,複数のEADSサーバに対して同時に実行されません。
レンジの分割および結合処理
-
位置を変更するEADSサーバが管理しているレンジに隣接するレンジが分割されます。分割されたレンジは,位置を変更するEADSサーバが管理しているレンジに結合されます。
-
- ポイント
-
スケールアウト処理で増えたクラスタのメモリ容量を効果的に使用するため,リバランス処理が完了してからクラスタに格納するデータ量を増やすことを推奨します。