出于某种原因,在使用wlc或lc调度程序时,ipvsadm似乎不能平衡我的真实服务器之间的连接.一个真实的服务器完全受到请求的打击,而其他服务器接收的连接相对较少.
我的ldirectord.cf文件如下所示:
quiescent = yes autoreload = yes checktimeout = 10 checkinterval = 10 # *.example.com http virtual = 192.0.2.111:http real = 10.10.10.1:http ipip 10 real = 10.10.10.2:http ipip 10 real = 10.10.10.3:http ipip 10 real = 10.10.10.4:http ipip 10 real = 10.10.10.5:http ipip 10 scheduler = lc protocol = tcp service = http checktype = negotiate request = "/lb" receive = "Up and running" virtualhost = "site.com" fallback = 127.0.0.1:http
我认为可能导致问题的奇怪之处(但我真的不确定)是ipvsadm似乎没有正确跟踪活动连接,它们都显示为非活动连接
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.0.2.111:http lc -> 10.10.10.1:http Tunnel 10 0 10 -> 10.10.10.2:http Tunnel 10 0 18 -> 10.10.10.3:http Tunnel 10 0 3 -> 10.10.10.4:http Tunnel 10 0 10 -> 10.10.10.5:http Tunnel 10 0 5
如果我做ipvsadm -Lnc然后我看到很多连接,但只有ESTABLISHED& FIN_WAIT说明.
我以前在基于Gentoo的负载均衡器上使用ldirectord,而activeconn曾经是准确的,因为转移到Ubuntu 10.4 LTS似乎有所不同.
# ipvsadm -v ipvsadm v1.25 2008/5/15 (compiled with popt and IPVS v1.2.1)
那么,ipvsadm是不是正确跟踪活动连接,从而使负载平衡工作不正确,如果是这样,我该如何让它再次正常工作?
编辑:它变得更奇怪,如果我cat / proc / net / ip_vs然后它看起来像正确的activeconns:
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP C000026F:0050 rr -> 0AB42453:0050 Tunnel 10 1 24 -> 0AB4321D:0050 Tunnel 10 0 23 -> 0AB426B2:0050 Tunnel 10 2 25 -> 0AB4244C:0050 Tunnel 10 2 22 -> 0AB42024:0050 Tunnel 10 2 23
解决方法
如果所有服务器具有相同数量的连接,则使用lc(最少连接),它将始终为列表中的第一个服务器提供新连接.这可能意味着如果您的利用率非常低,并且偶尔只有一个连接,那么该连接将始终转到列表中的第一个主机.