Nginx健康檢查【轉】

Nginx作爲一款強大的反向代理服務和負載均衡服務,具有高併發、低消耗、配置簡單等特點,而健康檢查,則是爲了保障nginx能夠準確的轉發到後端的可用服務。

Nginx健康檢查分爲被動探測與主動探測兩種,顧名思義,被動探測指nginx被動的發起探測;而主動探測則是在固定時間(可配置)主動發起探測,更具靈活性。

一、Nginx被動健康檢查

  • 通過自帶健康檢查模塊ngx_http_upstream_module實現;
  • 當收到訪問時纔對後端發起探測;
  • 請求根據轉發規則首次可能落到不可用節點,如多個節點故障則可能出現轉發多臺後纔將請求轉到正常的服務,在高併發的時候影響轉發效率。

被動健康檢查關鍵參數max_fails與fail_timeout,官方描述如下:

max_fails:在配置的fail_timeout期間,最大的連接錯誤數,默認配置爲1,如配置爲0則表示不啓用探測,不管後端服務是否異常仍然會轉發,單位次數

fail_timeout:服務被認爲不可用的的時間,單位爲s

如下配置:在3s內中如果有1次連接失敗,則表示該節點不可用,將該節點下線3s後纔會再次探測

upstream personal_1 {
 server ip:port max_fails=1 fail_timeout=3;
 server ip:port max_fails=1 fail_timeout=3;}
 server {
 listen      80 ;
 server_name _;
 location ~ / {
 proxy_pass http:// personal_1;
 }
}

 

模擬每秒1次請求,可以發現192.168.125.133服務在17:42探測異常,此時同步轉發至IP1服務,同時17:43-17:46將IP2剔除下線,17:47開始重新探測。

二、Nginx主動健康檢查

  • 通過nginx_upstream_check_module模塊實現,官方nginx暫未加載該模塊,需要自行編譯;
  • 主動對後端服務發起探測,如後端服務不可用,則不轉發;
  • 後端服務恢復後,則主動添加進負載。

主動探測關鍵參數interval、rise、fall、timeout、type、check_http_send、check_http_expect_alive:

interval:健康檢查時間,單位ms

rise:檢查成功次數,達到該值則認爲服務正常,加入負載

fall:檢查失敗次數,達到該值則認爲服務異常,剔除下線

timeout:檢查超時時間,單位ms

type:檢查類型,支持tcp/http等多種協議類型

check_http_send:http探測發送的請求,支持自定義接口,默認:"GET / HTTP/1.0\r\n\r\n"

check_http_expect_alive:http探測狀態碼,除了該配置上的其他狀態碼均認爲服務不可用

如下配置:每1s發起主動探測,如出現1次失敗,則認爲該節點不可用,剔除下線,檢驗返回碼2xx/3xx則認爲服務可用。

upstream personal {
               server IP1;
               server IP2;
               check interval=1000 rise=1 fall=1 timeout=1000 type=http default_down=false;
               check_http_send "GET / HTTP/1.0\r\n\r\n";
               check_http_expect_alive http_2xx http_3xx;
 }
        server {
            listen      80 ;
            server_name _;
            location ~ / {
                proxy_pass http:// personal;
 }
 }

 

如下每秒探測1次,返回非2xx或3xx,服務異常,剔除下線,多次均未向該服務轉發。

 

轉自

Nginx健康檢查 - 知乎
https://zhuanlan.zhihu.com/p/652813977

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章