我正在使用ldirectord来实现两个HTTP服务器的负载平衡。在负载均衡器框中,我具有以下网络配置:
eth0用于内部目的,根本不参与负载平衡。在eth1上
我已经为计算机配置了公共IP(用于从其他内部网络进行访问)和负载均衡器的VIP。 eth2用于访问位于不同子网中的真实服务器,并且只能通过来自同一子网的IP进行访问。
详情如下所示:
# 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
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
inet6 fe80::250:56ff:fea5:77ae/64 scope link
valid_lft forever preferred_lft forever
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
inet6 fe80::250:56ff:fea5:77af/64 scope link
valid_lft forever preferred_lft forever
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
inet6 fe80::250:56ff:fea5:77b0/64 scope link
valid_lft forever preferred_lft forever
这是我的NAT负载平衡的配置:
# cat /etc/ha.d/ldirectord.cf
autoreload = yes
quiescent = yes
checkinterval = 10
negotiatetimeout = 10
checktimeout = 5
emailalert = "[email protected]"
emailalertfreq = 60
failurecount = 3
virtual = 172.22.9.100:80
checktimeout = 10
checktype = negotiate
failurecount = 2
negotiatetimeout = 10
protocol = tcp
quiescent = yes
real = 172.22.1.133:80 masq 1024
real = 172.22.1.134:80 masq 1024
request = "alive.htm"
receive = "I am alive"
scheduler = wrr
service = http
persistent = 5
我还有另外两个iptables规则可以使NATing正常工作:
# 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
现在的问题是,活动检查无法按预期进行。尽管服务器处于联机状态(我可以对其进行ping操作),但ldirector不会那样看,而是将它们标记为已关闭。
如果我使用ping检查一切正常,但是我们需要协商以进行更全面的服务检查(服务器cna是可ping的,但HTTP无法正常工作,等等)。
我试图从负载均衡器框中的命令行下载alive.htm页面,但失败了。
# wget http://172.22.1.133/alive.htm
--2013-04-11 09:52:44-- http://172.22.1.133/alive.htm
Connecting to 172.22.1.133:80... failed: Connection timed out.
Retrying.
首先,我认为问题在于iptables规则。我删除了它们,但仍然无法使用wget下载活动页面(以及curl和w3m)。我尝试从其他两台计算机(分别来自不同的子网)中获取它,并且运行良好!我意识到负载平衡器框有问题。
然后,我关闭了ldirectord并再次尝试了wget。这次它起作用了。
因此在我看来,ldirector会以某种方式阻止其访问真实服务器上的活动页面?这看起来很奇怪而且不合逻辑。那我该怎么办呢?
该问题不是由iptables规则引起的,因为当我删除它们时,alive.htm页面仍然不可用。
真实服务器均可从负载均衡器访问(可ping通)。我是否有ldirectord的一些配置问题?
如何在活着的测试中准确跟踪ldirectord在做什么?
通常,有人能给我一些启示或给我一些想法,哪些可能是错误的,哪些是我可能做错的。
提前致谢 :)
最佳答案
我在负载均衡器上禁用了IPv6,现在一切正常。我猜LVS + IPv6是俄罗斯轮盘赌:)
干杯!
关于linux - ldirectord NAT负载平衡不适用于协商检查,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15946227/