模組 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 區塊,其中包含 sendexpect 參數。
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) 或一個正規表示式,伺服器取得的資料應與該字串或表示式相符。正規表示式以 "~*" 修飾符 (用於不區分大小寫的匹配) 或 "~" 修飾符 (用於區分大小寫的匹配) 指定。

sendexpect 參數都可以包含帶有前綴 "\x" 的十六進位文字,後跟兩個十六進位數字,例如 "\x80" (1.9.12)。

如果符合以下條件,則健康檢查通過

範例

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 個位元組。