Sticky Sessions für Ihren Application Load Balancer - Elastic Load Balancing

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Sticky Sessions für Ihren Application Load Balancer

Standardmäßig leitet ein Application Load Balancer jede Anforderung getrennt an ein registriertes Ziel weiter, basierend auf dem ausgewählten Load-Balancing-Algorithmus. Sie können jedoch das Feature „Sticky Session“ (auch als gebundene Sitzungen bezeichnet) verwenden, damit der Load Balancer die Sitzung eines Benutzers an ein bestimmtes Ziel binden kann. So wird sichergestellt, dass alle Anforderungen, die während der Sitzung vom Benutzer gesendet werden, an dasselbe Ziel weitergeleitet werden. Dieses Feature ist nützlich für Server, die Zustandsinformationen verwalten, um Clients eine kontinuierliche Erfahrung zu bieten. Um Sticky Sessions zu verwenden, muss der Client Cookies unterstützen.

Application Load Balancer unterstützen sowohl dauerbasierte Cookies als auch anwendungsbasierte Cookies. Sticky Sessions werden auf Ebene der Zielgruppe aktiviert. Sie können für Ihre Zielgruppen eine Kombination aus auf Dauer basierenden Sticky Sessions, anwendungsbasierten Sticky Sessions und keine Sticky Sessions verwenden.

Bei der Verwaltung von Sticky Sessions ist es besonders wichtig festzulegen, wie lange der Load Balancer die Anforderung des Benutzers an das gleiche Ziel leiten soll. Wenn Ihre Anwendung über ein eigenes Sitzungscookie verfügt, können Sie anwendungsbasierte Sticky Session verwenden. Das Sitzungscookie der Load-Balancer-Sitzung hält dann die durch das Sitzungscookie der Anwendung festgelegte Dauer ein. Wenn Ihre Anwendung kein eigenes Sitzungscookie hat, können Sie auf Dauer basierende Sticky Sessions verwenden, um ein Load-Balancer-Sitzungscookie mit einer von Ihnen angegebenen Dauer zu generieren.

Der Inhalt der von Load Balancern generierten Cookies wird mit einem rotierenden Schlüssel verschlüsselt. Sie können von Load Balancern generierte Cookies nicht entschlüsseln oder ändern.

Bei beiden Stickiness-Typen setzt der Application Load Balancer den Ablauf der von ihm generierten Cookies nach jeder Anforderung zurück. Wenn ein Cookie abläuft, ist die Sitzung keine Sticky Session mehr und der Client sollte das Cookie aus seinem Cookiespeicher entfernen.

Voraussetzungen
  • Ein HTTP/HTTPS-Load Balancer.

  • Mindestens eine funktionierende Instance in jeder Availability Zone.

Überlegungen
  • Sticky Sessions werden nicht unterstützt, wenn zonenübergreifendes Load Balancing deaktiviert ist. Der Versuch, Sticky Sessions zu aktivieren, während zonenübergreifendes Load Balancing deaktiviert ist, scheitert.

  • Bei anwendungsbasierten Cookies müssen die Namen der Cookies für jede Zielgruppe einzeln angegeben werden. Bei dauerbasierten Cookies ist AWSALB jedoch der einzige Name, der für alle Zielgruppen verwendet wird.

  • Wenn Sie mehrere Ebenen von Application Load Balancern nutzen, können Sie mit anwendungsbasierten Cookies Sticky Sessions auf allen Ebenen aktivieren. Mit dauerbasierten Cookies können Sie Sticky Sessions jedoch nur auf einer Ebene aktivieren, weil AWSALB der einzige verfügbare Name ist.

  • Wenn der Application Load Balancer AWSALBCORS sowohl ein als auch ein AWSALB dauerbasiertes Stickiness-Cookie empfängt, hat der Wert in AWSALBCORS Vorrang.

  • Anwendungsbasierte Sticky Sessions funktionieren nicht bei gewichteten Zielgruppen.

  • Wenn Sie über eine Weiterleitungsregel mit mehreren Zielgruppen verfügen und für mindestens eine Sticky Sessions aktiviert sind, müssen Sie die Stickiness der Zielgruppe aktivieren.

  • WebSocket Verbindungen sind von Natur aus klebrig. Wenn der Client ein Verbindungs-Upgrade für anfordert WebSockets, ist das in der Verbindung verwendete Ziel das Ziel, das einen HTTP-101-Statuscode zurückgibt, um das WebSockets Verbindungs-Upgrade zu akzeptieren. Nach Abschluss des WebSockets Upgrades wird die auf Cookies basierende Stickiness nicht mehr verwendet.

  • Application Load Balancer verwenden das Expires-Attribut im Cookie-Header anstelle des Max-Age-Attributs.

  • Application Load Balancer unterstützen keine Cookie-Werte, die URL-codiert sind.

Sticky Sessions auf Basis der Dauer

Bei auf Dauer basierenden Sticky Sessions werden Anforderungen mithilfe eines vom Load Balancer generierten Cookies (AWSALB) an dasselbe Ziel in einer Zielgruppe weitergeleitet. Das Cookie wird verwendet, um die Sitzung dem Ziel zuzuordnen. Wenn Ihre Anwendung kein eigenes Sitzungscookie hat, können Sie Ihre eigene Dauer der Sticky Sessions angeben und festlegen, wie lange Ihr Load Balancer die Anforderung des Benutzers konsistent an dasselbe Ziel weiterleiten soll.

Wenn ein Load Balancer eine Anforderung von einem Client erhält, leitet er die Anforderung (basierend auf der Grundlage des ausgewählten Algorithmus) an ein Ziel weiter und generiert ein Cookie namens AWSALB. Er codiert Informationen über das ausgewählte Ziel, verschlüsselt das Cookie und schließt das Cookie in die Antwort an den Client ein. Das vom Load Balancer generierte Cookie hat eine eigene Dauer der Gültigkeit von 7 Tagen. Dieses Ablaufdatum ist nicht konfigurierbar.

Bei nachfolgenden Anforderungen sollte der Client das AWSALB-Cookie enthalten. Wenn der Load Balancer eine Anforderung von einem Client erhält, die das Cookie enthält, erkennt er es und leitet die Anforderung an dasselbe Ziel weiter. Wenn das Cookie vorhanden ist, aber nicht entschlüsselt werden kann, oder wenn es sich auf ein Ziel bezieht, das abgemeldet wurde oder fehlerhaft ist, wählt der Load Balancer ein neues Ziel aus und aktualisiert das Cookie mit Informationen zum neuen Ziel.

Für CORS-Anfragen (Cross-Origin Resource Sharing) müssen einige Browser Stickiness aktivieren. SameSite=None; Secure Um diese Browser zu unterstützen, generiert der Load Balancer immer ein zweites Stickiness-CookieAWSALBCORS, das dieselben Informationen wie das ursprüngliche Stickiness-Cookie sowie das Attribut enthält. SameSite Kunden erhalten beide Cookies, auch Anfragen, die nicht von CORS stammen.

So aktivieren Sie auf Dauer basierende Sticky Sessions mithilfe der Konsole
  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie im Navigationsbereich unter Load Balancing die Option Target Groups (Zielgruppen) aus.

  3. Wählen Sie den Namen der Zielgruppe aus, um deren Detailseite zu öffnen.

  4. Wählen Sie auf der Registerkarte Gruppendetails im Abschnitt Attribute die Option Bearbeiten aus.

  5. Führen Sie auf der Seite Edit attributes die folgenden Schritte aus:

    1. Wählen Sie Stickiness aus.

    2. Wählen Sie für den Stickiness-Typ die Option Vom Load Balancer generiertes Cookie aus.

    3. Geben Sie im Feld Stickiness duration(Erhaltungsdauer) einen Wert zwischen 1 Sekunde und 7 Tagen aus.

    4. Wählen Sie Änderungen speichern aus.

Um die dauerabhängige Klebrigkeit zu aktivieren, verwenden Sie AWS CLI

Verwenden Sie den modify-target-group-attributesBefehl mit den Attributen undstickiness.enabled. stickiness.lb_cookie.duration_seconds

Verwenden Sie den folgenden Befehl, um auf Dauer basierende Sticky Sessions zu aktivieren.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.lb_cookie.duration_seconds,Value=time-in-seconds

Die Ausgabe sollte in etwa wie folgt aussehen.

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.lb_cookie.duration_seconds", "Value": "86500" }, ... ] }

Anwendungsbasierte Sticky Sessions

Anwendungsbasierte Sticky Sessions geben Ihnen die Flexibilität, Ihre eigenen Kriterien für die Client-Ziel-Stickiness festzulegen. Wenn Sie die anwendungsbasierte Stickiness aktivieren, leitet der Load Balancer die erste Anforderung auf der Grundlage des ausgewählten Algorithmus an ein Ziel innerhalb der Zielgruppe weiter. Es wird erwartet, dass das Ziel ein benutzerdefiniertes Anwendungscookie setzt, das dem im Load Balancer konfigurierten Cookie entspricht, um Stickiness zu aktivieren. Dieses benutzerdefinierte Cookie kann jedes Cookie-Attribut enthalten, das von der Anwendung benötigt wird.

Wenn der Application Load Balancer das benutzerdefinierte Anwendungscookie vom Ziel empfängt, generiert er automatisch ein neues verschlüsseltes Anwendungscookie zum Erfassen von Stickiness-Informationen. Dieses vom Load Balancer generierte Anwendungscookie erfasst Stickiness-Informationen für jede Zielgruppe, für die anwendungsbasierte Sticky Sessions aktiviert sind.

Das vom Load Balancer generierte Anwendungscookie kopiert nicht die Attribute des vom Ziel gesetzten benutzerdefinierten Cookies. Es hat eine eigene Dauer der Gültigkeit von 7 Tagen. Dieses Ablaufdatum ist nicht konfigurierbar. In der Antwort an den Client validiert der Application Load Balancer nur den Namen, mit dem das benutzerdefinierte Cookie auf Zielgruppenebene konfiguriert wurde, und nicht den Wert oder das Ablaufattribut des benutzerdefinierten Cookies. Solange der Name übereinstimmt, sendet der Load Balancer in der Antwort beide Cookies an den Client: das vom Ziel gesetzte benutzerdefinierte Cookie und das vom Load Balancer generierte Anwendungscookie.

Bei nachfolgenden Anforderungen müssen die Clients beide Cookies zurücksenden, um die Stickiness aufrechtzuerhalten. Der Load Balancer entschlüsselt das Anwendungscookie und prüft, ob die konfigurierte Dauer der Stickiness noch gültig ist. Anschließend werden die im Cookie enthaltenen Informationen verwendet, um die Anforderung an dasselbe Ziel innerhalb der Zielgruppe zu senden, um die Stickiness aufrechtzuerhalten. Der Load Balancer leitet das benutzerdefinierte Anwendungscookie auch über einen Proxy an das Ziel weiter, ohne es zu überprüfen oder zu ändern. In nachfolgenden Antworten werden der Ablauf des vom Load Balancer generierten Anwendungs-Cookies und die im Load Balancer konfigurierte Dauer der Stickiness zurückgesetzt. Um die Stickiness zwischen Client und Target aufrechtzuerhalten, sollten das Cookie und die Dauer der Stickiness nicht ablaufen.

Wenn ein Ziel ausfällt oder fehlerhaft ist, leitet der Load Balancer keine Anforderungen mehr an dieses Ziel weiter und wählt basierend auf dem ausgewählten Load Balancing-Algorithmus ein neues fehlerfreies Ziel aus. Der Load Balancer behandelt die Sitzung jetzt als dem neuen fehlerfreien Ziel „angeheftet“ und leitet Anforderungen auch dann an dieses neue fehlerfreie Ziel, wenn das fehlerhafte Ziel wieder funktionsfähig ist.

Bei CORS-Anforderungen (Cross-Origin Resource Sharing) fügt der Load Balancer die SameSite=None; Secure-Attribute nur dann dem vom Load Balancer generierten Anwendungs-Cookie hinzu, um Stickiness zu aktivieren, wenn die Benutzeragent-Version Chromium80 oder höher ist.

Da für die meisten Browser in Bezug auf Cookies eine Größenbeschränkung von 4 KB gilt, unterteilt der Load Balancer Anwendungs-Cookie, die größer als 4 KB sind, in mehrere Cookies. Application Load Balancer unterstützen Cookies mit einer Größe von bis zu 16 KB und können daher bis zu 4 Shards erstellen, die an den Client gesendet werden. Der Name des Anwendungscookies, den der Client sieht, beginnt mit „AWSALBAPP-“ und enthält eine Fragmentnummer. Wenn die Größe des Cookies beispielsweise 0-4K ist, sieht der Client AWSALBAPP -0. Wenn die Größe des Cookies 4—8 KB beträgt, sieht der Client AWSALBAPP -0 und AWSALBAPP -1 und so weiter.

So aktivieren Sie anwendungsbasierte Sticky Sessions mithilfe der Konsole
  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie im Navigationsbereich unter Load Balancing die Option Target Groups (Zielgruppen) aus.

  3. Wählen Sie den Namen der Zielgruppe aus, um deren Detailseite zu öffnen.

  4. Wählen Sie auf der Registerkarte Gruppendetails im Abschnitt Attribute die Option Bearbeiten aus.

  5. Führen Sie auf der Seite Edit attributes die folgenden Schritte aus:

    1. Wählen Sie Stickiness aus.

    2. Wählen Sie für den Stickiness-Typ die Option Anwendungsbasiertes Cookie aus.

    3. Geben Sie im Feld Stickiness duration(Erhaltungsdauer) einen Wert zwischen 1 Sekunde und 7 Tagen aus.

    4. Geben Sie unter App-Cookie-Name einen Namen für Ihr anwendungsbasiertes Cookie ein.

      Verwenden Sie nicht AWSALB, AWSALBAPP oder AWSALBTG für den Cookie-Namen. Sie sind für die Verwendung durch den Load Balancer reserviert.

    5. Wählen Sie Änderungen speichern aus.

Um anwendungsbasierte Klebrigkeit zu aktivieren, verwenden Sie AWS CLI

Verwenden Sie den modify-target-group-attributesBefehl mit den folgenden Attributen:

  • stickiness.enabled

  • stickiness.type

  • stickiness.app_cookie.cookie_name

  • stickiness.app_cookie.duration_seconds

Verwenden Sie den folgenden Befehl, um anwendungsbasierte Sticky Sessions zu aktivieren.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.type,Value=app_cookie Key=stickiness.app_cookie.cookie_name,Value=my-cookie-name Key=stickiness.app_cookie.duration_seconds,Value=time-in-seconds

Die Ausgabe sollte in etwa wie folgt aussehen.

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.app_cookie.cookie_name", "Value": "MyCookie" }, { "Key": "stickiness.type", "Value": "app_cookie" }, { "Key": "stickiness.app_cookie.duration_seconds", "Value": "86500" }, ... ] }
Manuelle Neuverteilung

Wenn beim Hochskalieren die Anzahl der Ziele erheblich zunimmt, besteht die Gefahr einer ungleichmäßigen Lastverteilung aufgrund von Stickiness. In diesem Szenario können Sie die Last mithilfe der folgenden zwei Optionen neu auf Ihre Ziele verteilen:

  • Legen Sie für das von der Anwendung generierte Cookie ein Ablaufdatum fest, das vor dem aktuellen Datum und der aktuellen Uhrzeit liegt. Dadurch wird verhindert, dass Clients das Cookie an den Application Load Balancer senden, der den Prozess der Herstellung von Stickiness neu startet.

  • Legen Sie für die Konfiguration der anwendungsbasierten Stickiness des Load Balancers eine sehr kurze Dauer fest, z. B. 1 Sekunde. Dadurch wird der Application Load Balancer gezwungen, die Stickiness wiederherzustellen, auch wenn das vom Ziel gesetzte Cookie nicht abgelaufen ist.