網路伺服器的負載平衡(狀態同步)
(我看過其他問題,我認為它們中的任何一個都沒有涵蓋與此相同的內容)
我正在為我們的網路伺服器場尋找負載平衡解決方案。我們目前使用 Cisco CSS11000 系列設備,但這些設備有一些限制:
- 我們目前解除安裝 SSL,我知道這會將負載放在 LB 上,而不是能夠在多個 Web 伺服器上水平擴展 SSL 工作
- CSS LB 不支持 IPv6
- CSS 不能很好地用於故障轉移——我們希望能夠優雅地移動使用者流量,讓我們在不中斷服務的情況下升級網路伺服器。
目標:
- 讓我們以“優雅”的方式停用一半的網路伺服器(即新使用者連接轉到指定的網路伺服器子組,它會告訴我們現有連接何時關閉 - 如果它可以強制它們優雅地關閉以使使用者不這樣做,則可以加分”注意)。
- 讓我們在不中斷服務的情況下重新啟動/重新配置負載均衡器
- 支持您期望的通常的 HA 東西(如果單個伺服器爆炸或崩潰,請不要中斷)
- 我想這樣做而不在商業/硬體負載平衡器上花費 $$
- 如果可能的話,我想在 Linux 上這樣做,以利用內部經驗。
- 其他企業喜歡“企業”的東西,因為當它出錯時他們可以責怪別人。因此,無論我建議實施什麼,都需要與商業解決方案一樣可靠。
想法:
- 兩對 HAProxy。我們將使用 HAProxy 套接字控制機制 ( http://code.google.com/p/haproxy-docs/wiki/UnixSocketCommands ) 來優雅地刪除網路伺服器。每對將使用心跳來維護服務,我們將修改 DNS 以指向另一對以將新使用者連接移動到另一對。需要某種形式的監控來告訴我們特定對何時有 0 個活動連接。
- 兩台 Linux 機器使用 iptables 和 -m random 模組進行平衡。我會使用 heartbeat 讓 HA VIP 在其中一台機器上保持活動狀態,並且我會使用 conntrackd 來同步 TCP 連接狀態,這樣我們就可以在不失去服務的情況下進行故障轉移。需要一些腳本來根據後端的狀態插入/刪除 iptables 規則(除非有人知道工具?)
有人對以上內容有意見嗎?或任何其他/更好/免費的想法?
謝謝!
HAProxy 很棒(根據經驗),我不確定您是否知道使用該
peers
指令同步棒表(如果您啟用了持久性)等更新的功能。有關詳細資訊,請參閱 1.5 手冊:http: //haproxy.1wt.eu/download/1.5/doc/configuration.txtHAProxy 還能夠進行 IPv6 -> IPv4 轉換;如果您的內部網路仍在使用 IPv4 定址,但您的面向公眾的網路沒有使用,這將非常有用。
您的列表中缺少一件事 - LVS/IPVS,它是 Linux 核心的一部分。它也支持 IPv6(雖然不能翻譯,因為不是代理)。性能非常好,經常與 ldirectord(Perl 守護程序)結合使用,用於健康檢查和伺服器離線/線上功能。 http://horms.net/projects/ldirectord/。您可以優雅地重新載入 ldirectord 配置文件,或直接使用 ipvsadm 命令使伺服器離線、更改權重等。LVS 還具有同步功能: http ://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS- HOWTO.server_state_sync_demon.html
你沒有提到持久性/粘性是否是一個要求,但是 LVS 可以通過源 IP 來堅持,HAProxy 有幾個選項:cookie、源 IP、RDP cookie。
雖然兩者都不執行 SSL 終止,但這可以由 Stunnel、Pound 以及毫無疑問的其他幾個來處理。