nginx_upstream_check_module監控后端服務器http


nginx_upstream_check_module 是專門提供負載均衡器內節點的健康檢查的外部模塊,由淘寶的姚偉斌大神開發,通過它可以用來檢測后端 realserver 的健康狀態。如果后端 realserver 不可用,則后面的請求就不會轉發到該節點上,並持續檢查幾點的狀態。在淘寶自己的 tengine 上是自帶了該模塊。項目地址:https://github.com/yaoweibin/nginx_upstream_check_module 。 下面的是一個帶后端監控檢查的 nginx.conf 配置:

upstream backend {
    sticky;     # or simple round-robin
    server 172.29.88.226:8080 weight=2;
    server 172.29.88.226:8081 weight=1 max_fails=2 fail_timeout=30s ;
    server 172.29.88.227:8080 weight=1 max_fails=2 fail_timeout=30s ;
    server 172.29.88.227:8081;
    
    check interval=5000 rise=2 fall=3 timeout=1000 type=http;
 check_http_send "HEAD / HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx;
}
server {
    location / {
        proxy_pass http://backend;
    }
 location /status { check_status; access_log off; allow 172.29.73.23; deny all;
    }

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

 允許IP訪問最后一定要加deny all;表示除了上面allow的其他都禁止

check指令只能出現在upstream中:

  • interval : 向后端發送的健康檢查包的間隔。
  • fall : 如果連續失敗次數達到fall_count,服務器就被認為是down。
  • rise : 如果連續成功次數達到rise_count,服務器就被認為是up。
  • timeout : 后端健康請求的超時時間。
  • default_down : 設定初始時服務器的狀態,如果是true,就說明默認是down的,如果是false,就是up的。默認值是true,也就是一開始服務器認為是不可用,要等健康檢查包達到一定成功次數以后才會被認為是健康的。
  • type:健康檢查包的類型,現在支持以下多種類型
    • tcp:簡單的tcp連接,如果連接成功,就說明后端正常。
    • http:發送HTTP請求,通過后端的回復包的狀態來判斷后端是否存活。
    • ajp:向后端發送AJP協議的Cping包,通過接收Cpong包來判斷后端是否存活。
    • ssl_hello:發送一個初始的SSL hello包並接受服務器的SSL hello包。
    • mysql: 向mysql服務器連接,通過接收服務器的greeting包來判斷后端是否存活。
    • fastcgi:發送一個fastcgi請求,通過接受解析fastcgi響應來判斷后端是否存活
  • port: 指定后端服務器的檢查端口。你可以指定不同於真實服務的后端服務器的端口,比如后端提供的是443端口的應用,你可以去檢查80端口的狀態來判斷后端健康狀況。默認是0,表示跟后端server提供真實服務的端口一樣。該選項出現於Tengine-1.4.0。

如果 type 為 http ,你還可以使用check_http_send來配置http監控檢查包發送的請求內容,為了減少傳輸數據量,推薦采用 HEAD 方法。當采用長連接進行健康檢查時,需在該指令中添加keep-alive請求頭,如: HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n 。當采用 GET 方法的情況下,請求uri的size不宜過大,確保可以在1個interval內傳輸完成,否則會被健康檢查模塊視為后端服務器或網絡異常。

check_http_expect_alive指定HTTP回復的成功狀態,默認認為 2XX 和 3XX 的狀態是健康的。

nginx-check-upstream

nginx-sticky-cookie.png

 

注意,但是如果https或者http的返回代碼不是2XX 和 3XX,將會返回錯誤,還是用tcp檢測

如下

 


免責聲明!

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



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