IPvsadm no se equilibra igualmente en el programador wlc

IPvsadm no se equilibra igualmente en el programador wlc

Por alguna razón, ipvsadm no parece equilibrar igualmente las conexiones entre mis servidores reales cuando uso los programadores wlc o lc. Un servidor real se ve absolutamente abrumado por las solicitudes, mientras que los demás reciben relativamente pocas conexiones.

Mi archivo ldirectord.cf se ve así:

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

Lo extraño que creo que puede estar causando el problema (pero realmente no estoy seguro) es que ipvsadm no parece estar rastreando las conexiones activas correctamente, todas aparecen como conexiones inactivas.

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

Si lo hago ipvsadm -Lnc, veo muchas conexiones, pero solo en los estados ESTABLISHED y FIN_WAIT.

Estaba usando ldirectord anteriormente en un balanceador de carga basado en Gentoo y activeconn solía ser preciso, desde que pasé a Ubuntu 10.4 LTS algo parece ser diferente.

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

Entonces, ¿ipvsadm no rastrea correctamente las conexiones activas y, por lo tanto, hace que el equilibrio de carga funcione incorrectamente? Si es así, ¿cómo puedo hacer para que vuelva a funcionar correctamente?

Editar:Se vuelve más extraño si cat /proc/net/ip_vsparece que las conexiones activas correctas están ahí:

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

Respuesta1

Con lc (conexión mínima), si todos los servidores tienen la misma cantidad de conexiones, siempre proporcionará una nueva conexión al primer servidor de la lista. Esto puede significar que si tiene una utilización muy baja y solo tiene una conexión de vez en cuando, esa conexión siempre irá al primer host de la lista.

Respuesta2

Mi favorito es wrr (round robin ponderado). ¿Estoy en lo cierto al suponer que está utilizando el enfoque DR (enrutamiento directo)?

En ese caso, ipvsadm no ve la conexión como tal, ya que la respuesta del RS (servidor real) irá directamente al cliente, no de regreso a través del LB.

Respuesta3

A juzgar por su número de conexiones, probablemente no sea un problema para usted, pero puede obtener una distribución desigual con la menor cantidad de conexiones si uno de los servidores reales responde más lentamente que los demás, entonces recibirá menos conexiones nuevas por vez que los demás. se acumula en conexiones más rápidamente.

Respuesta4

Las salidas del comando de David indican que está usando el modo Túnel (IPIP), que generalmente se configura como una variante de DR. Necesitaríamos ver algunas tablas o diagramas de enrutamiento para comprender mejor su configuración.

Pero estoy de acuerdo en que probablemente el seguimiento de la conexión en LVS sea confuso ya que no ve los paquetes TCP FIN.

ipvsadm tiene algunas configuraciones para que las conexiones caducadas expiren más rápido. Por ejemplo, el siguiente comando expirará el tiempo de espera de las conexiones inactivas después de 1 hora:

/sbin/ipvsadm --set 3600 120 300

Se debe verificar nuevamente la fuente de los clientes. El comportamiento predeterminado de LVS es realizar conexiones persistentes por IP del cliente. Entonces, si realiza una prueba de esfuerzo con wget o ab desde la misma IP del cliente de prueba, todas las conexiones se enviarán al mismo servidor real.

HaproxyEs un equilibrador de carga más inteligente, pero necesita ubicarse en la ruta de retorno de los paquetes para poder funcionar de forma totalmente transparente.

información relacionada