Haproxy

停止前始終保存 HAProxy 伺服器狀態

  • December 29, 2020

我們有時使用管理套接字禁用 HAProxy 中的特定伺服器(在 RedHat 7 上執行,但在本地編譯,因為 RedHat 不提供 1.8),我們希望在伺服器重新啟動時保持狀態。我們將 HAProxy 設置為從帶有 的文件中載入其狀態server-state-file,但我們需要記住每次進行更改時都保存狀態文件。有沒有一種好方法可以確保每次伺服器停止時都保存狀態?

如果 systemd 有ExecPreStop=,我們可以在/etc/systemd/system不修改分佈式單元文件的情況下將其從文件中包含在內,但 systemd 開發人員表示他們認為不需要該指令。

我們最終創建了一個“假”服務,只有一個依賴於的停止操作,haproxy.service因此它將ExecStop在 HAProxy 停止之前執行。

haproxy-state.service:

[Unit]
Description=Save HAProxy State Before Service Stop
After=haproxy.service
Requires=haproxy.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/sh -c "/usr/bin/socat /run/haproxy/control.socket - <<< \"show servers state\" > /var/lib/haproxy/last_state"

[Install]
WantedBy=multi-user.target haproxy.service

它需要在之後,所以它會 在之前haproxy.service停止。它需要這樣才能在 HAProxy 執行時始終啟動。WantedBy

這並不完美,因為如果在 systemd 停止下一個服務之前有很長的暫停,狀態可能會改變,但這是我們將承擔的風險。

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