我有两个运行 BusyBox 的虚拟机(在 ESX 下)。这些机器仅用作负载平衡器。
我正在使用笔在每台工作正常的机器上进行负载平衡。但是当我启动 vrrpd ping 工作时,但没有其他工作。
每个负载均衡器有 3 个接口。管理 IP 在 eth0 上,eth1 用于第二个负载均衡器设置。
LBCO102A
10.3.16.96 - (eth0) Management IP
10.3.16.84 - (eth2) IP that pen uses
LBCO102B
10.3.16.94 - (eth0) Management IP
10.3.16.85 - (eth2) IP that pen uses
vrrpd 使用 10.3.16.58
在 LBCO102A 上,我使用以下命令启动 vrrpd:
vrrpd -i eth2 -v 58 -p 100 10.3.16.58
在 LBCO102B 上,我使用以下命令启动 vrrpd:
vrrpd -i eth2 -v 58 -p 50 10.3.16.58
我可以在端口 80 上毫无问题地连接到 IP 10.3.16.84 和 10.3.16.85。我可以毫无问题地连接到管理 IP 10.3.16.94 和 10.3.16.96。当我连接到 10.3.16.58 时,它会超时。/var/run/messages 文件中没有显示任何内容,除了一个是 master 而另一个不是。
有没有人知道为什么 vrrpd 除了 ping 之外没有推送流量?我有这三个设置。一个在 pop3 上,一个在 smtp 上,一个在 http 上。除了 ping,它们都不适用。
这是来自 LBCO102A 的 netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.3.16.107:110 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN
tcp 0 0 10.3.16.84:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8889 0.0.0.0:* LISTEN
tcp 0 0 10.3.16.107:110 10.3.17.30:53960 TIME_WAIT
tcp 0 0 10.3.16.96:22 10.3.30.154:1224 ESTABLISHED
tcp 0 0 10.3.16.107:110 10.3.17.30:54000 TIME_WAIT
tcp 0 0 10.3.16.107:110 10.3.17.30:54102 TIME_WAIT
tcp 0 0 10.3.16.107:110 10.3.17.30:54038 TIME_WAIT
tcp 0 0 10.3.16.107:110 10.3.17.30:53959 TIME_WAIT
tcp 0 0 10.3.16.107:110 10.3.17.30:54001 TIME_WAIT
tcp 0 0 10.3.16.107:110 10.3.17.30:54101 TIME_WAIT
tcp 0 0 10.3.16.96:22 10.3.30.154:1097 ESTABLISHED
tcp 0 0 10.3.16.107:110 10.3.17.30:54037 TIME_WAIT
raw 0 0 0.0.0.0:112 0.0.0.0:* 0
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 7 [ ] DGRAM 983 /tmp/log
unix 2 [ ] DGRAM 1156708
unix 2 [ ] DGRAM 1156657
unix 2 [ ] DGRAM 1156524
unix 2 [ ] DGRAM 192729
unix 2 [ ] DGRAM 994
这是来自 LBCO102B 的 netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN
tcp 0 0 10.3.16.85:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN
tcp 0 0 10.3.16.94:22 10.3.30.154:1118 ESTABLISHED
raw 0 0 0.0.0.0:112 0.0.0.0:* 0
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 6 [ ] DGRAM 981 /tmp/log
unix 2 [ ] DGRAM 188253
unix 2 [ ] DGRAM 179316
unix 2 [ ] DGRAM 179306
unix 2 [ ] DGRAM 988
这是我的启动脚本中的内容。(脚本中有更多内容可检查启动/停止/重启)LBCO103A
echo -n "Starting eth2: "
ifconfig eth2 10.3.16.84 netmask 255.255.255.0 up
echo "OK"
echo -n "Starting vrrp-ascossrs101: "
vrrpd -i eth2 -v 58 -p 100 10.3.16.58
echo "OK"
echo -n "Starting pen-ascossrs101: "
/bin/pen -C 8888 -X -l /var/log/ascossrs101.log -p /var/log/ascossrs101.pid 10.3.16.84:80 10.3.16.56:80 10.3.16.57:80
echo "OK"
LBCO102B
echo -n "Starting eth2: "
ifconfig eth2 10.3.16.85 netmask 255.255.255.0 up
echo "OK"
echo -n "Starting vrrp-ascossrs101: "
vrrpd -i eth2 -v 58 -p 100 10.3.16.58
echo "OK"
echo -n "Starting pen-ascossrs101: "
/bin/pen -C 8888 -X -l /var/log/ascossrs101.log -p /var/log/ascossrs101.pid 10.3.16.85:80 10.3.16.56:80 10.3.16.57:80
echo "OK"
我没有用过笔,所以我不太确定它是如何工作的,但也许可以提供帮助。
你能运行 netstat -an 并提供输出吗?我的猜测是 pen 绑定到 eth2 IP,而不是盒子上的所有地址。它应该配置为 0.0.0.0 以便它会获取盒子拥有的任何地址,或者你应该运行 vrrpd masterscript 以使 pen 绑定到你是 VIP。可能必须发生的事情是 masterscript 必须启动已经配置为期望 vip 绑定到您的 eth2 接口的笔本身。
现在使用 netstat 输出进行编辑:好的,这就是问题所在:LBCO102A tcp 0 0 10.3.16.84:80 0.0.0.0:* LISTEN
10.3.16.84:80 表示你只绑定到 10.3.16.84 的 80 端口,因此即使服务器有 VIP,它也不会监听 10.3.16.58 的 80 端口。
同样,我对 pen 不是很熟悉,但假设传递的第一个 IP 地址是绑定:/bin/pen -C 8888 -X -l /var/log/ascossrs101.log -p /var/log/ascossrs101 .pid 10.3.16.84:80 10.3.16.56:80 10.3.16.57:80 可能是 /bin/pen -C 8888 -X -l /var/log/ascossrs101.log -p /var/log/ascossrs101.pid 0.0。 0.0:80 10.3.16.56:80 10.3.16.57:80
0.0.0.0:80 意味着绑定到盒子上的所有地址和所有接口。
另一种选择可能是使用: /bin/pen -C 8888 -X -l /var/log/ascossrs101.log -p /var/log/ascossrs101.pid 10.3.16.58:80 10.3.16.56:80 10.3.16.57 :80
但是,我怀疑这是否会按原样工作,因为当程序启动时,VM 将没有该 IP 地址,因此 pen 将无法显式绑定到它。我试图查看 vrrpd 的文档,我不确定它是否可以做到这一点,但 freevrrp 有一个 masterscript 选项,它基本上会在接管 VIP 时运行一个脚本。因此,您只需将启动笔的命令添加为主脚本的一部分,这样当盒子获得 VIP 的所有权时,它将启动笔并将其绑定到 VIP IP 地址。
好的,我想我现在一切正常。这是我从@Kevin 那里得到的东西加上我在网上找到的一些东西的组合(关于 vrrpd 的内容很少)。
似乎 vrrpd fires 告诉服务器侦听 IP,因此您不想使用 IP 启动接口。该接口确实需要有一个 IP,而不是 vrrp 将使用的 IP。
我的下一个问题是我的笔在与 vrrpd 使用的 IP 不同的 IP 上工作。我最终列出了所有 IP 上端口 80 上的所有连接的笔。如果你不这样做,那么如果笔启动并且机器不是主负载均衡器,那么笔就会死掉,因为它正在寻找的 IP 不存在。
我用笔在另一个 IP 地址上进行了设置,并假设 vrrpd 是前面的另一个负载平衡器。原来 vrrpd 只是启动 IP 并关闭它。
因此,回顾一下我最终得到的结果。
然后两台机器上的vrrpd都配置了10.3.16.58地址,两台机器上的pen都配置了0.0.0.0。
还有更多测试要做,但我一直在调试模式下运行 pen 并密切关注 /var/run/messages 文件,如果我在活动节点上重新启动 vrrpd,它会变为被动,新的活动节点开始显示流量. 时间会证明一切,但它看起来很有希望。
这里只是猜测。您可能会将其与在同一子网上有两个接口混淆。您可以尝试为管理网络创建一个单独的子网。