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