ldirectord NAT 负载平衡不适用于协商检查

ldirectord NAT 负载平衡不适用于协商检查

我正在使用 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 在活动测试期间所做的事情?

一般来说,有人可以给我一些启发或告诉我哪里可能出了问题或者我可能做错了什么吗?

提前致谢 :)

答案1

我已在负载均衡器上禁用 IPv6,现在一切正常。我猜 LVS + IPv6 是俄罗斯轮盘赌 :)

干杯!

相关内容