Load-Balancing

Haproxy - 停止到正在維護的節點的流量

  • December 29, 2020

我們有 2 個使用 haproxy 進行負載平衡的活動主機。Haproxy 正在兩台主機上執行。由於維護,我們需要停止主機 1 上的服務。在維護視窗期間,我們希望 haproxy 實例停止向主機 1 發送流量並將所有請求發送到主機 2。

**目的:**在伺服器維護期間不中斷。

**目前行為:**當主機 1 上的服務關閉時。流量仍然發送到主機 1 和 2。由於後端服務在主機 1 上關閉,請求超時,然後 Haproxy 停止向主機 1 發送請求。事件發生後如果將所有流量發送到主機 2 並正常處理,則第一次失敗。

有沒有辦法避免失去這 1 個事務(主機 1 上的第一次失敗)?我閱讀了有關使用需要 socat 或 netcat 的套接字文件啟用和禁用後端伺服器的資訊。尚未對其進行測試,但正在尋找具有 haproxy 配置的解決方案來解決此問題。

haproxy 配置中的後端定義

backend myBackend
  balance leastconn
  option httpchk HEAD /
  default-server inter 5s fastinter 1s downinter 10s fall 2 rise 2
  timeout server 20s
  server s1 ActiveHost1:port check  maxconn 10
  server s2 ActiveHost2:port check  maxconn 10
  server s3 standByHost1:port check  maxconn 10  backup
  server s4 standByHost1:port check  maxconn 10  backup

評論該行並重新載入 haproxy 對您來說可以嗎?

sed -i \"/server s1/c\\ #server s1 ActiveHost1:port check maxconn 10\" /etc/haproxy/haproxy.cfg && sudo service haproxy reload

Haproxy 的控制套接字支持發送很多不同的命令來控制伺服器的行為。如果您想允許所有現有連接完成,但不發送新連接,您可以將後端置於 DRAIN 模式(確保啟用控制套接字):

echo "set server backend/serv state drain" | sudo socat stdio /run/haproxy/haproxysock

如果要立即停止所有流量,可以將後端設置為維護模式而不是 DRAIN。

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