このトピックでは、NSX Advanced Load Balancer で使用可能な DataScript プール関数の仕様について説明します。

機能

説明

avi.pool.get_server_status( pool, server, port )

サーバの稼動/停止状態を返します

avi.pool.get_servers( pool )

稼動状態のサーバとサーバの合計数を返します

avi.pool.select( pool [, server [, port]] )

特定のプールを選択します

avi.pool.server_ip()

選択したサーバの IP アドレスを返します

avi.pool.get_server_info()

サーバの IP アドレスとポートを返します

avi.poolgroup.select( pool )

特定のプール グループを選択します

avi.pool.chash( string )

コンシステント ハッシュ ロード バランシング アルゴリズムがハッシュする文字列値を設定して、選択したプール内のサーバを選択します

注:

NSX Advanced Load Balancer バージョン 22.1.3 以降では、コンシステント ハッシュがプール グループのロード バランシング アルゴリズムとしてサポートされます。

avi.pool.get_server_status

関数

avi.pool.get_server_status(pool, server, port)

説明

指定されたポートで待機しているサーバの状態を確認します。

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

3 つのパラメータ フィールドはすべて必須です。

  • pool には、特定のプール名、または有効なプール名に評価される式を指定できます。

  • server フラグは、サーバの IPv6 アドレスを引用符で囲んで指定します。

  • port フラグは、サーバの特定のサービス ポートに接続を転送します。ポートは、0 ~ 65536 の数字、または有効なポート番号に評価される式である必要があります。

戻り値

戻り値 0 は、サーバが down であることを示します。戻り値 1 は、サーバが up であることを示します。

サーバがダウンしている場合は、次のようにトラフィックを別の場所にリダイレクトします:

if avi.pool.get_server_status("web-pool", "10.1.1.1", "80") == 0 then
   avi.http.redirect("backupsite.com" .. avi.http.get_uri())
 end

avi.pool.get_servers

関数

avi.pool.get_servers( pool )

説明

状態が「稼動中」のサーバの数と、指定したプール内で構成されたサーバの合計数を確認します。

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

pool には、プール名、または有効なプール名に評価される式を指定できます。

戻り値

稼動中のサーバの数と、プール内のサーバの合計数を返します。

要求を明示的な宛先に転送します。

servers_up, servers_total = avi.pool.get_servers("web-pool")
   if servers_up == 0 then
   avi.http.response(503)
end

avi.pool.select

関数

avi.pool.select( pool [, server [, port]] )

説明

現在の要求のプールまたはプール内の特定のサーバを選択します。プールまたはプール内の特定のサーバを選択するための切り替えアクションを使用して HTTP 要求ポリシーも構成されている場合、この選択は有効になりません。HTTP 要求ポリシーの切り替えアクションは、DataScript のプール選択よりも優先されます。

イベント

HTTP_REQ

パラメータ

pool には、特定のプール名、または有効なプール名に評価される式を指定できます。

サーバ パラメータ(文字列)には、サーバの IPv4 アドレスを引用符で囲んで指定します。オプションのポート パラメータ(整数)は、サーバの特定のサービス ポートに接続を転送します。ポートは、0 ~ 65536 の数字、または有効なポート番号に評価される式である必要があります。

注意事項

プール名、サーバ名または IP アドレス、およびサーバ ポートは、明示的に呼び出されるか、Lua 式に基づいて動的に決定されます。プール名、サーバ、またはサーバ ポートが存在しないか、仮想サービスによって参照できない場合は、エラーが生成されます。

  • 明示的な参照:DataScript の保存中に構成エラーが生成されます。

  • 動的に生成された参照:ランタイム エラーが生成され、結果としてクライアントに 500 エラーが返されます。

戻り値

値は返されません

関連

avi.poolgroup.select()- 現在の要求のプール グループを選択します。

例 1

要求を明示的な宛先に転送します。

if avi.http.get_path() == "/sales/" then
   avi.pool.select("sales-pool")
elseif avi.http.get_path () == "/engineering/" then
   avi.pool.select("engineering-pool", "apache1")
elseif avi.http.get_path () == "/marketing/" then
   avi.pool.select("marketing", "10.10.31.201")
end

例 2

動的に生成された宛先に要求を転送します。

www.avi.com/support/index.htm would go to the support pool www.avi.com/sales/apac/index.htm は、sales プールに移動します

avi.pool.select(avi.http.get_path_tokens(1, 1))

例 3

指定したサーバに要求を転送します。

var = "abcd" avi.pool.select("poolx", var)
注:

プール選択機能は IPv6 ではサポートされていません。

avi.pool.server_ip

関数

avi.pool.server_ip()

説明

この要求または応答のサーバの IPv6 アドレスを返します。コンテンツ スイッチングまたは多重化では、1 つのクライアント接続に複数の要求があり、それぞれ異なるサーバに配布される場合があります。

イベント

HTTP_RESP

パラメータ

なし

戻り値

サーバの IP アドレスの文字列を返します

avi.http.add_header("Server", avi.pool.server_ip())
注:

この API は、イベント SSL_PRECONNECTSSL_CLIENTHELLO、および SSL_HANDSHAKE_DONE ではサポートされていません。

avi.pool.get_server_info

機能

avi.pool.server_info()

説明

この要求または応答のサーバの IPv6 アドレスとポートを返します。

注:

コンテンツ スイッチングまたは多重化では、1 つのクライアント接続に複数の要求があり、それぞれが異なるサーバに分散されます。

イベント

  • HTTP_RESP

  • LB_DONE

パラメータ

なし

戻り値

サーバの IP アドレス(文字列)とそのポート番号

注意事項

プール名、サーバ名または IP アドレス、およびサーバ ポートは、Lua 式に基づいて明示的または動的に呼び出される場合があります。プール名、サーバ、またはサーバ ポートが存在しないか、仮想サービスによって参照できない場合は、エラーが生成されます。

  • 明示的な参照:DataScript の保存中に構成エラーが生成されます。

  • 動的に生成された参照:ランタイム エラーが生成され、結果としてクライアントに 500 エラーが返されます。

関連

avi.pool.get_server_status() は、指定されたポートで待機しているサーバの状態を決定します。

ip, port = avi.pool.get_server_info()

avi.poolgroup.select

機能

avi.poolgroup.select( poolgroup )

説明

現在の要求のプール グループを選択します。プールを選択するための切り替えアクションで HTTP 要求ポリシーも構成されている場合、選択は有効になりません。HTTP 要求ポリシーの切り替えアクションは、DataScript のプール グループの選択よりも優先して実行されます。

イベント

HTTP_REQ

パラメータ

poolgroup には、特定のプール名、または有効なプール名に評価される式を指定できます。

戻り値

プール グループ名は、明示的に呼び出すか、Lua 式に基づいて動的に決定できます。プール グループ名が存在しないか、仮想サービスによって参照できない場合は、エラーが生成されます。

  • 明示的な参照:DataScript の保存中に構成エラーが生成されます。

  • 動的に生成された参照:ランタイム エラーが生成され、結果としてクライアントに 500 エラーが返されます。

注意事項

値は返されません

関連

avi.pool.select() - 現在の要求のプールを選択します。

要求を明示的な宛先に転送します。

if avi.http.get_path() == "/test/" then
avi.poolgroup.select("test-poolgroupl")
else
avi.poolgroup.select("defaut-poolgroup")
end

avi.pool.chash

機能

avi.pool.chash ( string )

説明

コンシステント ハッシュ ロード バランシング アルゴリズムがハッシュする文字列値を設定して、選択したプール内のサーバを選択します

イベント

HTTP_REQ

パラメータ

文字列値を指定する必要があり、任意の方法で作成できます。

戻り値

戻り値はありません

要求に custom-hash という名前のヘッダーがある場合は、その値を、カスタム データを使用したコンシステント ハッシュのロード バランシング アルゴリズムに対する入力として使用して、pool-of-servers という名前のプールからサーバを選択します。プールは、ロード バランシング アルゴリズムがカスタム データのコンシステント ハッシュに設定されるように構成する必要があります。

hash = avi.http.get_header("custom-hash")
if hash then
   avi.pool.select("pool-of-servers")
   avi.pool.chash(hash)
end