IPvsadm 在 wlc 调度程序上的平衡不均衡

dav*_*ley 5 linux ldirectord lvs ubuntu-10.04

出于某种原因,当使用 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
Run Code Online (Sandbox Code Playgroud)

我认为可能导致问题的奇怪事情(但我真的不确定)是 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
Run Code Online (Sandbox Code Playgroud)

如果我这样做,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)
Run Code Online (Sandbox Code Playgroud)

那么,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
Run Code Online (Sandbox Code Playgroud)

phe*_*mer 1

使用 lc(最少连接),如果所有服务器具有相同数量的连接,那么它将始终向列表中的第一个服务器提供新连接。这可能意味着,如果您的利用率非常低,并且偶尔只有一个连接,则该连接将始终转到列表中的第一个主机。