可以通過原始客戶端IP的開源(第4層)負載均衡器?
我正在設置一個對所有請求都使用 SSL 的 Web 應用程序。它需要有可擴展的空間並且具有高可用性。處理這個問題的“推薦”方法似乎是為 HA 設置一對第 4 層負載均衡器,它們通過伺服器群進行 SSL 解密,然後進入第 7 層負載均衡器群,然後最後到網路伺服器。(見:http: //1wt.eu/articles/2006_lb/index_09.html)
我過去使用過 HAProxy,所以我嘗試了這樣的設置。基本上我有
HAProxy in TCP mode => STunnel => HAProxy in HTTP mode => Apache
。當我這樣做時,apache 可用的客戶端 IP 是第二個 HAProxy 伺服器的 IP。我可以通過讓 STunnel 添加一個 X-Forwarded-For 標頭來稍微改善這一點,但這只會給我第一個 HAProxy 伺服器的 IP 地址。我無法找到讓 Apache 知道原始客戶端 IP 地址的方法。根據我閱讀的文件,我認為 HAProxy 無法以 tcp 模式傳遞原始客戶端的 IP 地址。那是對的嗎?如果是這樣,是否有任何開源軟體負載均衡器可以做到這一點?如果沒有,是否有任何商業/硬體負載均衡器可以?
我想我還應該注意,這個負載均衡器嚴格來說不需要是第 4 層負載均衡器。我只需要能夠將 SSL 流量傳遞到 STunnel(或者我最終用於 SSL 解密的任何東西)。
作為旁注,我嘗試在沒有第 4 層負載均衡器的情況下設置它(即 STunnel 是鏈的第一部分)。這解決了客戶端IP問題。然而,正如上面文章中預測的那樣,STunnel 是瓶頸。它開始失去每秒 500 到 600 個請求之間的請求。而且,當然,這不能僅通過添加更多盒子來擴展(同時保持 HA)。根據我給出的要求,這個應用程序應該能夠處理每秒 1000-5000 個請求的峰值流量。
我強烈建議研究 LVS。http://www.linuxvirtualserver.org/
它能夠進行正常的 NAT 路由,還可以進行直接發送回客戶端的 IP 隧道和直接路由。
您是否看過:http ://httpd.apache.org/docs/2.3/mod/mod_remoteip.html ,它將根據 X-Forwarded-for 標頭重寫 IP。