首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当真正的服务器死亡时,ldirectord不传输连接。

当真正的服务器死亡时,ldirectord不传输连接。
EN

Stack Overflow用户
提问于 2013-04-29 14:23:29
回答 1查看 1.4K关注 0票数 0

我使用ldirectord来负载平衡两个IIS服务器。ldirectord.cg看起来如下所示:

代码语言:javascript
复制
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

负载平衡很好,真正的服务器是可见的,等等。然而,我遇到了一个简单测试的问题:

  1. 我打开一些从客户端浏览器(IE8)到托管在实际服务器上的站点的连接。
  2. 我将真正服务器的权重转换为0,而只让另一个真正的服务器处于活动状态。
  3. 我重新加载页面以重新生成连接。

我在ipvsadm -Ln中看到的是,连接仍然在“死”服务器上。我必须等待最多一分钟(我想浏览器端有一些TCP超时),才能将它们传输到“活动”服务器。如果在这一分钟内我继续按“重新加载”按钮,连接就停留在“死”服务器上,它们的TCP超时计数器就会重新启动。

因此,我的问题是:是否有一种方法可以告诉NAT模式下的负载均衡器立即终止/重定向到死服务器的现有连接(或接近立即)?

在我看来,客户端的重新加载可能会使连接变成“僵尸”,这似乎是一个错误,例如,尽管没有使用持久性,而另一台服务器已经准备好并可用,但它被绑定到一个死的真正的服务器上。

我发现影响此超时的唯一一件事是更改运行IE8的Windows机器中的IE8,这是我用于测试的。当我把它从60秒的达菲值加到30秒时,连接可以在30秒后传输。在我看来,客户端设置会影响作为负载均衡器的网络组件的操作,这是非常奇怪的。

还有一件事-- ipvsadm输出中的colum名为“非活动Conenctions”是用来做什么的?哪些连接被视为非活动连接?

在ipvsadm的输出中,我还看到了与状态TIME_WAIT的几个连接。这些是做什么用的?

任何见解和建议都是非常感谢的!

干杯,康斯坦丁

P.S:以下是有关配置的更多信息:

代码语言:javascript
复制
# 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16281091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档