我遇到了一个奇怪的错误,并用尽了方法来解决它。
我已经设置了3个虚拟机:LVS,RS1和RS2。 RS1和RS2运行一个简单的PHP网站。 RS2是RS1的精确副本,只更改了IP地址。 所有的机器都连接到本地networking( 1.1.1.0/24 )。 这是我的ipvsadmconfiguration:
echo "1" > /proc/sys/net/ipv4/ip_forward echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects echo "0" > /proc/sys/net/ipv4/conf/default/send_redirects echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects LVS_IP=192.168.1.180 RS1_IP=1.1.1.2 RS2_IP=1.1.1.3 ipvsadm -A -t $LVS_IP:www -s rr ipvsadm -a -t $RS1_IP:www -r $RS1_IP:www -m -w 1 ipvsadm -a -t $RS2_IP:www -r $RS2_IP:www -m -w 2
运行links 1.1.1.2和links 1.1.1.3显示相同的积极结果 – 我的网页的内容。
然而,运行links 192.168.1.180 (LVS的外部IP)给了我适当的结果…但是只有隔一段时间(50%的请求)。 看来,当LVS轮询RS2的请求时,没有任何反应。 ( links说“build立连接…”,然后没有任何反应)。
我如何尝试debugging这样的问题?
你可以在你可信的tcpdump的帮助下进行debugging。 首先捕获真正的服务器上有问题的数据包,如果没有什么明显的错误,将它与工作的realserver上的等效捕获进行比较。 在某些时候,他们会看起来不同,因为行为是不同的; 有什么不同会在正确的方向非常强烈地指向你。 数据包不会对真正的服务器? 负载均衡器上的防火墙问题。 数据包不会退出真实服务器? 可能是传出的防火墙问题,或者realserver的networking服务器与其他人不能很好地玩。