Citrix ADC

ハッシュ方式

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

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

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

  • URLハッシュ方式
  • ハッシュ関数
  • 宛先 IP ハッシュ方式
  • 送信元 IP ハッシュ方式
  • 送信元 IP 宛先 IP ハッシュ方式
  • 送信元 IP 送信元ポートのハッシュ方式
  • コール ID ハッシュ方式
  • トークン方式

これらのハッシュアルゴリズムにより、負荷分散設定に対してサービスを追加または削除するときの中断を最小限に抑えることができます。それらのほとんどは2つのハッシュ値を計算します。

  • サービスの IP アドレスとポートのハッシュ。
  • 着信 URL、ドメイン名、送信元 IP アドレス、宛先 IP アドレス、または送信元と宛先 IP アドレスのハッシュ。設定されたハッシュ方式によって異なります。

次に、Citrix ADCアプライアンスは、これらのハッシュ値の両方を使用して新しいハッシュ値を生成します。最後に、最も高いハッシュ値を持つサービスに要求を転送します。アプライアンスは各リクエストのハッシュ値を計算し、リクエストを処理するサービスを選択すると、キャッシュが設定されます。同じハッシュ値を持つ後続の要求は、同じサービスに送信されます。次のフローチャートは、このプロセスを示しています。

図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アプライアンスがハッシュ方式を使用してサービスを選択できない場合、デフォルトでは、受信要求のサービスを選択するための最小接続方式が使用されます。負荷分散セットアップのパフォーマンスに影響を与えずにキャッシュを再移入できるようにするため、トラフィックの少ない期間中にサービスを削除してサーバプールを調整する必要があります。

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 です。アプライアンスは Service-HTTP-1 を選択します。Service-HTTP-1 が DOWN の場合、アプライアンスはService-HTTP-2 を選択します。

次の図は、このプロセスを示しています。

図3:URL ハッシュの動作

URL ハッシュ

Service-HTTP-1とService-HTTP-2の両方がDOWNの場合、アプライアンスはハッシュ値U1の要求をService-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 ハッシュ方式を設定するには、ポリシーを含まないロードバランシング方式の設定を参照してください。

ハッシュ方式