ハッシュ方式
特定の接続情報またはヘッダー情報のハッシュに基づく負荷分散方法は、Citrix ADCアプライアンスの負荷分散方式のほとんどを構成します。ハッシュは、基づいている情報よりも短く使いやすく、2つの異なる情報が同じハッシュを生成しないため、互いに混乱しないように十分な情報を保持しています。
ハッシュ負荷分散方法は、キャッシュがインターネットまたは指定したオリジンサーバーからの幅広いコンテンツを提供する環境で使用できます。リクエストをキャッシュすると、リクエストとレスポンスのレイテンシーが削減され、リソース(CPU)の使用率が向上し、頻繁に使用されるWebサイトやアプリケーションサーバーでキャッシュが普及します。これらのサイトは負荷分散の恩恵を受けるため、ハッシュ負荷分散方式は広く有用です。
NetScalerアプライアンスには次のハッシュメソッドがあります。
- URLハッシュ方式
- ドメインハッシュ法
- 宛先 IP ハッシュ方式
- ソース IP ハッシュ方式
- 送信元 IP 宛先 IP ハッシュ方式
- 送信元 IP 送信元ポートのハッシュ方式
- コール ID ハッシュメソッド
- トークン方式
ほとんどのハッシュアルゴリズムは、次の 2 つのハッシュ値を計算します。
- サービスの IP アドレスとポートのハッシュ。
- 設定されているハッシュ方式に応じて、受信URL、ドメイン名、送信元 IP アドレス、宛先 IP アドレス、または送信元と宛先 IP アドレスのハッシュ。
次に、Citrix ADCアプライアンスは、これらのハッシュ値の両方を使用して新しいハッシュ値を生成します。最後に、ハッシュ値が最も高いサービスにリクエストを転送します。アプライアンスは各リクエストのハッシュ値を計算し、要求を処理するサービスを選択すると、キャッシュが生成されます。同じハッシュ値を持つ後続の要求は、同じサービスに送信されます。次のフローチャートは、このプロセスを示しています。
注
Citrix ADCリリース13.0ビルド79.xから、プライム再シャッフルアシストCARP(PRAC)とジャンプテーブルアシストリングハッシュ(JAR)の一貫性のあるハッシュアルゴリズムがサポートされています。一貫性のあるハッシュアルゴリズムにより、ロードバランシングセットアップにサービスが追加または削除されたとき、またはロードバランシングセットアップでサービスフラップイベント中にサービスが中断される最小限に抑えられます。詳細については、「 一貫性のあるハッシュアルゴリズム」を参照してください。
図1:ハッシュメソッドによるリクエストの配布
ハッシュ方法は、IPv4 アドレスと IPv6 アドレスに適用できます。
3 つのサービス (サービス HTTP-1、サービス HTTP-2、サービス HTTP-3) が仮想サーバーにバインドされ、任意のハッシュ方式が設定され、ハッシュ値が Hash1 であるシナリオを考えてみましょう。設定されたサービスが UP になると、要求は Service-HTTP-1 に送信されます。Service-HTTP-1がダウンしている場合、NetScalerアプライアンスはサービス数の最後のログのハッシュ値を計算します。次に、アプライアンスは Service-HTTP-2 など、ハッシュ値が最も高いサービスを選択します。次の図は、このプロセスを示しています。
図2:ハッシュメソッドのエンティティモデル
注
Citrix ADCアプライアンスがハッシュ方式を使用してサービスを選択できない場合、デフォルトでは、着信要求のサービスを選択するための最小接続方法が使用されます。負荷分散設定のパフォーマンスに影響を与えずにキャッシュを再入力できるように、トラフィックが少ない時間帯にサービスを削除してサーバープールを調整します。
一貫性のあるハッシュアルゴリズム
一貫性のあるハッシュアルゴリズムは、ステートレスな永続性を実現するために使用されます。ハッシュベースの LB メソッドは、次の 3 つの一貫性のあるハッシュアルゴリズムのいずれかを使用します。
-
キャッシュアレイルーティングプロトコル (CAP)
CARP アルゴリズムは、複数のプロキシキャッシュサーバ間の HTTP 要求のロードバランシングに使用されます。このアルゴリズムはデフォルトで有効になっています。
-
プライム再シャッフルアシストカープ (PRAC)
Citrix ADCアプライアンスは、独自のPRACアルゴリズムを使用して、均一なトラフィック分散を提供します。
-
ジャンプテーブルアシストリングハッシュ (JARH)
Citrix ADCアプライアンスは、独自のJARHアルゴリズムを使用して、トラフィックの一貫性と均一な分散を提供します。このアルゴリズムはハッシュフィンガーを使用します。指の数が多いほど、トラフィックの分布が向上します。ただし、指の数を増やすと、メモリ使用量も増加します。
CLI を使用して一貫性のあるハッシュアルゴリズムを選択するには
set lb parameter [-lbHashAlgorithm [DEFAULT|JARH|PRAC] [-lbHashFingers <positive_integer>] <!--NeedCopy-->
例:
set lb parameter -lbHashAlgorithm JARH -lbHashFingers 10 <!--NeedCopy-->
引数:
-
lbHashAlgorithm-次のハッシュベースのロードバランシング方法に使用するハッシュアルゴリズムを指定します。
- URLハッシュ方式
- ドメインハッシュ法
- 宛先 IP ハッシュ方式
- ソース IP ハッシュ方式
- 送信元 IP 宛先 IP ハッシュ方式
- 送信元 IP 送信元ポートのハッシュ方式
- コール ID ハッシュメソッド
- トークン方式
指定可能な値:DEFAULT、PRAC、JARH デフォルト値:DEFAULT
-
lbHashFingers-ハッシュベースのLB メソッドの PRAC および JARH アルゴリズムで使用する指の数を指定します。指の数を増やすと、余分なメモリを犠牲にしてトラフィックの分散が向上します。
デフォルト値:256 最小値:1 最大値:1024
GUI を使用して一貫性のあるハッシュアルゴリズムを選択するには
- [トラフィック管理] > [負荷分散] > [負荷分散パラメータの変更] に移動します。
-
[ 負荷分散パラメータの構成 ] ペインで、要件に基づいて次のフィールドに適切な値を入力します。
- LB ハッシュフィンガー
- [ LB Hash Algorithm ] フィールドで、ドロップダウンメニューから一貫性のあるハッシュアルゴリズムを選択します。
URLハッシュメソッド
サービスの負荷分散やサービスの選択にURLハッシュ方式を使用するようにNetScalerアプライアンスを構成すると、アプライアンスは受信リクエストに含まれるHTTP URLのハッシュ値を生成します。ハッシュ値で選択されたサービスが DOWN の場合、アルゴリズムにはアクティブなサービスのリストから別のサービスを選択する方法があります。アプライアンスは URL のハッシュ値をキャッシュし、同じ URL を使用する後続のリクエストを受信すると、それらを同じサービスに転送します。アプライアンスが受信リクエストを解析できない場合、URL ハッシュ方式の代わりにラウンドロビン方式を使用して負荷分散を行います。
ハッシュ値の生成には、アプライアンスは特定のアルゴリズムを使用し、URL の一部を考慮します。デフォルトでは、アプライアンスは URL の最初の 80 バイトを考慮します。URL が 80 バイト未満の場合は、完全な URL が使用されます。別の長さを指定できます。ハッシュの長さは 1 バイトから 4096 バイトまでです。一般に、数文字しか異なる長い URL を使用する場合は、より均一な負荷分散を確保するために、ハッシュ長をできるだけ長くすることをお勧めします。
Service-HTTP-1、Service-HTTP-2、Service-HTTP-3 という 3 つのサービスが仮想サーバーにバインドされ、仮想サーバーで構成される負荷分散方式が URL ハッシュ方式であるシナリオを考えてみます。仮想サーバーが要求を受信し、URL のハッシュ値は U1 です。アプライアンスはサービス HTTP-1 を選択します。Service-HTTP-1 が DOWN の場合、アプライアンスはService-HTTP-2 を選択します。
次の図は、このプロセスを示しています。
図3:URL ハッシュの仕組み
Service-HTTP-1 と Service-HTTP-2 の両方がダウンしている場合、アプライアンスはハッシュ値 U1 の要求をサービス HTTP-3 に送信します。
Service-HTTP-1 およびService-HTTP-2 がダウンしている場合、ハッシュ URL1 を生成する要求はService-HTTP-3 に送信されます。これらのサービスが UP の場合、ハッシュ URL1 を生成する要求は次の方法で配布されます。
- Service-HTTP-2 が起動している場合、要求はService-HTTP-2 に送信されます。
- サービス HTTP-1 が稼働している場合、リクエストはサービス HTTP-1 に送信されます。
- Service-HTTP-1 とService-HTTP-2 が同時にアップしている場合、要求はService-HTTP-1 に送信されます。
URL ハッシュ方式を設定するには、 ポリシーを含まないロードバランシング方式の設定を参照してください。[URL Hash] としてロードバランシング方式を選択し、ハッシュ長をハッシュ値の生成に使用するバイト数に設定します。
ドメインハッシュ法
ドメインハッシュ方式を使用するように構成された負荷分散仮想サーバーは、HTTP リクエスト内のドメイン名のハッシュ値を使用してサービスを選択します。ドメイン名は、HTTP リクエストの受信 URL または Host ヘッダーのいずれかから取得されます。ドメイン名が URL と Host ヘッダーの両方に表示される場合、アプライアンスはその URL を優先します。
ドメイン名ハッシュを構成していて、受信HTTPリクエストにドメイン名が含まれていない場合、NetScalerアプライアンスはそのリクエストに対してデフォルトでラウンドロビン方式になります。
ハッシュ値の計算では、名前の長さとハッシュ長の値のどちらか小さい方を使用します。デフォルトでは、NetScalerアプライアンスはドメイン名の最初の80バイトからハッシュ値を計算します。ハッシュ値を計算するときにドメイン名に異なるバイト数を指定するには、hashLength パラメータ(設定ユーティリティの Hash Length)を 1 ~ 4096(バイト)の値に設定します。
ドメインハッシュ方式を設定するには、 ポリシーを含まない負荷分散方式の構成を参照してください。
宛先 IP ハッシュ方式
宛先 IP ハッシュ方式を使用するように構成された負荷分散仮想サーバーは、宛先 IP アドレスのハッシュ値を使用してサーバーを選択します。宛先 IP アドレスをマスクして、ハッシュ値の計算にどの部分を使用するかを指定できます。これにより、異なるネットワークから送信され、同じサブネット宛ての要求はすべて同じサーバーに送信されます。このメソッドは、IPv4およびIPv6ベースの宛先サーバーをサポートします。
この負荷分散方法は、キャッシュリダイレクト機能との併用に適しています。
IPv4 宛先サーバーの宛先 IP ハッシュ方式を設定するには、NetMask パラメータを設定します。IPv6 宛先サーバーに対してこのメソッドを設定するには、v6NetMaskLen パラメータを使用します。構成ユーティリティで、[ 宛先 IP ハッシュ方式] を選択すると、これらのパラメータを設定するためのテキストボックスが表示されます。
宛先 IP ハッシュ方式を設定するには、 ポリシーを含まないロードバランシング方式の構成を参照してください。
送信元 IP ハッシュ方式
ソース IP ハッシュ方式を使用するように構成された負荷分散仮想サーバーは、クライアントの IPv4 または IPv6 アドレスのハッシュ値を使用してサービスを選択します。特定のネットワークに属する送信元 IP アドレスからのすべての要求を特定の宛先サーバーに転送するには、送信元 IP アドレスをマスクする必要があります。IPv4アドレスの場合は、NetMaskパラメータを使用してください。IPv6 アドレスの場合は、v6NetMaskLength パラメーターを使用します。
送信元 IP ハッシュ方式を設定するには、 ポリシーを含まないロードバランシング方式の設定を参照してください。
送信元 IP 宛先 IP ハッシュ方式
送信元 IP 宛先 IP ハッシュ方式を使用するように設定されたロードバランシング仮想サーバは、送信元と宛先 IP アドレス(IPv4 または IPv6)のハッシュ値を使用してサービスを選択します。ハッシュは対称です。ハッシュ値は、送信元と宛先 IP の順序に関係なく、同じです。これにより、特定のクライアントから同じ宛先に流れるすべてのパケットが同じサーバに送信されます。
特定のネットワークに属するすべての要求を特定の宛先サーバーに送信するには、送信元 IP アドレスをマスクする必要があります。IPv4アドレスの場合は、NetMaskパラメータを使用してください。IPv6 アドレスの場合は、v6NetMaskLength パラメーターを使用します。
送信元 IP 宛先 IP ハッシュ方式を設定するには、 ポリシーを含まないロードバランシング方式の設定を参照してください。
送信元 IP 送信元ポートのハッシュ方式
ソース IP ソースポートハッシュ方式を使用するように構成された負荷分散仮想サーバーは、送信元 IP(IPv4 または IPv6)のハッシュ値および送信元ポートのハッシュ値を使用してサービスを選択します。これにより、特定の接続上のすべてのパケットが同じサービスに送信されます。
この方法は、接続ミラーリングとファイアウォールの負荷分散で使用されます。接続ミラーリングの詳細については、「 接続のフェイルオーバー」を参照してください。
特定のネットワークに属するすべての要求を特定の宛先サーバーに送信するには、送信元 IP アドレスをマスクする必要があります。IPv4アドレスの場合は、NetMaskパラメータを使用してください。IPv6 アドレスの場合は、v6NetMaskLength パラメーターを使用します。
送信元 IP 送信元ポートのハッシュ方式を設定するには、 ポリシーを含まないロードバランシング方式の設定を参照してください。
コール ID ハッシュメソッド
コール ID ハッシュ方式を使用するように構成された負荷分散仮想サーバーは、SIP ヘッダーのコール ID のハッシュ値を使用してサービスを選択します。そのため、特定の SIP セッションのパケットは常に同じプロキシサーバーに送信されます。
この方法は、SIP ロードバランシングに適用できます。SIP ロードバランシングの詳細については、「 SIP サービスのモニタリング」を参照してください。
コール ID ハッシュメソッドを設定するには、 ポリシーを含まないロードバランシングメソッドの設定を参照してください。