Haproxy

HAProxy 平衡問題與保持活動狀態

  • September 30, 2020

我已經將 HAProxy 作為反向代理來平衡對節點後端的請求,但由於某種原因,如果客戶端使用 HTTP keep-alive 發送請求,則 TCP 模式下的 HAProxy 不會在後端伺服器之間輪換,但 HAProxy在 HTTP 模式下。如果客戶端關閉了 HTTP keep-alive,則兩種模式在每個請求的循環中平衡。

這是基本配置:

listen nodes_proxy
       mode tcp
       bind :9090
       balance roundrobin
       timeout client 40s
       timeout server 40s
       retries 1
       retry-on conn-failure
       option redispatch 1
       server node1 x.x.x.x:8080
       server node2 x.x.x.x:8080
       server node2 x.x.x.x:8080

所有後端節點都處於活動狀態並且正在工作,但 TCP 模式下的 HAProxy 不會對來自同一客戶端的每個請求進行循環平衡,而 HTTP 模式會這樣做。對於我們的簡單案例,我們更喜歡 TCP 模式,但它並沒有達到預期的平衡。

如何確保來自客戶端的每個請求(具有保持活動狀態)在循環機制中保持平衡,並且客戶端到代理連接以及代理到伺服器連接保持活動狀態以供重用直到超時?

您正在描述在第 4 層代理的連接的正常預期行為。

在 TCP 模式下,HAProxy 很少或根本不檢查流量,當然也不會嘗試讀取 HTTP 標頭。它只是通過交通。直到一端或另一端斷開連接,它才會繼續傳遞流量。

如果要在伺服器之間實現這種連接平衡,則必須使用 HTTP 模式。

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