Citrix ADC

ハッシュ方式

特定の接続情報またはヘッダー情報のハッシュに基づく負荷分散方法は、Citrix ADCアプライアンスの負荷分散方式のほとんどを構成します。ハッシュは、基づいている情報よりも短く使いやすく、2つの異なる情報が同じハッシュを生成しないため、互いに混乱しないように十分な情報を保持しています。

ハッシュ負荷分散方法は、キャッシュがインターネットまたは指定したオリジンサーバーからの幅広いコンテンツを提供する環境で使用できます。リクエストをキャッシュすると、リクエストとレスポンスのレイテンシーが削減され、リソース(CPU)の使用率が向上し、頻繁に使用されるWebサイトやアプリケーションサーバーでキャッシュが普及します。これらのサイトは負荷分散の恩恵を受けるため、ハッシュ負荷分散方式は広く有用です。

Citrix ADCアプライアンスには、次のハッシュ方式が用意されています。

  • 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 つのサービス (Service-HTTP-1、Service-HTTP-2、および Service-HTTP-3) が仮想サーバーにバインドされ、任意のハッシュ方式が構成され、ハッシュ値が Hash1 であるシナリオを考えてみましょう。設定されたサービスが UP になると、要求は Service-HTTP-1 に送信されます。Service-HTTP-1がダウンしている場合、Citrix ADCアプライアンスはサービス数の最後のログのハッシュ値を計算します。アプライアンスは、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 を使用して一貫性のあるハッシュアルゴリズムを選択するには

  1. [トラフィック管理] > [負荷分散] > [負荷分散パラメータの変更] に移動します。
  2. [ 負荷分散パラメータの構成 ] ペインで、要件に基づいて次のフィールドに適切な値を入力します。

    • LB ハッシュフィンガー
    • [ LB Hash Algorithm ] フィールドで、ドロップダウンメニューから一貫性のあるハッシュアルゴリズムを選択します。

    LB ハッシュアルゴリズム

URLハッシュメソッド

サービスの負荷分散にURLハッシュ方式を使用するようにCitrix ADCアプライアンスを構成すると、アプライアンスは受信要求に存在する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 ハッシュの動作

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 に送信されます。
  • Service-HTTP-1 が起動している場合、要求はService-HTTP-1 に送信されます。
  • Service-HTTP-1 とService-HTTP-2 が同時にアップしている場合、要求はService-HTTP-1 に送信されます。

URL ハッシュ方式を設定するには、 ポリシーを含まないロードバランシング方式の設定を参照してください。[URL Hash] としてロードバランシング方式を選択し、ハッシュ長をハッシュ値の生成に使用するバイト数に設定します。

ドメインハッシュメソッド

ドメインハッシュ方式を使用するように設定されたロードバランシング仮想サーバは、HTTP 要求内のドメイン名のハッシュ値を使用してサービスを選択します。ドメイン名は、HTTP 要求の着信 URL または Host ヘッダーのいずれかから取得されます。ドメイン名が URL と Host ヘッダーの両方に表示される場合、アプライアンスはその URL を優先します。

ドメイン名のハッシュを構成し、着信HTTPリクエストにドメイン名が含まれていない場合、Citrix ADCアプライアンスはデフォルトでそのリクエストのラウンドロビン方式になります。

ハッシュ値の計算では、名前の長さまたはハッシュ長の値のいずれか小さい方が使用されます。デフォルトでは、Citrix ADCアプライアンスはドメイン名の最初の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 ハッシュメソッドを設定するには、 ポリシーを含まないロードバランシングメソッドの設定を参照してください