Detail pembuatan Travis CI : Klik untuk melihat
(中文版本请参看这里)
Pemeriksa kesehatan untuk server upstream Nginx (mendukung http upstream && streaming upstream)
Modul ini dapat memberi NGINX kemampuan pemeriksaan kesehatan server back-end aktif (mendukung pemeriksaan kesehatan pada empat dan tujuh server back-end).
Modul nginx ini masih dalam pengembangan, Anda dapat membantu memperbaikinya.
Proyek ini juga dikembangkan dengan baik dalam pengembangan, dan Anda dipersilakan untuk menyumbangkan kode, atau melaporkan bug. Bersama-sama untuk menjadikannya lebih baik.
Jika Anda memiliki pertanyaan, silakan hubungi saya:
QQ
:373882405mail
: [email protected]Saat Anda menggunakan nginx sebagai penyeimbang beban, nginx secara asli hanya menyediakan percobaan ulang dasar untuk memastikan akses ke server backend normal.
Sebaliknya, modul pihak ketiga nginx ini menyediakan Deteksi Status kesehatan proaktif untuk server back-end.
Ia memelihara daftar server back-end yang menjamin bahwa permintaan baru dikirim langsung ke server back-end yang sehat.
Fitur utama:
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
Kembali ke Daftar Isi
contoh 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;
}
}
antarmuka status
Salah satu keluaran tipikal adalah (format 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 #
atau (format prometheus)
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 #
Kembali ke Daftar Isi
Syntax
periksa interval=milidetik [jatuh=hitungan] [naik=hitungan] [batas waktu=milidetik] [default_down=true|false] [type=tcp|udp|http] [port=check_port]
Default
: interval=30000 turun=5 naik=2 batas waktu=1000 default_down=true type=tcp
Context
: http/hulu || aliran/hulu
Perintah ini dapat membuka fungsi pemeriksaan kesehatan server back-end.
Detail
interval
: interval paket pemeriksaan kesehatan yang dikirim ke backend.fall
( fall_count
): server dianggap down jika jumlah kegagalan berturut-turut mencapai fall_count.rise
( rise_count
): server dianggap up jika jumlah keberhasilan berturut-turut mencapai rise_count.timeout
: batas waktu untuk permintaan kesehatan back-end.default_down
: mengatur keadaan awal server, jika benar berarti defaultnya turun, jika salah berarti naik. Nilai defaultnya adalah true yang merupakan awal server tidak tersedia untuk menunggu paket health check mencapai beberapa kali setelah berhasil dianggap sehat.type
: jenis paket pemeriksaan kesehatan, sekarang mendukung jenis berikuttcp
: koneksi tcp sederhana, jika koneksi berhasil menunjukkan back-end normal.udp
: mudah untuk mengirim paket udp, jika Anda menerima kesalahan icmp (host atau port tidak dapat dijangkau), ini menunjukkan pengecualian back-end. (Hanya pemeriksaan tipe UDP yang didukung di blok konfigurasi aliran)http
: mengirim permintaan HTTP, berdasarkan keadaan paket balasan back-end untuk menentukan apakah back-end bertahan.Contohnya seperti berikut:
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/lokasi
Contohnya seperti berikut:
http {
server {
listen 80 ;
# status interface
location /status {
healthcheck_status;
}
...
}
Anda dapat menentukan format tampilan default. Formatnya bisa html
, csv
atau json
. Tipe defaultnya adalah html
. Ini juga mendukung untuk menentukan format dengan argumen permintaan. Misalkan lokasi check_status
Anda adalah '/status', argumen format
dapat mengubah format halaman tampilan. Anda dapat melakukan seperti ini:
/status?format=html
/status?format=csv
/status?format=json
/status?format=prometheus
Saat ini, Anda dapat mengambil daftar server dengan status yang sama dengan argumen status
. Misalnya:
/status?format=json&status=turun
/status?format=html&status=turun
/status?format=csv&status=naik
/status?format=prometheus&status=up
Kembali ke Daftar Isi
Kembali ke Daftar Isi
Silakan laporkan bug
atau kirimkan tambalan paling lambat
Kembali ke Daftar Isi
Kesempatan Chou (周长勋) [email protected].
Kembali ke Daftar Isi
Bagian pemeriksaan kesehatan didasarkan pada modul pemeriksaan kesehatan Yaoweibin nginx_upstream_check_module (http://github.com/yaoweibin/nginx_upstream_check_module);
Modul ini dilisensikan di bawah lisensi BSD.
Hak Cipta (C) 2017-, oleh Changxun Zhou [email protected]
Hak Cipta (C) 2014 oleh Weibin Yao [email protected]
Semua hak dilindungi undang-undang.
Redistribusi dan penggunaan dalam bentuk sumber dan biner, dengan atau tanpa modifikasi, diperbolehkan asalkan kondisi berikut terpenuhi:
Pendistribusian ulang kode sumber harus tetap memperhatikan pemberitahuan hak cipta di atas, daftar ketentuan ini, dan penafian berikut.
Redistribusi dalam bentuk biner harus mereproduksi pemberitahuan hak cipta di atas, daftar ketentuan ini dan penafian berikut dalam dokumentasi dan/atau materi lain yang disertakan dengan distribusi.
PERANGKAT LUNAK INI DISEDIAKAN OLEH PEMEGANG HAK CIPTA DAN KONTRIBUTOR "APA ADANYA" DAN JAMINAN TERSURAT MAUPUN TERSIRAT, TERMASUK, NAMUN TIDAK TERBATAS PADA, JAMINAN TERSIRAT ATAS KELAYAKAN UNTUK DIPERDAGANGKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU DITOLAK. DALAM KEADAAN APA PUN PEMEGANG HAK CIPTA ATAU KONTRIBUTOR TIDAK BERTANGGUNG JAWAB ATAS KERUSAKAN LANGSUNG, TIDAK LANGSUNG, INSIDENTAL, KHUSUS, CONTOH, ATAU KONSEKUENSIAL (TERMASUK, NAMUN TIDAK TERBATAS PADA, PENGADAAN BARANG ATAU JASA PENGGANTI; KEHILANGAN PENGGUNAAN, DATA, ATAU KEUNTUNGAN; ATAU BISNIS GANGGUAN) APAPUN PENYEBABNYA DAN PADA TEORI TANGGUNG JAWAB APA PUN, BAIK DALAM KONTRAK, TANGGUNG JAWAB KETAT, ATAU HUKUM (TERMASUK KELALAIAN ATAU LAINNYA) YANG TIMBUL DALAM PENGGUNAAN PERANGKAT LUNAK INI, MESKIPUN DIBERITAHU TENTANG KEMUNGKINAN KERUSAKAN TERSEBUT.
Kembali ke Daftar Isi
Kembali ke Daftar Isi