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.+";
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;
}
}
상태 인터페이스
일반적인 출력 중 하나는 (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
확인 간격=밀리초 [하강=수] [상승=수] [시간 초과=밀리초] [default_down=true|false] [type=tcp|udp|http] [port=check_port]
Default
: 간격=30000 하락=5 상승=2 시간 초과=1000 default_down=true 유형=tcp
Context
: http/업스트림 || 스트림/업스트림
이 명령은 백엔드 서버 상태 확인 기능을 열 수 있습니다.
Detail
interval
: 백엔드로 전송되는 상태 확인 패킷의 간격입니다.fall
( fall_count
): 연속 실패 횟수가 fall_count에 도달하면 서버가 다운된 것으로 간주됩니다.rise
( rise_count
): 연속 성공 횟수가 상승 수에 도달하면 서버가 가동된 것으로 간주됩니다.timeout
: 백엔드 상태 요청의 시간 초과입니다.default_down
: 서버의 초기 상태를 설정합니다. true이면 기본값은 down이고, false이면 up입니다. 기본값은 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=다운
/status?format=html&status=다운
/status?format=csv&status=up
/status?format=prometheus&status=up
목차로 돌아가기
목차로 돌아가기
버그를 신고해주세요
또는 다음 방법으로 패치를 제출하세요.
목차로 돌아가기
찬스 추(周长勋) [email protected].
목차로 돌아가기
상태 확인 부분은 Yaoweibin의 상태 확인 모듈 nginx_upstream_check_module(http://github.com/yaoweibin/nginx_upstream_check_module)을 기반으로 합니다.
이 모듈은 BSD 라이선스에 따라 라이선스가 부여됩니다.
저작권 (C) 2017-, 작성자: Changxun Zhou [email protected]
저작권 (C) 2014 by Weibin Yao [email protected]
모든 권리 보유.
다음 조건이 충족되는 경우 수정 여부에 관계없이 소스 및 바이너리 형식으로 재배포 및 사용이 허용됩니다.
소스 코드를 재배포할 경우 위의 저작권 고지, 본 조건 목록 및 다음 면책 조항을 유지해야 합니다.
바이너리 형식으로 재배포할 경우 배포와 함께 제공되는 문서 및/또는 기타 자료에 위의 저작권 고지, 이 조건 목록 및 다음 면책 조항을 재현해야 합니다.
이 소프트웨어는 저작권 보유자 및 기여자에 의해 "있는 그대로" 제공되며, 상품성 및 특정 목적에의 적합성에 대한 묵시적인 보증을 포함하되 이에 국한되지 않는 모든 명시적 또는 묵시적 보증은 부인됩니다. 어떠한 경우에도 저작권 보유자나 기여자는 직접적, 간접적, 부수적, 특별, 예시적 또는 결과적 손해(대체 상품이나 서비스의 조달, 사용, 데이터 또는 이익의 손실을 포함하되 이에 국한되지 않음)에 대해 책임을 지지 않습니다. 또는 사업 중단) 원인에 관계없이 계약, 엄격한 책임 또는 이 소프트웨어의 사용으로 인해 발생하는 불법 행위(과실 또는 기타 포함)에 관계없이 책임 이론에 따라 발생합니다. 이는 그러한 손해의 가능성이 통보된 경우에도 마찬가지입니다.
목차로 돌아가기
목차로 돌아가기