模組 ngx_stream_upstream_hc_module
範例組態 指令 health_check health_check_timeout match |
ngx_stream_upstream_hc_module
模組 (1.9.0) 允許對 群組 中的伺服器啟用定期健康檢查。伺服器群組必須位於共享記憶體中。
如果健康檢查失敗,該伺服器將被視為不健康。如果為同一組伺服器定義了多個健康檢查,則任何檢查的單一失敗都會使相應的伺服器被視為不健康。客戶端連線不會傳遞到不健康的伺服器和處於「檢查中」狀態的伺服器。
此模組是我們商業訂閱的一部分。
範例組態
upstream tcp { zone upstream_tcp 64k; server backend1.example.com:12345 weight=5; server backend2.example.com:12345 fail_timeout=5s slow_start=30s; server 192.0.2.1:12345 max_fails=3; server backup1.example.com:12345 backup; server backup2.example.com:12345 backup; } server { listen 12346; proxy_pass tcp; health_check; }
透過此設定,nginx 將每五秒檢查一次與 tcp
群組中每台伺服器建立 TCP 連線的能力。當無法建立與伺服器的連線時,健康檢查將會失敗,並且伺服器將被視為不健康。
可以為 UDP 協定配置健康檢查
upstream dns_upstream { zone dns_zone 64k; server dns1.example.com:53; server dns2.example.com:53; server dns3.example.com:53; } server { listen 53 udp; proxy_pass dns_upstream; health_check udp; }
在此情況下,預期在回覆傳送的字串 "nginx health check
" 時,不會出現 ICMP "Destination Unreachable
" 訊息。
也可以配置健康檢查來測試從伺服器取得的資料。測試是使用match 指令單獨配置,並在 health_check 指令的 match
參數中引用。
指令
語法 |
health_check [ |
---|---|
預設 | — |
上下文 |
server |
啟用對群組中的伺服器進行定期健康檢查。
支援以下可選參數
-
interval
=時間
- 設定兩個連續健康檢查之間的時間間隔,預設為 5 秒。
-
jitter
=時間
- 設定每個健康檢查隨機延遲的時間,預設情況下沒有延遲。
-
fails
=次數
- 設定特定伺服器連續健康檢查失敗的次數,在此之後該伺服器將被視為不健康,預設為 1。
-
passes
=次數
- 設定特定伺服器連續通過健康檢查的次數,在此之後該伺服器將被視為健康,預設為 1。
-
mandatory
[persistent
] -
為伺服器設定初始「檢查中」狀態,直到第一次健康檢查完成 (1.11.7)。用戶端連線不會傳遞到處於「檢查中」狀態的伺服器。如果未指定參數,則伺服器最初將被視為健康。
如果伺服器在重新載入之前被視為健康,則
persistent
參數 (1.21.1) 會在重新載入後為伺服器設定初始「啟動」狀態。 -
match
=名稱
- 指定
match
區塊,該區塊配置成功的連線為了通過健康檢查而應通過的測試。預設情況下,對於 TCP,僅檢查與伺服器建立 TCP 連線的能力。對於 UDP,預期在回覆傳送的字串 "nginx health check
" 時,不會出現 ICMP "Destination Unreachable
" 訊息。在 1.11.7 版本之前,預設情況下,UDP 健康檢查需要一個 match 區塊,其中包含 send 和 expect 參數。
-
port
=數字
- 定義連接到伺服器以執行健康檢查時使用的連接埠 (1.9.7)。預設情況下,等於伺服器連接埠。
-
udp
- 指定應使用
UDP
協定進行健康檢查,而不是預設的TCP
協定 (1.9.13)。
語法 |
health_check_timeout |
---|---|
預設 |
health_check_timeout 5s; |
上下文 |
stream , server |
覆寫健康檢查的 proxy_timeout 值。
語法 |
match |
---|---|
預設 | — |
上下文 |
stream |
定義用於驗證伺服器對健康檢查的回應的命名測試集。
可以配置以下參數
-
send
字串
; - 將
字串
發送到伺服器; -
expect
字串
|~
正規表示式
; - 一個文字字串 (1.9.12) 或一個正規表示式,伺服器取得的資料應與該字串或表示式相符。正規表示式以 "
~*
" 修飾符 (用於不區分大小寫的匹配) 或 "~
" 修飾符 (用於區分大小寫的匹配) 指定。
send
和 expect
參數都可以包含帶有前綴 "\x
" 的十六進位文字,後跟兩個十六進位數字,例如 "\x80
" (1.9.12)。
如果符合以下條件,則健康檢查通過
- 已成功建立 TCP 連線;
- 已傳送來自
send
參數的字串
(如果已指定); - 從伺服器取得的資料與
expect
參數中的字串或正規表示式相符 (如果已指定); - 經過的時間不超過 health_check_timeout 指令中指定的值。
範例
upstream backend { zone upstream_backend 10m; server 127.0.0.1:12345; } match http { send "GET / HTTP/1.0\r\nHost: localhost\r\n\r\n"; expect ~ "200 OK"; } server { listen 12346; proxy_pass backend; health_check match=http; }
僅檢查從伺服器取得的資料的前 proxy_buffer_size 個位元組。