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 [ |
---|---|
デフォルト: | - |
コンテキスト: |
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ヘルスチェックはsend と expect パラメータを持つ match ブロックを必要としました。
-
port
=number
- ヘルスチェックを実行するためにサーバへ接続する時に使われるポートを定義します(1.9.7)。デフォルトでは、server ポートに等しいです。
-
udp
-
ヘルスチェックにはデフォルトの
TCP
プロトコルの代わりにUDP
プロトコルが使われるべきだと指定します。
構文: |
health_check_timeout |
---|---|
デフォルト: |
health_check_timeout 5s; |
コンテキスト: |
stream , server |
健康チェックのためのproxy_timeout値を上書きします。
構文: |
match |
---|---|
デフォルト: | - |
コンテキスト: |
stream |
ヘルスチェックへのサーバ応答の検証に使われる名前付きのテストセットを定義します。
次のパラメータを定義することができます:
-
send
string
; -
string
をサーバに送信します; -
expect
string
|~
regex
; -
文字列(1.9.12)あるいは、データから取得したデータが一致しなければならない正規表現。正規表現は先行する"
~*
"修飾子(大文字小文字を区別しないマッチング)、または"~
"修飾子(大文字小文字を区別するマッチング)によって指定されます。
send
および expect
の両方のパラメータは二つの16進数が続くプリフィックス“\x
”を持つ16進数の文字を含むことができます。例えば、“\x80
” (1.9.12)。
以下の場合、健康チェックが通ります:
- TCP接続がうまく確立された;
-
指定された場合は、
send
パラメータのstring
が送信された; -
指定された場合は、文字列あるいは
expect
パラメータの正規表現にサーバから取得されたデータが一致した; - 経過時間がhealth_check_timeout ディレクティブで指定された値を超えない。
例:
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 バイトだけがテストされます。