ngx_stream_upstream_hc_module モジュール

設定例
ディレクティブ
     health_check
     health_check_timeout
     match

ngx_stream_upstream_hc_module モジュール (1.9.0) はgroup内のサーバの周期的なヘルスチェックを有効にすることができます。サーバグループは共有メモリ内にある必要があります。

ヘルスチェックが失敗した場合、サーバは健康ではないと見なされるでしょう。いくつかのヘルスチェックがサーバの同じグループに定義されている場合、いずれかのチェックの一つの失敗により対応するサーバが健康では無いと見なされるでしょう。クライアント接続は健康ではないサーバと"調査中"状態のサーバへ渡されません。

このモジュールは商用許可の一部として利用可能です。

設定例

upstream tcp {
    zone upstream_tcp 64k;

    server backend1.example.com:12345 weight=5;
    server backend2.example.com:12345 fail_timeout=5s slow_start=30s;
    server 192.0.2.1:12345            max_fails=3;

    server backup1.example.com:12345  backup;
    server backup2.example.com:12345  backup;
}

server {
    listen     12346;
    proxy_pass tcp;
    health_check;
}

この設定を使って、nginxは5秒毎にtcp グループ内の各サーバへのTCP接続を確立できるかどうかを調べるでしょう。接続が確立できなかった場合、健康チェックは失敗し、サーバは健康ではないと見なされるでしょう。

ヘルスチェックはUDPプロトコルについても設定することができます:

upstream dns_upstream {

    zone   dns_zone 64k;

    server dns1.example.com:53;
    server dns2.example.com:53;
    server dns3.example.com:53;
}

server {
    listen       53 udp;
    proxy_pass   dns_upstream;
    health_check udp;
}

この場合、送信された文字列 “nginx health check” への応答として ICMPの不在 “Destination Unreachable” メッセージが期待されます。

健康チェックはサーバから取得されるデータのテストをするよう設定することもできます。テストは、matchディレクティブを使って個々に設定することができ、health_checkディレクティブ内のmatch パラメータの中で参照されます。

ディレクティブ

構文: health_check [parameters];
デフォルト: -
コンテキスト: server

group内のサーバの健康状態を定期的に有効にします。

次の任意のパラメータがサポートされます:

interval=time
二つの連続するヘルスチェックの間の時間を設定します。デフォルトは5秒です。
jitter=time
各ヘルスチェックがランダムに遅れる時間の範囲を設定します。デフォルトでは遅れはありません。
fails=number
特定のサーバがヘルスチェックに連続して失敗して健康では無いと見なされる数を設定します。デフォルトは1です。
passes=number
特定のサーバがヘルスチェックに連続して成功して健康であると見なされる数を設定します。デフォルトは1です。
mandatory [persistent]

最初のヘルスチェックが完了するまでのサーバについての初回の"checking"状態を設定します (1.11.7)。クライアント接続は"checking"状態のサーバへ渡されません。パラメータが指定されない場合、サーバは最初は健康であると見なされるでしょう。

persistent パラメータ (1.21.1)は、サーバーがリロード前に健康であると見なされた場合、リロード後のサーバの初期の“up”状態を設定します。

match=name
応答がヘルスチェックにパスするために必要なテストを順番に設定するmatchブロックを指定します。デフォルトでは、TCPについて、サーバへTCP接続を確立する機能のみが調べられます。UDPについては、送信された文字列 “nginx health check” への応答としてICMPの不在 “Destination Unreachable” メッセージが期待されます。
バージョン 1.11.7 より前は、デフォルトでは UCPヘルスチェックはsendexpect パラメータを持つ match ブロックを必要としました。
port=number
ヘルスチェックを実行するためにサーバへ接続する時に使われるポートを定義します(1.9.7)。デフォルトでは、server ポートに等しいです。
udp
ヘルスチェックにはデフォルトのTCPプロトコルの代わりにUDPプロトコルが使われるべきだと指定します。

構文: health_check_timeout timeout;
デフォルト:
health_check_timeout 5s;
コンテキスト: stream, server

健康チェックのためのproxy_timeout値を上書きします。

構文: match name { ... }
デフォルト: -
コンテキスト: stream

ヘルスチェックへのサーバ応答の検証に使われる名前付きのテストセットを定義します。

次のパラメータを定義することができます:

send string;
string をサーバに送信します;
expect string | ~ regex;
文字列(1.9.12)あるいは、データから取得したデータが一致しなければならない正規表現。正規表現は先行する"~*"修飾子(大文字小文字を区別しないマッチング)、または"~"修飾子(大文字小文字を区別するマッチング)によって指定されます。

send および expectの両方のパラメータは二つの16進数が続くプリフィックス“\x”を持つ16進数の文字を含むことができます。例えば、“\x80” (1.9.12)。

以下の場合、健康チェックが通ります:

例:

upstream backend {
    zone     upstream_backend 10m;
    server   127.0.0.1:12345;
}

match http {
    send     "GET / HTTP/1.0\r\nHost: localhost\r\n\r\n";
    expect ~ "200 OK";
}

server {
    listen       12346;
    proxy_pass   backend;
    health_check match=http;
}

サーバから取得されたデータの最初のproxy_buffer_size バイトだけがテストされます。

TOP
inserted by FC2 system