我有两个运行BusyBox的虚拟机(在ESX下)。 这些机器仅用作负载平衡器。
我正在使用笔来执行负载平衡在每台机器上工作正常。 但是,当我启动vrrpd平的作品,但没有别的。
每个负载均衡器有3个接口。 pipe理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,没有问题。我可以连接到pipe理IP 10.3.16.94和10.3.16.96没有问题。 当我连接到10.3.16.58超时。 / var / run / messages文件中不显示任何内容,只有一个是主,另一个不是。
有没有人有任何想法,为什么vrrpd是不是推动ping以外的stream量? 我有三个这样的设置。 一个在pop3上,一个在smtp上,一个在http上。 他们没有任何工作,但平。
这里是来自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并提供输出吗? 我的猜测是笔会绑定到eth2 IP,而不是所有的地址。 它应该被configuration为0.0.0.0,这样它会拿起箱子拥有的任何地址,或者你是vrrpd masterscript应该运行,使笔绑定到你的VIP。 可能发生的事情是,masterscript必须启动pen本身已经configuration,期望VIP绑定到你的eth2接口。
现在用netstat输出编辑:好,所以这里是问题:LBCO102A tcp 0 0 10.3.16.84:80 0.0.0.0:* LISTEN
10.3.16.84:80意味着你只在端口80上绑定到10.3.16.84,因此即使服务器有VIP,它也不会监听端口80的10.3.16.58。
再一次,我不是所有熟悉的笔,但假设传递的第一个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
不过,我怀疑这样做是否会如此,因为程序启动时,虚拟机将不会有该IP地址,所以笔将无法显式绑定到它。 我试图看看vrrpd的文档,我不确定是否可以这样做,但freevrrp有一个masterscript选项,它将基本上运行一个脚本,当它接pipe一个VIP。 因此,您只需简单地添加启动笔的命令作为masterscript的一部分,所以当该框取得VIP的所有权时,它将启动笔并将其绑定到VIP IP地址。
好的,我想我现在已经有了一切工作。 这是我从@Kevin得到的东西的组合,以及我在网上find的一些东西(关于vrrpd的东西很less)。
看来,vrrpd火灾告诉服务器听IP,所以你不想启动与IP的接口。 该接口需要有一个IP,而不是vrrp将要使用的IP。
我的下一个问题是,我正在使用与vrrpd不同的IP进行工作。 我最终在所有IP上列出了端口80上所有连接的笔。 如果你不这样做,那么如果笔启动,机器不是主负载平衡器,那么笔会死,因为它所寻找的IP不存在。
我用它在另一个IP地址上监听,并假定vrrpd是另一个负载均衡器。 原来,vrrpd只是启动IP并closures它。
因此,总结一下这件事。
LBCO102A 10.3.16.96 - eth0 (Management IP) 10.3.16.148 - eth1 LBCO102B 10.3.16.94 - eth0 (Management IP) 10.3.16.149 - eth1
然后两台机器上的vrrpd都configuration了10.3.16.58地址,两台机器上的penconfiguration了0.0.0.0。
还有更多的testing要做,但我一直在debugging模式下运行笔,并密切关注/ var / run / messages文件,如果在主动节点上重新启动vrrpd,它将变为被动模式,新的主动节点将开始显示stream量。 时间会告诉,但它看起来很有希望。
这里只是一个猜测。 在同一个子网上有两个接口可能会让你感到困惑。 您可以尝试为pipe理networking创build一个单独的子网。