Travis CI ビルドの詳細: クリックして表示
(中文版本请参看这里)
Nginx アップストリーム サーバーのヘルスチェッカー (http アップストリーム && ストリーム アップストリームをサポート)
このモジュールは、NGINX にアクティブなバックエンド サーバーのヘルス チェック機能を提供します (4 台と 7 台のバックエンド サーバーの両方のヘルス チェックをサポートします)。
この nginx モジュールはまだ開発中です。改善にご協力ください。
このプロジェクトは開発においてもよく開発されており、コードを提供したり、バグを報告したりすることを歓迎します。より良いものにするために一緒に。
ご質問がございましたら、下記までご連絡ください。
QQ
:373882405mail
: [email protected]nginx をロード バランサーとして使用する場合、nginx は通常のバックエンド サーバーへのアクセスを確保するために、基本的な再試行のみをネイティブに提供します。
対照的に、この nginx サードパーティ モジュールは、バックエンド サーバーのプロアクティブな健全性状態検出を提供します。
新しいリクエストが正常なバックエンド サーバーに直接送信されることを保証するバックエンド サーバーのリストを維持します。
主な特徴:
tcp
/ udp
/ http
http
/ fastcgi
html
/ json
/ csv
/ prometheus
html
/ json
/ csv
/ prometheus
check_http_expect_body ~ ".+OK.+";
のような http 応答コードまたは本文に応じてステータスを判断することをサポートします。 git clone https://github.com/nginx/nginx.git
git clone https://github.com/zhouchangxun/ngx_healthcheck_module.git
cd nginx/;
git checkout branches/stable-1.12
git apply ../ngx_healthcheck_module/nginx_healthcheck_for_nginx_1.12+.patch
./auto/configure --with-stream --add-module=../ngx_healthcheck_module/
make && make install
目次に戻る
nginx.confの例
user root;
worker_processes 1 ;
error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024 ;
}
http {
server {
listen 80 ;
# status interface
location /status {
healthcheck_status json;
}
# http front
location / {
proxy_pass http://http-cluster;
}
}
# as a backend server.
server {
listen 8080 ;
location / {
root html;
}
}
upstream http-cluster {
# simple round-robin
server 127.0.0.1:8080;
server 127.0.0.2:81;
check interval=3000 rise=2 fall=5 timeout=5000 type=http;
check_http_send "GET / HTTP/1.0rnrn" ;
check_http_expect_alive http_2xx http_3xx;
}
}
stream {
upstream tcp-cluster {
# simple round-robin
server 127.0.0.1:22;
server 192.168.0.2:22;
check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=tcp;
}
server {
listen 522 ;
proxy_pass tcp-cluster;
}
upstream udp-cluster {
# simple round-robin
server 127.0.0.1:53;
server 8.8.8.8:53;
check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=udp;
}
server {
listen 53 udp;
proxy_pass udp-cluster;
}
}
ステータスインターフェース
典型的な出力の 1 つは (json 形式)
root @ changxun - PC : ~ / nginx - dev / ngx_healthcheck_module # curl localhost/status
{ "servers" : {
"total" : 6 ,
"generation" : 3 ,
"http" : [
{ "index" : 0 , "upstream" : "http-cluster" , "name" : "127.0.0.1:8080" , "status" : "up" , "rise" : 119 , "fall" : 0 , "type" : "http" , "port" : 0 },
{ "index" : 1 , "upstream" : "http-cluster" , "name" : "127.0.0.2:81" , "status" : "down" , "rise" : 0 , "fall" : 120 , "type" : "http" , "port" : 0 }
],
"stream" : [
{ "index" : 0 , "upstream" : "tcp-cluster" , "name" : "127.0.0.1:22" , "status" : "up" , "rise" : 22 , "fall" : 0 , "type" : "tcp" , "port" : 0 },
{ "index" : 1 , "upstream" : "tcp-cluster" , "name" : "192.168.0.2:22" , "status" : "down" , "rise" : 0 , "fall" : 7 , "type" : "tcp" , "port" : 0 },
{ "index" : 2 , "upstream" : "udp-cluster" , "name" : "127.0.0.1:53" , "status" : "down" , "rise" : 0 , "fall" : 120 , "type" : "udp" , "port" : 0 },
{ "index" : 3 , "upstream" : "udp-cluster" , "name" : "8.8.8.8:53" , "status" : "up" , "rise" : 3 , "fall" : 0 , "type" : "udp" , "port" : 0 }
]
}}
root @ changxun - PC : ~ / nginx - dev / ngx_healthcheck_module #
または (プロメテウス形式)
root @ changxun - PC : ~ / nginx - dev / ngx_healthcheck_module # curl localhost/status
# HELP nginx_upstream_count_total Nginx total number of servers
# TYPE nginx_upstream_count_total gauge
nginx_upstream_count_total 6
# HELP nginx_upstream_count_up Nginx total number of servers that are UP
# TYPE nginx_upstream_count_up gauge
nginx_upstream_count_up 0
# HELP nginx_upstream_count_down Nginx total number of servers that are DOWN
# TYPE nginx_upstream_count_down gauge
nginx_upstream_count_down 6
# HELP nginx_upstream_count_generation Nginx generation
# TYPE nginx_upstream_count_generation gauge
nginx_upstream_count_generation 1
# HELP nginx_upstream_server_rise Nginx rise counter
# TYPE nginx_upstream_server_rise counter
nginx_upstream_server_rise { index = "0" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.1:8082" , status = "down" , type = "http" , port = "0" } 0
nginx_upstream_server_rise { index = "1" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.2:8082" , status = "down" , type = "http" , port = "0" } 0
nginx_upstream_server_rise { index = "1" , upstream_type = "stream" , upstream = "tcp-cluster" , name = "192.168.0.2:22" , status = "down" , type = "tcp" , port = "0" } 0
nginx_upstream_server_rise { index = "2" , upstream_type = "stream" , upstream = "udp-cluster" , name = "127.0.0.1:5432" , status = "down" , type = "udp" , port = "0" } 0
nginx_upstream_server_rise { index = "4" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.1:8082" , status = "down" , type = "http" , port = "0" } 0
nginx_upstream_server_rise { index = "5" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.2:8082" , status = "down" , type = "http" , port = "0" } 0
# HELP nginx_upstream_server_fall Nginx fall counter
# TYPE nginx_upstream_server_fall counter
nginx_upstream_server_fall { index = "0" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.1:8082" , status = "down" , type = "http" , port = "0" } 41
nginx_upstream_server_fall { index = "1" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.2:8082" , status = "down" , type = "http" , port = "0" } 42
nginx_upstream_server_fall { index = "1" , upstream_type = "stream" , upstream = "tcp-cluster" , name = "192.168.0.2:22" , status = "down" , type = "tcp" , port = "0" } 14
nginx_upstream_server_fall { index = "2" , upstream_type = "stream" , upstream = "udp-cluster" , name = "127.0.0.1:5432" , status = "down" , type = "udp" , port = "0" } 40
nginx_upstream_server_fall { index = "4" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.1:8082" , status = "down" , type = "http" , port = "0" } 40
nginx_upstream_server_fall { index = "5" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.2:8082" , status = "down" , type = "http" , port = "0" } 43
# HELP nginx_upstream_server_active Nginx active 1 for UP / 0 for DOWN
# TYPE nginx_upstream_server_active gauge
nginx_upstream_server_active { index = "0" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.1:8082" , type = "http" , port = "0" } 0
nginx_upstream_server_active { index = "1" , upstream_type = "http" , upstream = "http-cluster" , name = "127.0.0.2:8082" , type = "http" , port = "0" } 0
nginx_upstream_server_active { index = "1" , upstream_type = "stream" , upstream = "tcp-cluster" , name = "192.168.0.2:22" , type = "tcp" , port = "0" } 0
nginx_upstream_server_active { index = "2" , upstream_type = "stream" , upstream = "udp-cluster" , name = "127.0.0.1:5432" , type = "udp" , port = "0" } 0
nginx_upstream_server_active { index = "4" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.1:8082" , type = "http" , port = "0" } 0
nginx_upstream_server_active { index = "5" , upstream_type = "stream" , upstream = "http-cluster2" , name = "127.0.0.2:8082" , type = "http" , port = "0" } 0
root @ changxun - PC : ~ / nginx - dev / ngx_healthcheck_module #
目次に戻る
Syntax
チェック間隔=ミリ秒 [fall=count] [rise=count] [timeout=ミリ秒] [default_down=true|false] [type=tcp|udp|http] [port=check_port]
Default
: 間隔=30000 立ち下がり=5 立ち上がり=2 タイムアウト=1000 デフォルト_ダウン=真 タイプ=tcp
Context
: http/アップストリーム ||ストリーム/アップストリーム
このコマンドにより、バックエンドサーバーのヘルスチェック機能を開くことができます。
Detail
interval
: バックエンドに送信されるヘルスチェックパケットの間隔。fall
( fall_count
): 連続失敗数が fall_count に達すると、サーバーがダウンしたとみなされます。rise
( rise_count
): 連続成功数がrise_count に達すると、サーバーは稼働しているとみなされます。timeout
: バックエンドのヘルスリクエストのタイムアウト。default_down
: サーバーの初期状態を設定します。true の場合はデフォルトがダウン、false の場合はアップであることを意味します。デフォルト値は true です。これは、サーバーが使用不可になり、成功が正常であるとみなされた後、ヘルス チェック パッケージが一定の回数に達するまで待機します。type
: ヘルスチェックパックのタイプ。次のタイプをサポートするようになりました。tcp
: 単純な tcp 接続。接続が成功すると、通常のバックエンドが表示されます。udp
: udp パケットの送信が簡単。icmp エラー (ホストまたはポートに到達できない) を受信した場合、バックエンド例外が表示されます。(ストリーム構成ブロックでは UDP タイプのチェックのみがサポートされます)。http
: HTTP リクエストを送信し、バックエンド応答パケットの状態によってバックエンドが生存しているかどうかを判断します。次のような例:
stream {
upstream tcp-cluster {
# simple round-robin
server 127.0.0.1:22;
server 192.168.0.2:22;
check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=tcp;
}
server {
listen 522 ;
proxy_pass tcp-cluster;
}
...
}
Syntax
: healthcheck_status [html|csv|json|prometheus]
Default
: healthcheck_status html
Context
: http/サーバー/場所
次のような例:
http {
server {
listen 80 ;
# status interface
location /status {
healthcheck_status;
}
...
}
デフォルトの表示形式を指定できます。形式はhtml
、 csv
、またはjson
です。デフォルトのタイプはhtml
です。リクエスト引数による形式の指定もサポートしています。 check_status
場所が「/status」であると仮定すると、 format
の引数は表示ページの形式を変更できます。次のようにすることができます:
/status?format=html
/ステータス?フォーマット=csv
/status?format=json
/status?format=プロメテウス
現時点では、 status
の引数によって同じステータスを持つサーバーのリストを取得できます。例えば:
/status?format=json&status=down
/status?format=html&status=down
/status?format=csv&status=up
/status?format=プロメテウス&status=up
目次に戻る
目次に戻る
バグを報告してください
またはパッチを提出してください
目次に戻る
Chance Chou (周长勋) [email protected]。
目次に戻る
ヘルスチェック部分は、Yaoweibin のヘルスチェック モジュール nginx_upstream_check_module (http://github.com/yaoweibin/nginx_upstream_check_module) に基づいています。
このモジュールは BSD ライセンスに基づいてライセンスされています。
著作権 (C) 2017-、周昌勲著 [email protected]
著作権 (C) 2014 by Weibin Yao [email protected]
無断転載を禁じます。
以下の条件が満たされる場合、修正の有無にかかわらず、ソースおよびバイナリ形式での再配布および使用が許可されます。
ソース コードを再配布する場合は、上記の著作権表示、この条件リスト、および次の免責事項を保持する必要があります。
バイナリ形式で再配布する場合は、上記の著作権表示、この条件リスト、および次の免責事項を、配布物とともに提供されるドキュメントおよび/またはその他の資料に複製する必要があります。
このソフトウェアは著作権者および寄稿者によって「現状のまま」提供され、商品性および特定目的への適合性の暗黙の保証を含むがこれに限定されない、明示的または黙示的な保証は一切否認されます。いかなる場合においても、著作権保持者または寄稿者は、直接的、間接的、偶発的、特別、例示的、または結果的損害(代替品またはサービスの調達、使用、データ、またはデータの損失を含みますがこれらに限定されません)に対して責任を負わないものとします。たとえその可能性について知らされていた場合でも、契約上、厳格責任、または不法行為(過失またはその他を含む)のいずれかに起因するものであれ、いかなる責任理論に基づくものでも、 ダメージ。
目次に戻る
目次に戻る