我使用ldirectord来负载平衡两个IIS服务器。ldirectord.cg看起来如下所示:
autoreload = yes
quiescent = yes
checkinterval = 1
negotiatetimeout = 2
emailalertfreq = 60
emailalert = Konstantin.Boyanov@mysite.com
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负载平衡很好,真正的服务器是可见的,等等。然而,我遇到了一个简单测试的问题:
我在ipvsadm -Ln中看到的是,连接仍然在“死”服务器上。我必须等待最多一分钟(我想浏览器端有一些TCP超时),才能将它们传输到“活动”服务器。如果在这一分钟内我继续按“重新加载”按钮,连接就停留在“死”服务器上,它们的TCP超时计数器就会重新启动。
因此,我的问题是:是否有一种方法可以告诉NAT模式下的负载均衡器立即终止/重定向到死服务器的现有连接(或接近立即)?
在我看来,客户端的重新加载可能会使连接变成“僵尸”,这似乎是一个错误,例如,尽管没有使用持久性,而另一台服务器已经准备好并可用,但它被绑定到一个死的真正的服务器上。
我发现影响此超时的唯一一件事是更改运行IE8的Windows机器中的IE8,这是我用于测试的。当我把它从60秒的达菲值加到30秒时,连接可以在30秒后传输。在我看来,客户端设置会影响作为负载均衡器的网络组件的操作,这是非常奇怪的。
还有一件事-- ipvsadm输出中的colum名为“非活动Conenctions”是用来做什么的?哪些连接被视为非活动连接?
在ipvsadm的输出中,我还看到了与状态TIME_WAIT的几个连接。这些是做什么用的?
任何见解和建议都是非常感谢的!
干杯,康斯坦丁
P.S:以下是有关配置的更多信息:
# 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发布于 2013-11-08 11:29:41
首先-你不能通过把重量改为0来测试.您必须完全删除ipvs表中的条目,以模拟失败的服务器。
您已经告诉ldirectord要保持死服务器存活:静态=是,您需要将其更改为:静态=否(这将从表中删除条目)。
看起来您确实正确地设置了以下值: expire_nodest_conn - BOOLEAN expire_quiescent_template - BOOLEAN
说明:https://www.kernel.org/doc/Documentation/networking/ipvs-sysctl.txt
https://stackoverflow.com/questions/16281091
复制相似问题