14.3.24 rebalance(レンジに格納できるkeyの数の均等化)
- 〈この項の構成〉
(1) 機能
クラスタ内の各EADSサーバのレンジに格納できるkeyの数が均等になるように,各EADSサーバの位置を変更して,レンジを分割および結合します(リバランス処理)。リバランス処理では,EADSサーバの位置を変更するので,データの格納先のEADSサーバが変わります。そのため,EADSサーバ間でデータの転送処理を行います。
EADSサーバを変更する位置や,変更する順序は,EADSが決定します。
EADSサーバの位置の変更が大きい場合(転送が必要なデータの量が多い場合)には,位置の変更処理を複数回に分けて,目標の位置に到達するまで変更処理を繰り返します。
(2) 規則
-
このサブコマンドは,クラスタの状態がクラスタ稼働中(AVAILABLE)のときに実行できます。
-
このサブコマンドは,処理対象のEADSサーバが次の状態のときに実行できます。
-
初期化状態(initialized)
-
稼働状態(running)
-
閉塞状態(closed)
-
-
このサブコマンドの処理対象は,クラスタへの参加状況がonlineのEADSサーバです。ただし,クラスタへの参加状況がofflineおよびstandbyのEADSサーバがクラスタ内にある場合は,このサブコマンドは実行できません。クラスタへの参加状況は,eztool statusコマンドで確認できます。
-
このサブコマンドは,次の場合には実行できません。
-
キャッシュタイプが,ディスクキャッシュまたは2Wayキャッシュであるキャッシュが存在する場合
-
データ自動削除機能を使用するキャッシュと,データ自動削除機能を使用しないキャッシュが混在する場合
-
データの多重度が1の場合
-
クラスタを構成するEADSサーバ数が「データの多重度×2−1」の場合
-
(3) 形式
eztool rebalance [--datasize <送信データサイズ>][-i <送信間隔>]
eztool rebalance [--break]
(4) オプションおよび引数
(a) --datasize <送信データサイズ>
データ転送で送信するデータサイズ(単位:バイト)を設定したい場合に,このオプションを指定します。
送信データサイズには,10240〜2147483647の整数が指定できます。
このオプションを指定しない場合,サーバ定義のeads.rebalance.transfer.datasizeパラメタに指定したデータサイズで,データを転送します。
(b) -iまたは--interval <送信間隔>
データを転送する間隔(単位:ミリ秒)を設定したい場合に,このオプションを指定します。
送信間隔には,1〜60000の整数が指定できます。
このオプションを指定しない場合,サーバ定義のeads.rebalance.transfer.intervalパラメタに指定した間隔で,データが転送されます。
(c) --break
リバランス処理を中断したい場合に,このオプションを指定します。
リバランス処理の中断は,EADSサーバの位置の変更処理が完了するタイミングで行います。EADSサーバの位置を変更する際に,複数回,位置の変更処理をする場合,その1回の変更処理の完了時が中断の区切りとなります。EADSサーバの位置の変更処理の途中では中断できません。
(5) リターンコード
次の表に示すリターンコードが返却されます。
項番 |
リターンコード |
リターンコードの説明 |
|
---|---|---|---|
コマンド定義のeads.command.compatパラメタを指定していない場合 |
コマンド定義のeads.command.compatパラメタに0300を指定した場合 |
||
1 |
0 |
0 |
コマンドの実行に成功しました。 |
2 |
1 |
1 |
すでに格納できるkeyの数が均等になっているため,リバランス処理を実行しませんでした。 |
3 |
10 |
10 |
--breakオプションが指定されましたが,リバランス処理は実行されていません。 |
4 |
11 |
11 |
--breakオプションが指定されましたが,すでにリバランス処理の中断が予約されています。 |
5 |
101 |
101 |
コマンドの初期化に失敗しました。 |
6 |
110 |
接続に失敗しました。 |
|
7 |
111 |
通信タイムアウトのため失敗しました。 |
|
8 |
120 |
構文不正のため失敗しました。 |
|
9 |
130 |
コマンドを実行できない状態のため失敗しました。 |
|
10 |
131 |
ほかのコマンドが実行中のため失敗しました。 |
|
11 |
150 |
コマンド実行中に失敗しました。 |
|
12 |
200 |
コマンドタイムアウトのため失敗しました。 |
(6) 注意事項
-
このサブコマンドは,EADSサーバが稼働状態(running)でも実行できますが,性能に影響が出るおそれがあるため,注意してください。
-
eztool rebalance --breakコマンドの実行中に,eztool rebalanceコマンドがタイムアウトまたは停止した場合は,eztool rebalance --breakコマンドは正常終了しません。eztool rebalance --breakコマンドがタイムアウトするまで待つか,またはeztool rebalance --breakコマンドを停止してください。
-
あるEADSサーバの位置の変更処理が終わってから,次の位置の変更処理が始まるまでの時間は,位置の変更処理の実行中とは見なされません。このため,eztool rebalance --breakコマンドを実行しても,EADSサーバの位置の変更処理が実行されていないというメッセージが出力され,中断できないことがあります。その場合は,eztool rebalance --breakコマンドが実行できるまで,コマンドを繰り返し実行してください。
-
クラスタ内のメモリの空き容量が少ない状態で,リバランス処理を実行することは推奨しません。スケールアウト処理でEADSサーバを追加して,クラスタ内のメモリ容量を増加させてから,リバランス処理を実行することを検討してください。
-
EADSサーバID指定グループに属するkeyのデータは,EADSサーバの位置が変更されても,ほかのEADSサーバに移動されないで,指定されたEADSサーバに格納されたままになります。このようなデータが大量に格納されている場合は,リバランス処理を実行しても,効果的にデータが分散されないため,期待した結果が得られないおそれがあります。
-
データ総量監視機能を有効にしている場合,EADSサーバ間でのデータ転送のために,一時的にデータ数の上限,およびExternalメモリ使用量の上限を縮小します。その結果,クライアントAPI,およびユーザファンクションのAPIでエラーが発生することがあります。
また,レンジ統計情報ファイル(eads_store_stats.csv)の次の値に,一時的に実際の値よりも小さい値が出力されることがあります。
-
KeyCountLimit
-
ExternalHeapSizeLimit
また,リバランス処理の実行中にeztool storeusageコマンドを実行すると,上記の値に,一時的に実際の値よりも小さい値が出力されることがあります。
-
-
データ総量監視機能を有効にしていても,eztool importコマンドで,データ総量監視機能が一時的に無効になります。そのため,eztool importコマンドが成功しても,クラスタ内のJavaヒープまたはExplicitヒープの空き容量が少なくなった場合,リバランス処理で失敗することがあります。この場合は,JavaヒープまたはExplicitヒープの容量を見直してください。
-
データ総量監視機能を無効にしている場合,クラスタ内のJavaヒープまたはExplicitヒープの空き容量が少ない状態でリバランス処理を実行すると,EADSサーバがダウンしたり,EADSサーバが縮退したりするおそれがあります。
-
このサブコマンドでエラーが発生した場合は,eztool statusコマンドを実行して,問題が発生していないかを確認してください。
クラスタの空き容量が不足している場合は,不要なデータを削除するなどして空き容量を増やすか,またはスケールアウト処理でEADSサーバを追加してください。
EADSサーバが縮退またはプロセスダウンした場合は,EADSサーバを復旧させてから,リバランス処理を再度実行してください。
EADSサーバの復旧処理でエラーが発生した場合は,復旧に失敗したEADSサーバのクラスタ定義ファイルに,リバランス処理中のクラスタ構成情報が反映されていない可能性があります。復旧に失敗したEADSサーバのクラスタ定義ファイルが,ほかのEADSサーバのクラスタ定義ファイルと同じかどうかを確認してください。クラスタ定義ファイルが,ほかのEADSサーバのクラスタ定義ファイルと異なる場合は,復旧に失敗したEADSサーバに,正常に稼働しているEADSサーバのクラスタ定義ファイルをコピーしてから,復旧処理を再度実行してください。
-
データ自動削除機能を有効にしている状態でリバランスを実行すると,EADSサーバ間でのデータ転送のために,一時的にデータ数の上限,およびExternalメモリ使用量の上限を縮小します。その結果,クライアントAPI,およびユーザファンクションのAPIでエラーが発生することがあります。
-
データ自動削除機能を有効にしている場合,EADSサーバはデータ総量監視機能とは独立して,キャッシュ単位のデータの上限を算出し,一時的にしきい値を縮小します。
-
データ自動削除機能を有効にしている場合,結合元のレンジ(移動するレンジ)に格納されたデータに対するAPI(create,put,putAll)は,EADSクライアントおよびユーザファンクションに,一時的なエラー(EAD_ERROR_SERVER_LIMIT_KV_COUNT_TEMPORARILY)を返却することがあります。
-
データ自動削除機能を有効にしているキャッシュでは,キャッシュ定義で指定したデータの自動削除ポリシーに加えて,次に示すデータの自動削除ポリシーにも従います。そのため,次に示すデータの自動削除ポリシーが適用された場合に問題となる用途では,リバランス処理を実行しないでください。
- ■リバランス処理を実行中に適用されるデータの自動削除ポリシー
-
結合先のレンジで格納できるデータの空き(キー数および容量)が少ない場合,格納されるEADSサーバが変更となるために分割されたレンジのデータは,結合先のレンジで格納できるデータの空きに収まるまで一部または全部が削除されます。また,通信タイミングによっては,優先度が低いデータではなく,優先度が高いデータが削除されることがあります。
-
リバランス処理中のリクエストの応答に一時的に時間が掛かる場合は,次のパラメタの指定を検討してください。
-
eads.scaling.eviction.targetKeyCountパラメタ(データ自動削除機能を有効にしているキャッシュが存在する場合)
-
データ自動削除機能を有効にしているキャッシュが存在しない場合,次のどちらかの指定をするとリクエストのスループットの向上が期待できますが,リバランス処理の実行完了までの時間が長くなります。運用および環境に合わせたチューニングを実施してください。
-
eads.scaling.moveDataWithUpdateRequest.enableパラメタにfalseを指定している
-
eads.scaling.moveData.intervalパラメタに0以外を指定している
-
-
データ自動削除機能を有効にしているキャッシュが存在する場合,eads.scaling.eviction.targetKeyCountパラメタを指定するとリクエストのスループットの向上が期待できますが,指定値が小さいとリバランス処理の実行完了までの時間が長くなります。運用および環境に合わせたチューニングを実施してください。