我遇到了一个奇怪的错误并且没有办法解决它。
我设置了 3 台虚拟机:LVS、RS1 和 RS2。RS1 和 RS2 运行一个简单的 php 网站。RS2 是 RS1 的精确副本,仅更改了 IP 地址。所有机器都连接到本地网络 ( 1.1.1.0/24
)。这是我的ipvsadm
配置:
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
显示“正在建立连接……”然后什么也没发生)。
我该如何尝试调试此类问题?
答案1
您可以在可信赖的 的帮助下进行调试tcpdump
。首先在出现问题的 realserver 上捕获数据包,如果没有立即发现明显错误,则将其与正常工作的 realserver 上的等效捕获进行比较。在某些时候,它们看起来会有所不同,因为行为不同;什么不同会非常有力地指引你正确的方向。数据包无法到达 realserver?负载均衡器上的防火墙问题。数据包无法从 realserver 返回?可能是传出防火墙问题,或者 realserver 的 web 服务器与其他服务器无法很好地协作。