真实服务器不可用了,而调度器却继续转发请求

问题:
真实服务器不可用了,而调度器却继续转发请求

环境:
我使用lvs构建了一套DR方式的web集群,使用ldirectord软件来检查真实服务器是否可用;调度算法使用lblc,ldirectord软件的配置如下:
virtual=20.77.150.119:8102
real=20.77.150.122:8102 gate
# real=20.77.150.5:8102 gate
service=http
request="/xrose/.testpage.jsp"
receive="Test Page"
scheduler=lblc
persistent=36000
netmask=255.255.255.0
protocol=tcp

当真实服务器20.77.150.119:8102出现异常时,ldirectord软件也及时发现修改了服务器的权重为0,ipvsadmin -l 结果如下:
IP Virtual Server version 1.0.10 (size=65536)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 20.77.150.119:8102 lblc persistent 36000 mask 255.255.255.0
-> 20.77.150.122:8102 Route 0 20 450

但是在真实服务器20.77.150.122上还是继续能够受到请求,虽然结果是错误的。

请问,这是由于什么原因造成的?

Forums:

估计122直接回应了对VIP的arp询问

如何可以判断。
我的真实服务器使用的redhat ad 3.0,使用的是
www.ultramonkey.org上列的方法,进行配置的。

你把LB那台机子关了,找台机子ping VIP,再用arp -an看看对应VIP的MAC地址是不是122的;如果配置正确的话应该没人回话才对

首先lblc调度算法是针对目标IP地址进行,目前主要用于Cache集群系统。详细请阅读基于局部性的最少链接(Locality-Based Least Connections Scheduling)手册。在你的例子中,请求报文的目标地址只有一个,20.77.150.119:8102,所以只会调度到一台服务器。应该考虑使用wlc或者wrr调度算法。

其次,当权值为0时,已有连接的后续报文会继续发给该服务器。

1、原来是有两台机器,只是因为其中一台出现了问题,我将它去了,所以留下了一台。
我现在是一个web的集群,要解决客户端的cookie、sessions问题,所以我选用了LBLC的调度算法。我应该使用那种调度算法合适?

2、“当权值为0是,已有的连接的后续报文会继续发给该服务器”,我该如何配置使这些后续的报文也不发给该服务器,而是改发给其它的正常服务的服务器呢?

谢谢

1、原来是有两台机器,只是因为其中一台出现了问题,我将它去了,所以留下了一台。
我现在是一个web的集群,要解决客户端的cookie、sessions问题,所以我选用了LBLC的调度算法。我应该使用那种调度算法合适?

我仔细看了算法,选用了WLC,配合persistent参数来解决该问题

2、“当权值为0是,已有的连接的后续报文会继续发给该服务器”,我该如何配置使这些后续的报文也不发给该服务器,而是改发给其它的正常服务的服务器呢?

我调整了ldirectord的配置,将参数quiescent改为No,Real sever出现异常以后,会被ldirectord程序直接将该服务器从LVS的table中删除,保证后续的报文不会被发送到该服务器。

谢谢

tim123 你好
请问你的每台真实服务器上的 WEB服务配置上的IP地址是真实IP还是VIP?,谢谢您!

randomness