Nehmen Sie einen Server ordnungsgemäß aus Azure Load Balancer heraus (Drain Stop)

7

Wir haben eine Anwendung auf Azure IaaS-VMs bereitgestellt, die von IIS bereitgestellt wird. Um Updates zu installieren, müssen wir jeden Computer einzeln aus dem Load Balancer entfernen. Vor dem Wechsel zu Azure haben wir Microsoft NLB verwendet, das die Funktion hat, einen Knoten zu stoppen - indem keine neuen Verbindungen gesendet werden, sondern die vorhandenen Verbindungen offen bleiben, bis sie abgeschlossen sind. Wie können wir mit Azure LB dasselbe erreichen?

nulldotzero
quelle

Antworten:

13

Die empfohlene Methode hierfür besteht darin, eine benutzerdefinierte Integritätssonde in Ihrem Lastausgleichssatz zu haben. Beispielsweise könnten Sie auf jeder Ihrer VMs eine einfache Seite healthcheck.html haben (z. B. in wwwroot) und den Test von Ihrem Lastausgleichssatz auf diese Seite leiten. Solange der Test diese Seite abrufen kann (HTTP 200), sendet der Azure-Lastenausgleich weiterhin Benutzeranforderungen an die VM.

Wenn Sie eine VM aktualisieren müssen, können Sie die Datei healthcheck.html einfach in einen anderen Namen wie _healthcheck.html umbenennen . Dies führt dazu, dass der Test HTTP 404-Fehler empfängt und diesen Computer aus der Lastausgleichsrotation entfernt, da er kein HTTP 200 erhält. Bestehende Verbindungen werden weiterhin bedient, aber die Azure LB sendet keine neuen Anforderungen mehr an die VM.

Benennen Sie _healthcheck.html nach Abschluss Ihrer Updates auf der VM wieder in healthcheck.html um . Der Azure LB-Test erhält HTTP 200-Antworten und sendet daher erneut Anforderungen an diese VM.

Wiederholen Sie diesen Vorgang für jede VM im Lastausgleichssatz.

Rick Rainey
quelle
Danke @Rick, ich habe das implementiert und es funktioniert wie erwartet!
Nulldotzero
Rick - Ich habe noch nie eine "benutzerdefinierte Gesundheitssonde" eingerichtet. Würden Sie sagen, dass dies der beste Artikel ist, dem Sie folgen können? blogs.msdn.com/b/piyushranjan/archive/2014/01/09/…
aron
Es wird von Ihrer Anwendung abhängen. Jede Anwendung hat unterschiedliche Abhängigkeiten von anderen Ressourcen (Datenbanken, Caches, Webdienste usw.). Dies ist ein sehr schöner Beitrag, um Ihnen den Einstieg zu erleichtern.
Rick Rainey
1
@larry Silverman ist dies eine bestehende TCP-Verbindung oder eine neue? Denken Sie daran, dass die slb vorhandene TCP-Verbindungen nicht schließt. Wenn also ein Client verbunden war, bevor er weiterhin mit der jetzt ungesunden Instanz verbunden wurde. Der beste Weg, dies zu wiederholen, besteht darin, in Powershell von einem externen Computer aus zu laufen, während ($ true) {iwr <URL, die mit der Instanz verbunden ist>; start-sleep - Sekunden 10}, jetzt gehen Sie und markieren Sie die Instanz, Sie werden feststellen, dass oben ps anfangen würde zu scheitern und die Protokollierung mit Show-Anfrage es zur Down-Instanz geschafft hat, da die Sitzung andauerte. Wiederholen Sie das gleiche iwr mit -disablekeepalive
Anirudh Goel
1
Ich bin hier gestolpert, als ich nach einer Antwort auf diese Frage gesucht habe, also High Five! Es scheint am besten zu sein, wenn der Anwendungscode dieses Herunterfahren erkennt und das Schließen von TCP-Verbindungen durch Hinzufügen des Headers "Verbindung: Schließen" beginnt. Dies entspricht dem Entleeren von TCP- Verbindungen. Außerdem untersuche ich diese Option serverfault.com/a/284199 / 83705 hält Sie auf dem Laufenden , wie es aussieht.
Anirudh Goel
1

In der Dokumentation empfiehlt Microsoft die Verwendung einer Sicherheitsgruppe, um die Integritätsprüfung explizit zu blockieren. Alle Azure Load Balancer- Integritätsprüfungen werden ab 168.63.129.16 geliefert .

Ein Beispiel wäre die Verwendung einer eingehenden NSG-Regel, um 168.63.129.16 für das Ziel der VM-Netzwerkkarte zu verweigern, die Sie aus dem Pool entfernen möchten.

Jeff Miles
quelle