Warum leitet Elastic Load Balancing meinen Load Balancer-Verkehr ungleichmäßig weiter?

Lesedauer: 6 Minute
0

Ich habe meinen Load Balancer so konfiguriert, dass der Verkehr gleichmäßig zwischen Instances oder zwischen Availability Zones weitergeleitet wird. Elastic Load Balancing (ELB) leitet jedoch mehr Traffic an eine Instance oder Availability Zone weiter als an die anderen. Warum passiert das und wie kann ich es beheben?

Kurzbeschreibung

ELB leitet den Traffic möglicherweise ungleichmäßig an Ihre Ziele weiter, wenn:

  • Clients leiten Anfragen an eine falsche IP-Adresse eines Load Balancer-Knotens mit einem DNS-Eintrag weiter, dessen TTL abgelaufen ist.
  • Sticky Sessions (Sitzungsaffinität) sind für den Load Balancer aktiviert. Sticky Sessions verwenden Cookies, um dem Client zu helfen, über die gesamte Lebensdauer eines Cookies eine Verbindung zu derselben Instance aufrechtzuerhalten, was im Laufe der Zeit zu Ungleichgewichten führen kann.
  • Verfügbare intakte Instances sind nicht gleichmäßig auf die Availability Zones verteilt.
  • Instances eines bestimmten Kapazitätstyps sind nicht gleichmäßig auf die Availability Zones verteilt.
  • Es gibt langlebige TCP-Verbindungen zwischen Clients und Instances.
  • Die Verbindung verwendet einen WebSocket.

Behebung

Bestätigen Sie das Verkehrsungleichgewicht

Analysieren Sie die ELB-Zugriffsprotokolle, falls verfügbar, um das Verkehrsungleichgewicht zu bestätigen. Verwenden Sie Befehlszeilentools, um die Anzahl der Anfragen zu ermitteln, die vom Load Balancer an bestimmte Anwendungen weitergeleitet werden.

Für Application Load Balancers:

awk '{print $5}' *.log | awk -F ":" '{print $1}' | sort | uniq -c | sort -r

Für klassische Load Balancer:

awk '{print $4}' *.log | awk -F ":" '{print $1}' | sort | uniq -c | sort -r

ELB fügt Ihrem Bucket einzelne Dateien für jeden ELB-Knoten hinzu. Sie können die Anzahl der Zeilen in Ihren Zugriffsprotokolldateien über einen bestimmten Zeitraum vergleichen.

Leeren Sie den DNS-Cache

Das Routing, das auf veralteten DNS-Einträgen basiert, führt zu einem unausgewogenen RequestCount-Muster in verschiedenen Availability Zones. Weitere Informationen finden Sie unter Application Load Balancer-Metriken oder Classic Load Balancer-Metriken. Leeren Sie den DNS-Cache Ihres Clients, um sicherzustellen, dass er aktuelle DNS-Einträge für Load Balancer-Knoten verwendet.

Hinweis: Wenn der zonenübergreifende Load Balancing aktiviert ist, kann der Load Balancer Anfragen auf Instanzebene immer noch gleichmäßig verteilen.

Führen Sie für Linux-Clients, die nscd für DNS-Caching verwenden, einen der folgenden Befehle aus:

sudo /etc/init.d/nscd restart
# service nscd restart
# service nscd reload

Führen Sie für Linux-Clients, die dnsmasq für DNS-Caching verwenden, einen der folgenden Befehle aus:

$ sudo /etc/init.d/dnsmasq restart
# service dnsmasq restart

Führen Sie für Linux-Clients, die BIND für DNS-Caching verwenden, einen der folgenden Befehle aus:

# /etc/init.d/named restart
# rndc restart
# rndc exec

Führen Sie für Windows-Clients den folgenden Befehl aus:

ipconfig /flushdns

Hinweis: Wenn Sie den DNS-Cache Ihres Clients geleert haben, aber immer noch Caching-Probleme auftreten, stellen Sie sicher, dass Ihre Client-Anwendung keine DNS-Einträge zwischenspeichert.

Überprüfe die Konfiguration von Sticky Sessions

Wenn Sie die dauerabhängige Sitzungsbindung verwenden, konfigurieren Sie eine angemessene Ablaufzeit für Cookies für Ihren speziellen Anwendungsfall. Weitere Informationen finden Sie unter:

Wenn Sie die Sitzungsbeständigkeit für einzelne Anwendungen festlegen, verwenden Sie nach Möglichkeit Sitzungscookies anstelle von dauerhaften Cookies. Weitere Informationen finden Sie unter Anwendungsgesteuerte Sitzungsstabilität (Classic Load Balancers).

Überprüfen Sie die einwandfreie Instanzverteilung über die Availability Zones

Wenn in Ihren Availability Zones eine ungleiche Anzahl verfügbarer intakter Instances vorhanden ist und der zonenübergreifende Load Balancing deaktiviert ist, muss ELB Anfragen auf weniger Instances in den betroffenen Availability Zones verteilen. Die verbleibenden intakten Instances verarbeiten zur Kompensation eine höhere Anzahl von Anfragen, was sich negativ auf die Leistung auswirken kann.

Hinweis: Ein Ungleichgewicht der Verkehrslast zwischen Instances oder Availability Zones bedeutet nicht unbedingt, dass auch die Ressourcennutzung unausgewogen ist. Ein Ungleichgewicht kann beispielsweise auftreten, wenn eine oder mehrere Instances, die hinter einem Load Balancer stehen, Anfragen schneller verarbeiten als die anderen.

Sorgen Sie für die gleiche Anzahl von Instances in jeder aktivierten Availability Zone. Informationen zum Hinzufügen weiterer Instances als Load Balancer-Ziele finden Sie unter:

Für klassische Load Balancer und Network Load Balancer sollten Sie erwägen, den zonenübergreifenden Load Balancing zu aktivieren, um Anfragen auf Instanzebene statt auf Availability Zone-Ebene zu verteilen. Weitere Informationen finden Sie unter Zonenübergreifendes Load Balancing (Network Load Balancers) oder Zonenübergreifendes Load Balancing für Ihren Classic Load Balancer konfigurieren. Der zonenübergreifende Load Balancing ist für Application Load Balancers immer aktiviert.

Überprüfen Sie die Verteilung der Instanztypen

Ein Classic Load Balancer mit HTTP- oder HTTPS-Listenern leitet möglicherweise mehr Traffic an Instance-Typen mit höherer Kapazität weiter. Mit dieser Verteilung soll verhindert werden, dass Instance-Typen mit geringerer Kapazität zu viele ausstehende Anfragen haben. Weitere Informationen finden Sie unter Instanztypen. Es hat sich bewährt, ähnliche Instanztypen und Konfigurationen zu verwenden, um die Wahrscheinlichkeit von Kapazitätslücken und Verkehrsungleichgewichten zu verringern.

Ein Ungleichgewicht im Datenverkehr kann auch auftreten, wenn Sie Instances mit ähnlichen Kapazitäten auf verschiedenen Amazon Machine Images (AMIs) ausführen. In diesem Szenario ist ein Ungleichgewicht des Datenverkehrs zugunsten von Instance-Typen mit höherer Kapazität wünschenswert.

Suchen Sie nach langlebigen TCP-Verbindungen

Elastic Load Balancing leitet TCP-Verkehr mithilfe eines Round-Robin-Algorithmus weiter. Langlebige TCP-Verbindungen zwischen Clients und Instances führen von Natur aus zu einer ungleichmäßigen Verteilung der Verkehrslast. Infolgedessen dauert es länger, bis neue Instances das Verbindungsgleichgewicht erreichen. Achten Sie darauf, Ihre Metriken auf langlebige TCP-Verbindungen zu überprüfen, die Probleme verursachen könnten. Beachten Sie auch, dass bei TCP-Listenern der Load Balancer den Verkehr nur auf der Verbindungsebene verteilt. Dies bedeutet beispielsweise, dass Clients, die häufig Verbindungen zum Senden und Empfangen mehrerer HTTP-Anfragen wiederverwenden, auf Instanzebene zu unausgewogenem Traffic führen können. Erwägen Sie die Umstellung auf einen Layer-7-Load Balancer, wenn Ihre Anwendung Netzwerkprotokolle auf höherer Ebene wie HTTP, HTTPS, WebSocket oder HTTP2 unterstützt.

Überprüfen Sie die RequestCount-Muster Ihres Load Balancers und andere relevante Metriken. Weitere Informationen finden Sie unter:

Suchen Sie nach WebSocket-Verbindungen

Clients, die Load Balancer mit WebSocket-Verbindungen verwenden, verwenden eine 1:1 -Verbindung zwischen dem Client und dem Ziel. Diese Verbindung bleibt während der Dauer der WebSocket-Verbindung am Ziel hängen, was zu einer ungleichen Verkehrsverteilung führt. Application Load Balancer bieten native Unterstützung für WebSockets. Nur neue HTTP-Anfragen, die auf WebSockets aktualisiert wurden, werden an die neuen Ziele weitergeleitet. WebSockets funktionieren auch mit Classic Load Balancers und Network Load Balancers mit Layer-4-Listener.

Weitere Informationen finden Sie unter Listener-Konfiguration.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren