nginx添加 nginx_heath模塊


原因?為什么會使用nginx_heath 這個模塊,主要是如nginx+tomcat部署的時,tomcat掛了之后nginx->upstream 輪詢是可以踢掉掛掉的tomcat服務的,如果部署的機器掛了之后nginx輪詢是不能踢掉的,如果服務再去請求,就會出現請求超時!

1、ngx_http_proxy_module 模塊和ngx_http_upstream_module模塊(自帶)
官網地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream
2、nginx_upstream_check_module模塊
官網網址:https://github.com/yaoweibin/nginx_upstream_check_module
3、ngx_http_healthcheck_module模塊
官網網址:http://wiki.nginx.org/NginxHttpHealthcheckModule

 

目前主要使用的是第二種解決方式:

1.添加nginx_heath模塊

首先需要添加【nginx_upstream_check_module】模塊:http://pan.baidu.com/s/1caLNUe

./nginx -V

查看已經添加的nginx模塊如:--prefix=/opt/nginx-new --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-pcre

進入nginx源碼中為nginx打補丁:patch -p0 < ../nginx_upstream_check_module-master/check_1.5.12+.patch,這個需要合適的版本,不然會出現打補丁失敗,如果提示沒有patch命令的話,請先安裝yum -y install patch

追加nginx_upstream_check_module模塊:--prefix=/opt/nginx-new --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-pcre --add-module=/home/software/nginx_upstream_check_module-master

然后make

 

2.配置upstream加入健康檢查

upstream name{

  server 10.144.48.157:8205;
  server 119.29.204.12:8889;
  check interval=3000 rise=2 fall=3 timeout=3000 type=tcp;
}

上面配置的意思是,對name這個負載均衡條目中的所有節點,每個3秒檢測一次,請求2次正常則標記 realserver狀態為up,如果檢測 5 次都失敗,則標記 realserver的狀態為down,超時時間為1秒。

指定參數的意思:

- interval:向后端發送的健康檢查包的間隔。
- fall(fall_count): 如果連續失敗次數達到fall_count,服務器就被認為是down。
- rise(rise_count): 如果連續成功次數達到rise_count,服務器就被認為是up。
- timeout: 后端健康請求的超時時間。
- 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: 指定后端服務器的檢查端口。你可以指定不同於真實服務的后端服務器的端口,比如后端提供的是443端口的應用,你可以去檢查80端口的狀態來判斷后端健康狀況。默認是0,表示跟后端server提供真實服務的端口一樣。該選項出現於Tengine-1.4.0。

 

3.配置web頁面

location /nstatus {
  check_status;
  access_log off;
}

如圖:

如果有down掉的如圖

 

另外還支持參數請求?status=up,顯示出up狀態的upstream。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM