รายละเอียดการสร้าง Travis CI : คลิกเพื่อดู
(中文版本请参看这里)
ตัวตรวจสอบสภาพสำหรับเซิร์ฟเวอร์ต้นน้ำ Nginx (รองรับ http ต้นน้ำ && สตรีมต้นน้ำ)
โมดูลนี้สามารถให้ NGINX มีความสามารถในการตรวจสอบสภาพเซิร์ฟเวอร์แบ็คเอนด์ที่ใช้งานอยู่ (รองรับการตรวจสอบสภาพของเซิร์ฟเวอร์แบ็คเอนด์ทั้งสี่และเจ็ดเซิร์ฟเวอร์)
โมดูล 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
ตรวจสอบช่วงเวลา=มิลลิวินาที [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false] [type=tcp|udp|http] [port=check_port]
Default
: ช่วง = 30,000 ฤดูใบไม้ร่วง = 5 เพิ่มขึ้น = 2 หมดเวลา = 1,000 default_down = true type = tcp
Context
: http/upstream || สตรีม/ต้นน้ำ
คำสั่งนี้สามารถเปิดฟังก์ชันตรวจสอบสภาพเซิร์ฟเวอร์ส่วนหลังได้
Detail
interval
: ช่วงเวลาของแพ็กเก็ตตรวจสุขภาพที่ส่งไปยังแบ็กเอนด์fall
( fall_count
): เซิร์ฟเวอร์จะถือว่าล่มหากจำนวนความล้มเหลวติดต่อกันถึง fall_countrise
( rise_count
): เซิร์ฟเวอร์จะถือว่าเพิ่มขึ้นหากจำนวนความสำเร็จติดต่อกันถึง Rise_counttimeout
: หมดเวลาสำหรับคำขอสุขภาพส่วนหลังdefault_down
: ตั้งค่าสถานะเริ่มต้นของเซิร์ฟเวอร์ หากเป็นจริง แสดงว่าค่าเริ่มต้นเป็นดาวน์ หากเป็นเท็จ แสดงว่าขึ้น ค่าเริ่มต้นเป็นจริงซึ่งเป็นจุดเริ่มต้นของเซิร์ฟเวอร์ที่ไม่พร้อมใช้งาน เพื่อรอให้แพ็คเกจตรวจสอบความสมบูรณ์ถึงจำนวนครั้งที่กำหนดหลังจากประสบความสำเร็จจะถือว่ามีประสิทธิภาพดี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/server/location
ตัวอย่างดังต่อไปนี้:
http {
server {
listen 80 ;
# status interface
location /status {
healthcheck_status;
}
...
}
คุณสามารถระบุรูปแบบการแสดงผลเริ่มต้นได้ รูปแบบอาจเป็น html
, csv
หรือ json
ประเภทเริ่มต้นคือ html
นอกจากนี้ยังรองรับการระบุรูปแบบตามอาร์กิวเมนต์คำขอ สมมติว่าตำแหน่ง check_status
ของคุณคือ '/status' อาร์กิวเมนต์ของ format
สามารถเปลี่ยนรูปแบบของหน้าที่แสดงได้ คุณสามารถทำเช่นนี้:
/status?format=html
/status?format=csv
/status?format=json
/status?format=โพรมีธีอุส
ในปัจจุบัน คุณสามารถดึงข้อมูลรายชื่อเซิร์ฟเวอร์ที่มีสถานะเดียวกันได้โดยใช้อาร์กิวเมนต์ของ status
ตัวอย่างเช่น:
/status?format=json&status=down
/status?format=html&status=down
/status?format=csv&status=up
/status?format=prometheus&status=up
กลับไปที่สารบบ
กลับไปที่สารบบ
กรุณารายงานข้อบกพร่อง
หรือส่งแพทช์โดย
กลับไปที่ TOC
Chance Chou (周长勋) [email protected].
กลับไปที่สารบบ
ส่วนการตรวจสุขภาพจะขึ้นอยู่กับโมดูลตรวจสุขภาพของ Yaoweibin nginx_upstream_check_module (http://github.com/yaoweibin/nginx_upstream_check_module);
โมดูลนี้ได้รับอนุญาตภายใต้ใบอนุญาต BSD
ลิขสิทธิ์ (C) 2017- โดย Changxun Zhou [email protected]
ลิขสิทธิ์ (C) 2014 โดย Weibin Yao [email protected]
สงวนลิขสิทธิ์.
อนุญาตให้แจกจ่ายและใช้งานในรูปแบบซอร์สและไบนารี่ โดยมีหรือไม่มีการแก้ไขก็ได้ โดยมีเงื่อนไขว่าตรงตามเงื่อนไขต่อไปนี้:
การแจกจ่ายซอร์สโค้ดซ้ำต้องคงประกาศลิขสิทธิ์ข้างต้น รายการเงื่อนไข และข้อจำกัดความรับผิดชอบต่อไปนี้
การแจกจ่ายซ้ำในรูปแบบไบนารีจะต้องทำซ้ำประกาศลิขสิทธิ์ข้างต้น รายการเงื่อนไขนี้ และข้อจำกัดความรับผิดชอบต่อไปนี้ในเอกสารประกอบและ/หรือเอกสารอื่นๆ ที่ให้มาพร้อมกับการแจกจ่าย
ซอฟต์แวร์นี้จัดทำโดยผู้ถือลิขสิทธิ์และผู้มีส่วนร่วม "ตามสภาพที่เป็นอยู่" และการรับประกันทั้งโดยชัดแจ้งหรือโดยนัย รวมถึงแต่ไม่จำกัดเพียง การรับประกันโดยนัยเกี่ยวกับความสามารถในเชิงพาณิชย์และความเหมาะสมสำหรับวัตถุประสงค์เฉพาะจะถูกปฏิเสธ ไม่ว่าในกรณีใด ผู้ถือลิขสิทธิ์หรือผู้ร่วมให้ข้อมูลจะต้องรับผิดต่อความเสียหายโดยตรง โดยอ้อม โดยบังเอิญ พิเศษ ที่เป็นแบบอย่าง หรือเป็นผลสืบเนื่องใด ๆ (รวมถึงแต่ไม่จำกัดเฉพาะ การจัดหาสินค้าหรือบริการทดแทน การสูญเสียการใช้งาน ข้อมูล หรือผลกำไร; หรือธุรกิจ การหยุดชะงัก) ไม่ว่าจะเกิดขึ้นและตามทฤษฎีความรับผิดใดๆ ไม่ว่าจะในสัญญา ความรับผิดที่เข้มงวด หรือการละเมิด (รวมถึงความประมาทเลินเล่อหรืออย่างอื่น) ที่เกิดขึ้นในลักษณะใดก็ตามจากการใช้ซอฟต์แวร์นี้ แม้ว่าจะได้รับแจ้งถึงความเป็นไปได้ของความเสียหายดังกล่าวก็ตาม
กลับไปที่สารบบ
กลับไปที่สารบบ