淘寶技術團隊開發的nginx模快nginx_upstream_check_module能夠檢測後方realserver的健康狀態,若是後端服務器不可用,則因此的請求不轉發到這臺服務器。mysql
[root@localhost src]# cd nginx-1.8.0/ [root@localhost nginx-1.8.0]# patch -p1 < /usr/local/src/nginx_upstream_check_module/check_1.7.2+.patch patching file src/http/modules/ngx_http_upstream_ip_hash_module.c patching file src/http/modules/ngx_http_upstream_least_conn_module.c
從新編譯nginx 添加 –add-module=/usr/local/src/nginx_upstream_check_module/ [root@localhost nginx-1.8.0]# ./configure \ --prefix=/usr/local/nginx \ --user=www \ --group=www \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-file-aio \ --with-http_dav_module \ --with-pcre=/usr/local/src/pcre-8.37 \ --add-module=/usr/local/src/nginx_upstream_check_module/ [root@localhost nginx-1.8.0]# make #只Make不進行make install 4.配置健康檢查 1 upstream resinserver_web{ 2 ip_hash; 3 server 127.0.0.1:8095; 4 server 127.0.0.1:8080; 5 check interval=3000 rise=2 fall=5 timeout=1000 type=http; 6 check_http_send "GET / HTTP/1.0\r\n\r\n"; #發送GET請求 7 check_http_expect_alive http_2xx http_3xx; #返回碼是2xx,3xx表示UP 8 } 說明: interval:向後端發送的健康檢查包的間隔,3000爲3s。 fall(fall_count): 若是連續失敗次數達到fall_count,服務器就被認爲是down。 rise(rise_count): 若是連續成功次數達到rise_count,服務器就被認爲是up。 timeout: 後端健康請求的超時時間,1000爲1s。 default_down: 設定初始時服務器的狀態,若是是true,就說明默認是down的,若是是false,就是up的。默認值是true,也就是一開始服務器認爲是不可用,要等健康檢查包達到必定成功次數之後纔會被認爲是健康的。 type:健康檢查包的類型,如今支持如下多種類型 tcp:簡單的tcp鏈接,若是鏈接成功,就說明後端正常。 ssl_hello:發送一個初始的SSL hello包並接受服務器的SSL hello包。 http:發送HTTP請求,經過後端的回覆包的狀態來判斷後端是否存活。 mysql: 向mysql服務器鏈接,經過接收服務器的greeting包來判斷後端是否存活。 ajp:向後端發送AJP協議的Cping包,經過接收Cpong包來判斷後端是否存活。 port: 指定後端服務器的檢查端口。 check_http_send 指令 該指令能夠讓負載均衡器模擬向後端realserver發送,監控檢測的http包,模擬LVS的檢測。 check_http_expect_alive 指令 check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ] 返回指定HTTP code,符合預期就算檢測成功 5.配置狀態查看 51 location /nstatus { 52 check_status; 53 access_log off; 54 allow 182.xx.xx.xx; 55 deny all; 56 } 從新reload下nginx而後查看頁面就能看到後端服務器的狀態