2013-04-29 141 views
0

我正在使用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 

負載平衡工作正常,真實服務器都可見等。然而,我遇到一個問題,一個簡單的測試:

  1. 我開一些連接從客戶端瀏覽器(IE 8)到真實服務器上託管的站點
  2. 我將真實服務器的權重設置爲0,並且僅保留其他真實服務器的活動
  3. 我重新加載頁面重新生成連接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 

回答

1

第一關 - 您可以通過改變權重爲0,不能測試... 你要刪除來自ipvs表的條目完全用來模擬失敗的服務器。

你告訴指揮器守屍服務器活着: 靜態= YES 您需要更改到: 靜態=沒有(這會撕裂了表的條目)

它看起來像你這樣做有下列值設置正確: expire_nodest_conn - 布爾 expire_quiescent_template - 布爾

說明這裏:https://www.kernel.org/doc/Documentation/networking/ipvs-sysctl.txt

相關問題