我正在使用ldirectord負載平衡兩臺IIS服務器。該ldirectord.cg看起來是這樣的:當真實服務器死亡時,ldirectord不會傳輸連接
autoreload = yes
quiescent = yes
checkinterval = 1
negotiatetimeout = 2
emailalertfreq = 60
emailalert = [email protected]
failurecount = 1
virtual = 172.22.9.100:80
checktimeout = 1
checktype = negotiate
protocol = tcp
real = 172.22.1.133:80 masq 2048
real = 172.22.1.134:80 masq 2048
request = "alive.htm"
receive = "I am not a zombie"
scheduler = wrr
負載平衡工作正常,真實服務器都可見等。然而,我遇到一個問題,一個簡單的測試:
- 我開一些連接從客戶端瀏覽器(IE 8)到真實服務器上託管的站點
- 我將真實服務器的權重設置爲0,並且僅保留其他真實服務器的活動
- 我重新加載頁面重新生成連接ctions
我看到的ipvsadm -Ln是連接仍然在「死」的服務器上。我必須等待一分鐘(我想從瀏覽器端發出一些TCP超時),讓他們轉移到「活着的」服務器。如果在這一分鐘內我繼續按重載按鈕,連接將停留在「死」服務器並且它們的TCP超時計數器重新啓動。
所以我的問題是:有沒有辦法告訴負載均衡器在NAT模式終止/重定向現有連接到死亡服務器立即(或接近立即)?
在我看來,客戶端的重新加載可以使連接成爲「殭屍」,例如,綁定到一個死的真正的服務器,雖然沒有使用持久性,而另一臺服務器已準備好並可用。
我發現影響此超時的唯一方法是更改運行IE8的Windows計算機上的keepAliveTimeout,我使用該計算機進行測試。當我將其從60秒的默認值增加到30秒時,可以在30秒後傳輸連接。在我看來,非常奇怪的是,客戶端設置會影響網絡組件作爲負載平衡器的操作。
另一件事 - 在ipvsadm的輸出中使用了什麼名爲「Inactive Conenctions」的列?哪些連接被視爲不活動?
而且在ipvsadm的輸出中,我看到一些狀態爲TIME_WAIT的連接。這些是爲了什麼?
任何洞察力和建議,高度讚賞!
乾杯, 康斯坦丁
PS:這裏是關於配置的一些信息:
# uname -a
Linux 3.0.58-0.6.2-default #1 SMP Fri Jan 25 08:31:01 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lb-mysite.com wrr
-> spwfe001.mysite.com:h Masq 10 0 0
-> spwfe002.mysite.com:h Masq 10 0 0
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- anywhere anywhere to:172.22.9.100
SNAT all -- anywhere anywhere to:172.22.1.130
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
inet 127.0.0.2/8 brd 127.255.255.255 scope host secondary lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:a5:77:ae brd ff:ff:ff:ff:ff:ff
inet 192.168.8.216/22 brd 192.168.11.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:a5:77:af brd ff:ff:ff:ff:ff:ff
inet 172.22.9.100/22 brd 172.22.11.255 scope global eth1:1
inet 172.22.8.213/22 brd 172.22.11.255 scope global secondary eth1
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:a5:77:b0 brd ff:ff:ff:ff:ff:ff
inet 172.22.1.130/24 brd 172.22.1.255 scope global eth2
# cat /proc/sys/net/ipv4/ip_forward
1
# cat /proc/sys/net/ipv4/vs/conntrack
1
# cat /proc/sys/net/ipv4/vs/expire_nodest_conn
1
# cat /proc/sys/net/ipv4/vs/expire_quiescent_template
1