Haproxy

讓 HAProxy 將請求重新中繼到故障伺服器

  • February 5, 2020

我想知道如果原始伺服器已關閉,HAProxy 是否有辦法將失敗的請求重新發送到另一台伺服器。

我們在多個 HAProxy 實例後面的多個伺服器上執行 REST API。

沒有平衡親和力,平衡純粹是在round-robin.

要升級一台伺服器,我們只需重新啟動它,由於健康檢查,HAProxy 通常不會向該伺服器發送任何數據。

但是:如果伺服器在兩次執行狀況檢查之間發生故障,並且 HAProxy 將 HTTP 請求轉發到該伺服器而不知道它已關閉 - 該請求將失敗(顯然)。

有沒有辦法配置HAProxy,它會注意到連接斷開並在另一台伺服器上重試?

或者至少讓 HAProxy 直接將該伺服器標記為不健康,這樣我們在轉換期間只釋放一個請求而不是多個請求。

HAProxy 在 docker 容器內執行,伺服器也是 docker 容器。

是的,在 2.0 版中,haproxy 已經實現了第 7 層重試。

新的重試配置指令定義了在哪種情況下重試失敗的 HTTP 請求到另一台伺服器。早期版本有option redispatch並且retries只會在連接問題的情況下重新調度(不是例如連接建立後的錯誤/超時)。

請注意不要重試 POST,這樣您就不會在例如的情況下出現多個重複的數據庫送出。緩慢的後端。

例子:

backend test
   balance roundrobin
   option redispatch 1
   retry-on all-retryable-errors
   retries 3
   http-request disable-l7-retry if METH_POST

   server app1 192.168.0.1:80 maxconn 30 check
   server app2 192.168.0.2:80 maxconn 30 check
   server app3 192.168.0.3:80 maxconn 30 check

引用自:https://serverfault.com/questions/810251