具有基於標頭的路由的 HTTP 負載平衡器?
我正在尋找一個 HTTP 負載平衡解決方案,它將提供以下內容:
接受埠 X 上的 HTTP 連接,並將它們隨機或以循環方式轉發到多個其他主機(和/或埠)之一。
如果伺服器回复包含具有特定值的某個 HTTP 標頭(即’Magic-Number: 12345’),請記住它並將包含相同標頭的所有後續請求轉發到該伺服器。
每隔一定時間,通過向所有目標伺服器發送指定的 HTTP 請求來執行保活測試。如果任一伺服器沒有回复,請停止轉發,直到它再次聯機。
4)(不重要,但很高興)接受來自客戶端的 HTTPS 連接並將它們轉換為與伺服器的 HTTP 連接。
該解決方案必須由免費和/或開源軟體組成,並在 Windows 200x Server 下執行。
有什麼建議?
**更新:**如果 Cygwin 或 Portable Ubuntu(或其他 Colinux 發行版)能夠執行適當的 *nix 解決方案,它們也是可行的選擇。
我把它寫在我的腦海/記憶中,因為我手頭沒有任何東西來驗證它是否正常工作,但我希望這可能對你有一些提示。
所以,我的回答是:
當然,您可以使用 Apache 的
mod_proxy_balancer
. 您應該能夠通過以下方式完成此操作:ProxyPassReverse / http://host1:80/ ProxyPassReverse / http://host2:80/ <Proxy balancer://cluster> BalancerMember http://host1:80 route=LB1 BalancerMember http://host2:80 route=LB2 ProxySet stickysession=MYSESSIONID </Proxy>
因此,關於第 1 點,請閱讀
mod_proxy_balancer
“請求計數算法”部分。關於第 2 點:我真的不知道 HTTP 標頭解析。上面的範例使用額外的 URL 參數
MYSESSIONID
來代理作為與同一主機的同一連接的一部分的流量。我想你也可以使用cookies。無論哪種方式,這都應該由標識為 LB1 或 LB2 的應用程序處理(這些被添加為會話 id 或 cookie 的一部分)。Re 3:負載均衡器監控它的所有成員,並在它們無響應時禁用它們。您還可以通過 Web 界面啟用/禁用節點(
mod_status
請參閱“啟用 Balancer Manager 支持”)。至於第 4 點,您可以設置啟用 SSL 的 VirtualHost 偵聽埠 443,將所有流量代理到平衡器成員埠 80。