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

标签 linux wget nat

我正在使用 ldirectord 对两个 HTTP 服务器进行负载平衡。在负载均衡器盒上,我有以下网络配置:

eth0 用于内部用途,根本不参与负载平衡。在 eth1 上 我已经配置了机器的公共(public)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 = "Konstantin.Boyanov@bmf.bund.de"
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 规则来使 NAT 按预期工作:

# 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/

相关文章:

linux - 具有文件过滤功能的 Cron tar

c - fanotify:监控一个特定的文件夹 - 而不是整个文件系统

web-scraping - wget给 'ERROR 403: Forbidden'的替代方法

google-app-engine - 是否可以将 Google App 引擎 Flexi 与 Cloud Nat 连接起来

linux - 创建 256 个做同样事情的函数 - 创建一个不区分大小写的函数 - 一个将所有参数传递给函数的衬里?

c - 从 C 中的文件描述符中检索文件名

linux - 使用路由器学习 wanIP (wget)

windows - 如何使用 Powershell wget 输出完整的网页特定内容?

javascript - 如何使用 JavaScript 查询 STUN 服务器以获取公共(public) IP 和端口?

python - 在python中的不同LAN之间发送数据