JP6802771B2 - 負荷分散装置、負荷分散システム、および負荷分散プログラム - Google Patents
負荷分散装置、負荷分散システム、および負荷分散プログラム Download PDFInfo
- Publication number
- JP6802771B2 JP6802771B2 JP2017197037A JP2017197037A JP6802771B2 JP 6802771 B2 JP6802771 B2 JP 6802771B2 JP 2017197037 A JP2017197037 A JP 2017197037A JP 2017197037 A JP2017197037 A JP 2017197037A JP 6802771 B2 JP6802771 B2 JP 6802771B2
- Authority
- JP
- Japan
- Prior art keywords
- dispatcher
- packet
- distribution
- balancer
- identifier
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Description
物理サーバ1Aは、負荷分散装置の一例を含んでおり、ネットワークNを介してクライアント端末6a〜6cに接続されている。
《比較例》
図21は、比較例の物理サーバ1Bの内部構成とパケットの流れを示す図である。
バランサ4は、上りパケットのためにパケット受信部41と上りハッシュ部42と負荷分散部43とバランサ振分テーブル51(図22参照)を備え、下りパケットのためにパケット集約部46とパケット送信部48とを備える。
パケット集約部46は、各ディスパッチャ3からのパケットを集約する。パケット送信部48は、下りパケットをクライアント端末6に送信する。
パケット集約部33は、仮想マシン2−0,2−1から受信した下りパケットを集約する。パケット送信部34は、集約した下りパケットをバランサ4に送信する。
仮想マシン2−4,2−5はディスパッチャ3−2に接続されている。仮想マシン2−4には、IPアドレスeが払い出されている。仮想マシン2−5には、IPアドレスfが払い出されている。
バランサ振分テーブル51は、ハッシュ値欄と送信先欄とを含んで構成される。
ハッシュ値欄は、上りパケットの識別子のハッシュ値に対応している。送信先欄のD0〜D2は、ハッシュ値に対応する送信先のディスパッチャ3−0〜3−2を示している。負荷分散部43は、上りパケットの識別子のハッシュ値とバランサ振分テーブル51に基づいて送信先のディスパッチャ3を特定する。
ディスパッチャ振分テーブル35−0は、識別子欄と送信先欄とを含んで構成される。
識別子欄は、上りパケットの識別子に対応している。送信先欄のV0,V1は、この識別子に対応する送信先の仮想マシン2−0,2−1を示している。送信先欄のD1,D2は、この識別子に対応する転送先のディスパッチャ3−1,3−2を示している。
ディスパッチャ振分テーブル35−1は、識別子欄と送信先欄とを含んで構成される。
識別子欄は、上りパケットの識別子に対応している。送信先欄のV2,V3は、この識別子に対応する送信先の仮想マシン2−2,2−3を示している。送信先欄のD0,D2は、この識別子に対応する転送先のディスパッチャ3−0,3−2を示している。
ディスパッチャ振分テーブル35−2は、識別子欄と送信先欄とを含んで構成される。
識別子欄は、上りパケットの識別子に対応している。送信先欄のV4,V5は、この識別子に対応する送信先の仮想マシン2−4,2−5を示している。送信先欄のD0,D1は、この識別子に対応する転送先のディスパッチャ3−0,3−1を示している。
この物理サーバ1Bには、仮想マシン2−0〜2−5が具現化され、更にディスパッチャ3−0〜3−2とバランサ4とが具現化されている。以下、各仮想マシン2−0〜2−5を区別しないときには、単に仮想マシン2と記載する。ディスパッチャ3−0〜3−2を区別しないときには、単にディスパッチャ3と記載する。ディスパッチャ3−0は、NUMA(Non-Uniform Memory Access)ノード71上に具現化されている。ディスパッチャ3−1,3−2は、NUMAノード72上に具現化されている。バランサ4が備える上りハッシュ55は、上りパケットの識別子から算出したハッシュ値である。
図1は、本実施形態の物理サーバ1を示す構成図である。
サービスを享受するクライアント端末6と、サービスを提供する物理サーバ1とは、インターネット92と社内ネットワーク91を介して接続されている。この物理サーバ1のCPU(不図示)は、負荷分散プログラム(不図示)を実行することによって、図1の各部を具現化する。物理サーバ1は、負荷分散装置の一例であるディスパッチャ3−0〜3−2とバランサ4とを含んでいる。
バランサ4は、上りパケットのためにパケット受信部41と上りハッシュ部42と負荷分散部43とバランサ振分テーブル51(図5参照)とを備える。
パケット集約部33は、仮想マシン2−0,2−1から受信した下りパケットを集約する。パケット送信部34は、集約した下りパケットをバランサ4に送信する。
後記する図4のハッシュ関数変更処理(ステップS20)において、図3に示したハッシュ関数変更処理が呼び出される。
ステップS10において物理サーバ1のCPU(不図示)は、初期化時であるか否かを判定する。ここで初期化時とは、この負荷分散プログラムが起動した後の最初の処理のことをいう。物理サーバ1のCPU(不図示)は、初期化時ならば(Yes)ステップS11に進み、初期化時で無いならば(No)ステップS13の処理に進む。
ステップS11において、物理サーバ1のCPU(不図示)は、予め仮想マシン2の数が判明している場合はそれを参考にしてハッシュ分割数を決定し、ハッシュ分割数に応じたハッシュ関数を決定する。
ステップS12において、物理サーバ1のCPU(不図示)は、ハッシュ関数にハッシュパラメータがある場合はそれを決定し、ステップS19の処理に進む。なお、初期化時におけるハッシュパラメータは、任意のものであってもよい。
ステップS13において、物理サーバ1のCPU(不図示)は、現在の振分効率をパラメータリスト54に記録する。その後、CPUは、このハッシュ関数に係る全てのハッシュパラメータを試行したか否かを判定する(ステップS14)。物理サーバ1のCPU(不図示)は、全てのハッシュパラメータを試行していないならば(No)、未使用のハッシュパラメータを選択し(ステップS15)、ステップS19の処理に進む。物理サーバ1のCPU(不図示)は、全てのハッシュパラメータを試行したならば(Yes)、全てのハッシュ関数を試行したか否かを判定する(ステップS16)。物理サーバ1のCPU(不図示)は、全てのハッシュ関数を試行していないならば(No)、未使用のハッシュ関数を選択し(ステップS17)、ステップS19の処理に進む。
物理サーバ1のCPU(不図示)は、全てのハッシュ関数を試行したならば(Yes)、パラメータリスト54から最も振分効率の高いハッシュ関数とハッシュパラメータの組合せを選択し(ステップS18)、ステップS19の処理に進む。
ステップS19において、CPUは、ハッシュ値ごとに振分先のディスパッチャ3を決定したバランサ振分テーブル51を作成し、図3の処理を終了する。振分先のディスパッチャ3は、図4に示したバランサ振分テーブル51の修正処理(ステップS24)で最適値に修正するので、この時点ではランダムであってもよい。
ステップS20において物理サーバ1のCPU(不図示)は、ハッシュ関数変更処理(図3参照)を実行する。このハッシュ関数変更処理は、ハッシュ関数を決定してバランサ振分テーブル51を作成する処理である。その後、物理サーバ1のCPU(不図示)は、統計テーブル53の値をリセットする(ステップS21)。
ステップS23において物理サーバ1のCPU(不図示)は、統計テーブル53とディスパッチャテーブル52とを元に、ハッシュ値ごと且つ送信先ごとの振分効率eikを計算する。ハッシュ値ごと且つ送信先ごとの振分効率eikは、式(1)で算出される。
ステップS25において物理サーバ1のCPU(不図示)は、ハッシュ値ごとの振分効率eiの平均値を算出し、全体の振分効率Eとする。全体の振分効率Eは、以下の式(3)で算出される。
バランサ振分テーブル51は、ハッシュ値欄と送信先欄とを含んで構成される。
ハッシュ値欄は、上りパケットの識別子のハッシュ値に対応している。送信先欄のD0〜D2は、ハッシュ値に対応する送信先のディスパッチャ3−0〜3−2を示している。負荷分散部43は、上りパケットの識別子のハッシュ値とバランサ振分テーブル51に基づいて送信先のディスパッチャ3を特定する。
ディスパッチャ振分テーブル35−0は、識別子欄と送信先欄とを含んで構成される。
識別子欄は、上りパケットの識別子に対応している。送信先欄のV0,V1は、この識別子に対応する送信先の仮想マシン2−0,2−1を示している。送信先欄のD1,D2は、この識別子に対応する転送先のディスパッチャ3−1,3−2を示している。
ディスパッチャ振分テーブル35−1は、識別子欄と送信先欄とを含んで構成される。
識別子欄は、上りパケットの識別子に対応している。送信先欄のV2,V3は、この識別子に対応する送信先の仮想マシン2−2,2−3を示している。送信先欄のD0,D2は、この識別子に対応する転送先のディスパッチャ3−0,3−2を示している。
ディスパッチャ振分テーブル35−2は、識別子欄と送信先欄とを含んで構成される。
識別子欄は、上りパケットの識別子に対応している。送信先欄のV4,V5は、この識別子に対応する送信先の仮想マシン2−4,2−5を示している。送信先欄のD0,D1は、この識別子に対応する転送先のディスパッチャ3−0,3−1を示している。
統計テーブル53には、上りパケットのハッシュ値と、各ディスパッチャ3がこの上りパケットに対応した下りパケットを応答した数とが格納されている。
ハッシュ値0の上りパケットについては、ディスパッチャ3−0(D0)が、この上りパケットに対応した100個の下りパケットを応答している。
ハッシュ値1の上りパケットについては、ディスパッチャ3−1(D1)が、この上りパケットに対応した150個の下りパケットを応答している。
ハッシュ値2の上りパケットについては、ディスパッチャ3−2(D2)が、この上りパケットに対応した50個の下りパケットを応答している。
ハッシュ値3の上りパケットについては、ディスパッチャ3−1(D1)が、この上りパケットに対応した50個の下りパケットを応答し、ディスパッチャ3−2(D2)が、この上りパケットに対応した100個の下りパケットを応答している。
ハッシュ値4の上りパケットは送信されていない。また、ハッシュ値5の上りパケットについては、ディスパッチャ3−0(D0)が、この上りパケットに対応した150個の下りパケットを応答している。
パラメータリスト54は、ハッシュ関数欄と、ハッシュパラメータ欄と、振分効率欄を備える。このパラメータリスト54には、ハッシュ関数およびハッシュパラメータを変更した場合の振分効率が記録される。図10において、ハッシュ関数Bかつハッシュパラメータ2の場合の振分効率は、未だ記録されていない。なお、ハッシュ関数欄の括弧内の数字は、分割数を示している。このパラメータリスト54を参照することにより、物理サーバ1のCPUは、最も振分効率のよいハッシュ関数とハッシュパラメータの組合せを選択することができる。
ディスパッチャテーブル52には、転送元のディスパッチャ3から転送先のディスパッチャ3までの転送効率が予め記録されている。なお、転送効率の逆数が転送コストである。
当初、バランサ4は、上りパケットに対して、ディスパッチャ3における振り分けの元になる識別子(宛先IPアドレス等)でハッシュをかけ、バランサ振分テーブル51に基づき複数のディスパッチャ3に振り分ける。上りハッシュ55は、上りパケットの識別子から算出したハッシュ値である。
テーブルの左端は識別子欄である。その右側2列はハッシュ値欄と送信先欄であり、バランサ振分テーブル51の内容を示している。識別子欄の値に対してハッシュ計算を行うとハッシュ値欄に示された値が算出される。
更にハッシュ値欄と、D0応答数欄、D1応答数欄、D2応答数欄によって、統計テーブル53の内容を示している。図13に示した統計テーブル53は初期状態なので、D0応答数欄、D1応答数欄、D2応答数欄は、全て0でクリアされている。
バランサ4は、ディスパッチャ3−0〜3−2から受信した下りパケットに対して、この下りパケットの応答元のディスパッチャ3とハッシュ値との対応を統計テーブル53に記録する。上りパケットを送信したディスパッチャ3は、振分の元となる識別子(下りパケットの送信元IPアドレス等)のハッシュ値とバランサ振分テーブル51に基づいて判定することができる。なお、上りパケットの送信先IPアドレスと、この上りパケットの応答である下りパケットの送信元IPアドレスとは同一である。下りハッシュ56は、下りパケットの識別子aから算出したハッシュ値である。
この統計テーブル53は、ハッシュ値が0の行のD0応答数欄が1に設定される。これは、識別子aの上りパケットおよび下りパケットによるものである。更にハッシュ値が1の行のD1応答数欄が1に設定される。これは、識別子cの上りパケットおよび下りパケットによるものである。
この統計テーブル53は、各識別子のパケットが100個ずつ送受信されたときのものである。
識別子cの下りパケットは、全てディスパッチャ3−1から送信される。そのためテーブル変更部45は、バランサ振分テーブル51のうち、識別子cのハッシュ値=1に対応する送信先を、D1(ディスパッチャ3−1)に変更している。これにより、上りパケットがディスパッチャ3を跨ぐことが無くなる。
仮に最初のハッシュ関数の振り分け結果が分散されていない場合、所望の振分効率が得られないため、ハッシュ関数を組み直す。ハッシュ関数は必ずしも効率のいいものが見つかるとは限らないため、試行錯誤を繰り返すことで比較的分散されるものを見つけるとよい。
ここでは選択したハッシュ関数の振り分け結果が分散されておらず、複数の識別子から同一のハッシュ値が算出される。例えば識別子a,c,eのハッシュ値は0であり、識別子b,d,fのハッシュ値は1である。このような場合、バランサ振分テーブル51を修正しても多くのパケットでディスパッチャ3の跨ぎが発生する。
選択したハッシュ関数が良くなればテーブル修正によりディスパッチャ3の跨ぎを抑えることが可能である。
全体の振分効率Eはこれらの平均値であり、0.99である。このように全体の振分効率Eが閾値Teを超えると、ハッシュパラメータおよびハッシュ関数は変更されなくなる。
仮想マシンへの接続を行う仮想パケット振り分け装置をスケールアウトする際、仮想マシンからの下りパケットの情報を元に負荷分散の振り分けテーブルを随時修正することで仮想パケット振り分け装置間のデータのコピーを減らし、性能劣化を防ぐことが可能になる。
本発明は、上記実施形態に限定されることなく、本発明の趣旨を逸脱しない範囲で、変更実施が可能であり、例えば、次の(a)〜(e)のようなものがある。
(b) ハッシュ分散処理は、全体の振分効率を最大化することに限定されない。識別子リストをハッシュ演算して、ハッシュ値の重複が最小化されるように計算してもよく、限定されない。
(c) 異なるディスパッチャ3間の転送効率の違いを無視してもよい。つまり、所定のハッシュ値を持つ下りパケットを最も多く送信したディスパッチャ3を、バランサ振分テーブル51によって振り分けるディスパッチャとしてもよい。更に異なるディスパッチャ3を跨ぐパケットの割合を振分効率の近似値としてもよい。
(d) ディスパッチャ跨ぎによる振分効率を動的に算出し、パラメータリストを修正してもよい。
(e) バランサやディスパッチャは、単一の物理サーバ上に具現化されるだけではなく、複数の物理サーバ上に具現化された負荷分散システムであってもよい。
2,2−0〜2−5 仮想マシン
21 パケット受信部
22 パケット処理部
23 パケット送信部
3,3−0〜3−2 ディスパッチャ (仮想パケット振り分け装置の一部)
31 パケット受信部
32 振分部
33 パケット集約部
34 パケット送信部
35 ディスパッチャ振分テーブル
4 バランサ (仮想パケット振り分け装置の一部)
41 パケット受信部
42 上りハッシュ部
43 負荷分散部
44 ハッシュ決定部
45 テーブル変更部
46 パケット集約部
47 下りハッシュ部
48 パケット送信部
51 バランサ振分テーブル
52 ディスパッチャテーブル
53 統計テーブル
54 パラメータリスト
55 上りハッシュ
56 下りハッシュ
6,6a〜6c クライアント端末
7 仮想パケット振り分け装置
71,72 NUMAノード
91 社内ネットワーク
92 インターネット
Claims (8)
- 複数の仮想マシンと、
前記複数の仮想マシンにパケットを振り分けると共に相互にパケットを渡す複数のディスパッチャと、
前記仮想マシンのうちのいずれかに送信する上りパケットを、振分テーブルに基づいて前記複数のディスパッチャのいずれかに振り分けると共に、前記上りパケットへの応答である下りパケットが所定割合を超えて異なるディスパッチャから中継されてきたとき、前記振分テーブルを修正するバランサと、
を備えることを特徴とする負荷分散装置。 - 前記バランサは、上りパケットに固有の識別子のハッシュ値と前記振分テーブルとに基づいて前記上りパケットを振り分けるディスパッチャを特定し、下りパケットに固有の識別子のハッシュ値と前記振分テーブルに基づいて、前記下りパケットに対応する上りパケットを振り分けたディスパッチャを特定する、
ことを特徴とする請求項1に記載の負荷分散装置。 - 前記バランサは、所定のハッシュ値の上りパケットへの応答である下りパケットを最も多く送信したディスパッチャを特定し、特定した当該ディスパッチャに前記所定のハッシュ値の上りパケットを振り分けるように前記振分テーブルを修正する、
ことを特徴とする請求項2に記載の負荷分散装置。 - 前記バランサは、所定のハッシュ値の上りパケットへの応答である下りパケットを送信した割合と、ディスパッチャ間の転送効率とによって、前記上りパケットの送信先のディスパッチャごとの振分効率を算出して、前記振分効率を最大化するディスパッチャを特定し、特定した当該ディスパッチャに前記所定のハッシュ値の上りパケットを振り分けるように前記振分テーブルを修正する、
ことを特徴とする請求項2に記載の負荷分散装置。 - 前記固有の識別子は、前記上りパケットの送信先情報および前記下りパケットの送信元情報である、
ことを特徴とする請求項2に記載の負荷分散装置。 - 前記バランサは、前記固有の識別子からハッシュ値を計算するハッシュ関数による全体の振分効率が所定の閾値以下ならば、更に振分効率のよいハッシュ関数に変更する、
ことを特徴とする請求項2に記載の負荷分散装置。 - 複数の仮想マシンと、
前記複数の仮想マシンにパケットを振り分けると共に相互にパケットを渡す複数のディスパッチャと、
前記仮想マシンのうちのいずれかに送信する上りパケットを、振分テーブルに基づいて前記複数のディスパッチャのいずれかに振り分けると共に、前記上りパケットへの応答である下りパケットが所定割合を超えて異なるディスパッチャから中継されてきたとき、前記振分テーブルを修正するバランサと、
を備えることを特徴とする負荷分散システム。 - 複数の仮想マシンと、前記複数の仮想マシンにパケットを振り分けると共に相互にパケットを渡す複数のディスパッチャとが具現化されたコンピュータを、
前記仮想マシンのうちのいずれかに送信する上りパケットを、振分テーブルに基づいて前記複数のディスパッチャのいずれかに振り分ける負荷分散手段、
前記上りパケットへの応答である下りパケットが所定割合を超えて異なるディスパッチャから中継されてきたとき、前記振分テーブルを修正するテーブル変更手段、
として機能させるための負荷分散プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017197037A JP6802771B2 (ja) | 2017-10-10 | 2017-10-10 | 負荷分散装置、負荷分散システム、および負荷分散プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017197037A JP6802771B2 (ja) | 2017-10-10 | 2017-10-10 | 負荷分散装置、負荷分散システム、および負荷分散プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2019071564A JP2019071564A (ja) | 2019-05-09 |
JP6802771B2 true JP6802771B2 (ja) | 2020-12-23 |
Family
ID=66441952
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017197037A Active JP6802771B2 (ja) | 2017-10-10 | 2017-10-10 | 負荷分散装置、負荷分散システム、および負荷分散プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6802771B2 (ja) |
-
2017
- 2017-10-10 JP JP2017197037A patent/JP6802771B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2019071564A (ja) | 2019-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10999184B2 (en) | Health checking in a distributed load balancer | |
US11843657B2 (en) | Distributed load balancer | |
US9432245B1 (en) | Distributed load balancer node architecture | |
US9553809B2 (en) | Asymmetric packet flow in a distributed load balancer | |
US10135914B2 (en) | Connection publishing in a distributed load balancer | |
US9559961B1 (en) | Message bus for testing distributed load balancers | |
US9871712B1 (en) | Health checking in a distributed load balancer | |
US9058213B2 (en) | Cloud-based mainframe integration system and method | |
US20170093721A1 (en) | Setting method, server device and service chain system | |
KR20010088742A (ko) | 분산처리 및 피어 대 피어 통신을 이용한 네트워크 상의정보전송 병렬화 방법 | |
US20180054475A1 (en) | Load balancing system and method for cloud-based network appliances | |
WO2015010197A1 (en) | Method and apparatus for providing redundant data access | |
CN114503531B (zh) | 分布式端点的管理 | |
US9673982B2 (en) | Efficient hardware trust verification in data communication systems that comprise network interface cards, central processing units, and data memory buffers | |
JP6802771B2 (ja) | 負荷分散装置、負荷分散システム、および負荷分散プログラム | |
Ma et al. | A comprehensive study on load balancers for vnf chains horizontal scaling | |
US20220214926A1 (en) | Virtual machine monitoring device, virtual machine monitoring method, and program | |
JP6572184B2 (ja) | パケット転送システム及びパケット転送方法 | |
KR101504191B1 (ko) | 패킷 스니핑을 이용한 분산 처리 시스템 및 그 방법 | |
JP2017016173A (ja) | ログ出力制御装置、ログ出力制御方法、およびプログラム | |
Wang | Design and evaluation of an inter-core QUIC connection migration approach for intra-server load balancing | |
AU2014253953B9 (en) | Distributed load balancer | |
Adeel et al. | Embodiment of Load Balancing and Path Loss IP Networks in Software Defined Networking. | |
CN112671905A (zh) | 服务调度方法、装置及系统 | |
KR20040074321A (ko) | 분산처리 및 피어 대 피어 통신을 이용한 네트워크 상의정보전송 병렬화 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20191219 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20201110 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20201124 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20201127 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6802771 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |