
為了獲得容錯能力,我使用 Livestatus 外掛程式在 Thruk 和多個 nagios 後端之間運行 haproxy。 Thruk 沒有連接逾時,因此「死」後端會導致 Thruk 永遠無法加載,通常會導致 apache(透過 fcgi 代理到 Thruk)逾時。
當 Thruk 發送外部命令時我遇到問題。客戶端不需要伺服器的回應,因此在發送資料後立即關閉連線。如果 haproxy 尚未建立與遠端伺服器的連接,這顯然會導致 haproxy 斷開連接。其結果是這樣的日誌條目:
127.0.0.1:48350 [07/4/2014:12:39:17.268] thruk_backend_nagios2_6557_6559 thruk_backend_nagios2_6557_6559/nagios2 0/1/0/0
CC 顯然意味著當 haproxy 嘗試連接到後端伺服器時,客戶端意外關閉了連線。一旦發生這種情況,haproxy 就不會繼續嘗試與後端建立連接,這意味著客戶端發送的資料會被丟棄。
我認為 tcp-smart-accept/connect 選項可能有幫助,但它們沒有效果。
除了修改客戶端或在 Thruk 和 haproxy 之間添加某種儲存轉發 TCP 代理之外,我還能做些什麼嗎? haproxy 是否有一個選項可以使其緩衝客戶端的請求,並在建立連線後將其傳送到伺服器,即使客戶端已消失?