IPvsadm ist im WLC-Scheduler nicht gleichmäßig verteilt

IPvsadm ist im WLC-Scheduler nicht gleichmäßig verteilt

Aus irgendeinem Grund scheint ipvsadm die Verbindungen zwischen meinen realen Servern nicht gleichmäßig zu verteilen, wenn ich die WLC- oder LC-Scheduler verwende. Ein realer Server wird mit Anfragen völlig überlastet, während die anderen relativ wenige Verbindungen erhalten.

Meine ldirectord.cf-Datei sieht folgendermaßen aus:

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

Das Seltsame, was meiner Meinung nach das Problem verursachen könnte (aber ich bin mir nicht wirklich sicher), ist, dass ipvsadm aktive Verbindungen nicht richtig zu verfolgen scheint, sie erscheinen alle als inaktive Verbindungen

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

Wenn ich ipvsadm -Lncdas tue, sehe ich viele Verbindungen, aber immer nur in den Zuständen ESTABLISHED und FIN_WAIT.

Ich habe vorher ldirectord auf einem auf Gentoo basierenden Load Balancer verwendet und Activeconn war genau, seit der Umstellung auf Ubuntu 10.4 LTS scheint etwas anders zu sein.

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

Verfolgt ipvsadm aktive Verbindungen nicht richtig und führt dies dazu, dass die Lastverteilung nicht richtig funktioniert? Wenn ja, wie kann ich es wieder zum Laufen bringen?

Bearbeiten:Es wird noch merkwürdiger, wenn ich cat /proc/net/ip_vsdann sehe, dass die richtigen Activeconns da sind:

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

Antwort1

Wenn alle Server die gleiche Anzahl an Verbindungen haben, wird bei lc (least connection) immer eine neue Verbindung zum ersten Server in der Liste hergestellt. Das kann bedeuten, dass bei einer sehr geringen Auslastung und nur ab und zu einer Verbindung diese Verbindung immer zum ersten Host in der Liste geht.

Antwort2

Mein Favorit ist wrr (Weigthed Round Robin). Gehe ich recht in der Annahme, dass Sie den DR-Ansatz (Direct Routing) verwenden?

In diesem Fall erkennt ipvsadm die Verbindung nicht als solche, da die Antwort vom RS (realer Server) direkt an den Client geht – und nicht zurück über den LB.

Antwort3

Gemessen an der Anzahl Ihrer Verbindungen stellt dies für Sie vermutlich kein Problem dar, es kann jedoch zu einer ungleichmäßigen Verteilung mit der geringsten Anzahl an Verbindungen kommen, wenn einer der realen Server langsamer reagiert als die anderen. Er erhält dann pro Zeit weniger neue Verbindungen als die anderen, da sich bei ihm die Anzahl der Verbindungen schneller erhöht.

Antwort4

Davids Befehlsausgaben zeigen, dass er den Tunnelmodus (IPIP) verwendet, der im Allgemeinen als Variante von DR eingerichtet ist. Wir müssten einige Routingtabellen oder Diagramme sehen, um sein Setup besser zu verstehen.

Ich stimme jedoch zu, dass die Verbindungsverfolgung in LVS wahrscheinlich verwirrt ist, da es die TCP-FIN-Pakete nicht sieht.

ipvsadm verfügt über einige Einstellungen, um abgelaufene Verbindungen schneller abzubrechen. Beispielsweise beendet der folgende Befehl inaktive Verbindungen nach einer Stunde:

/sbin/ipvsadm --set 3600 120 300

Die Quelle der Clients sollte doppelt überprüft werden. Das Standardverhalten von LVS besteht darin, dauerhafte Verbindungen über die Client-IP herzustellen. Wenn also ein Stresstest mit wget oder ab von derselben Test-Client-IP aus durchgeführt wird, werden alle Verbindungen an denselben Realserver gesendet.

Haproxyist ein intelligenterer Lastenausgleich, muss aber im Rückpfad der Pakete sitzen, um völlig transparent zu arbeiten.

verwandte Informationen