IPvsadm não equilibra igualmente no agendador wlc

IPvsadm não equilibra igualmente no agendador wlc

Por alguma razão, o ipvsadm não parece equilibrar igualmente as conexões entre meus servidores reais ao usar os agendadores wlc ou lc. Um servidor real fica absolutamente sobrecarregado com solicitações, enquanto os outros recebem relativamente poucas conexões.

Meu arquivo ldirectord.cf se parece com isto:

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

A coisa estranha que acho que pode estar causando o problema (mas não tenho certeza) é que o ipvsadm não parece estar rastreando as conexões ativas corretamente, todas elas aparecem como conexões inativas

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

Se eu fizer ipvsadm -Lncisso, verei muitas conexões, mas apenas nos estados ESTABLISHED & FIN_WAIT.

Eu estava usando o ldirectord anteriormente em um balanceador de carga baseado no Gentoo e o activeconn costumava ser preciso, já que na mudança para o Ubuntu 10.4 LTS algo parece estar diferente.

# ipvsadm -v
ipvsadm v1.25 2008/5/15 (compiled with popt and IPVS v1.2.1)

Então, o ipvsadm não está rastreando as conexões ativas corretamente e, portanto, fazendo com que o balanceamento de carga funcione incorretamente? Em caso afirmativo, como faço para que ele funcione corretamente novamente?

Editar:Fica mais estranho, se eu cat /proc/net/ip_vsparecer que os activeconns corretos estão lá:

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

Responder1

Com lc (menos conexão), se todos os servidores tiverem o mesmo número de conexões, sempre fornecerá uma nova conexão para o primeiro servidor da lista. Isso pode significar que se você tiver uma utilização muito baixa e apenas uma conexão de vez em quando, essa conexão sempre irá para o primeiro host da lista.

Responder2

Meu favorito é wrr (round robin ponderado). Estou certo ao presumir que você está usando a abordagem DR (roteamento direto)?

Nesse caso o ipvsadm não vê a conexão como tal, pois a resposta do RS (servidor real) irá diretamente para o cliente - e não de volta pelo LB.

Responder3

A julgar pelo seu número de conexões, provavelmente não é um problema para você, mas você pode obter uma distribuição desigual com menos conexões se um dos servidores reais responder mais lentamente do que os outros, ele receberá menos conexões novas por vez do que os outros como ele acumula conexões mais rapidamente.

Responder4

As saídas de comando de David indicam que ele está usando o modo túnel (IPIP), que geralmente é configurado como uma variante do DR. Precisaríamos ver algumas tabelas ou diagramas de roteamento para entender melhor sua configuração.

Mas concordo que provavelmente o rastreamento de conexão no LVS está confuso, pois não vê os pacotes TCP FIN.

ipvsadm tem algumas configurações para atingir o tempo limite das conexões expiradas mais rapidamente. Por exemplo, o comando a seguir atingirá o tempo limite das conexões inativas após 1 hora:

/sbin/ipvsadm --set 3600 120 300

A origem dos clientes deve ser verificada novamente. O comportamento padrão do LVS é fazer conexões persistentes por IP do cliente. Portanto, se o teste de estresse com wget ou ab for do mesmo IP do cliente de teste, todas as conexões serão enviadas para o mesmo servidor real.

Haproxyé um balanceador de carga mais inteligente, mas precisa ficar no caminho de retorno dos pacotes para funcionar de forma totalmente transparente.

informação relacionada