Load-Balancing

將虛擬 IP 與 stunnel 和 haproxy 一起使用

  • December 21, 2012

我們有一個負載均衡器設置,其中一個 HTTPS 請求流經以下步驟:-

Client -> DNS -> stunnel on Load-Balancer -> HAProxy on LB -> Web-Server

當 stunnel 監聽負載均衡器的本地 IP 時,此設置完美執行。

然而,在我們的設置中,我們有 2 個負載均衡器,我們希望能夠監聽一個虛擬 IP,它一次只存在於一個 LB 上(如果第一個 LB 倒下,keepalived 將 IP 翻轉到第二個 LB)。

HAProxy 這樣做沒有問題(我可以在我正在測試的負載均衡器上 ping 分配的虛擬 IP),但似乎 stunnel 討厭這個概念。

以前有沒有人實現過這一點(下面是我的 stunnel 配置 - 正如你所看到的,我實際上正在監聽 443 上的所有流量):-

cert= /etc/ssl/certs/mycert.crt
key = /etc/ssl/certs/mykey.key
;setuid = nobody
;setgid = nogroup

pid = /etc/stunnel/stunnel.pid
debug = 3
output = /etc/stunnel/stunnel.log

socket=l:TCP_NODELAY=1
socket=r:TCP_NODELAY=1

[https]
accept=443
connect=127.0.0.1:8443
TIMEOUTclose=0
xforwardedfor=yes

對不起,冗長的問題!

關鍵是允許程序(如 stunnel、HA-proxy)綁定不存在的介面。因此,當 keepalived 將虛擬 IP 翻轉到該框時,程序已經在偵聽並等待該介面上的流量。

這可以/etc/sysctl.conf通過包含以下鍵/值對來修改您的:

net.ipv4.ip_nonlocal_bind=1

更多資訊:http: //nbevans.wordpress.com/2011/03/01/safely-pairing-haproxy-with-virtual-network-interface-providers-like-keepalived-or-heartbeat/

然後,您最好修改您的 stunnel 和 HA-proxy 配置,以硬編碼綁定到特定虛擬介面 IP。而不是讓它“開放”。

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