Das ideale Zielszenario
Ja, Sie sollten einen Lastenausgleich verwenden und jeweils eine Instanz aktualisieren. Ich bin nicht sicher, wo die Kommunikation zwischen Containern ankommt.
Stellen Sie sich als Beispiel einen Load Balancer vor, der Ihrer Site A dient. Benutzer stellen nur eine Verbindung zu ihr her und kennen sie nur als "A". Der Load Balancer weiß, dass es zwei oder mehr Backends gibt (B, C usw.), und es spielt keine Rolle, ob es sich um VMs oder Container handelt.
Anschließend möchten Sie die Backends aktualisieren, in diesem Fall Apache-Instanzen.
- Nehmen Sie B aus den in Frage kommenden Backends für den Load Balancer heraus, damit er keinen Datenverkehr mehr akzeptiert.
- Warten Sie, bis die aktuell aktiven Anforderungen bearbeitet und vorhandene Verbindungen geschlossen wurden.
- Aktualisieren Sie den Container oder die zugrunde liegende VM, die B bedient
- starte B neu, warte bis es geladen ist und beginne zu arbeiten
- Testen Sie B, um sicherzustellen, dass neue Anforderungen ordnungsgemäß verarbeitet werden
- Fügen Sie B wieder zum Load-Balancer-Backend-Pool hinzu, um den Datenverkehr wieder zu aktivieren
Führen Sie dann den gleichen Vorgang für C, D usw. aus.
Beachten Sie, dass es eine offene Anfrage für direkte Upgrades von Docker-Containern ab November 2013 gibt, diese jedoch anscheinend nicht sehr weit fortgeschritten ist. Daher sollten Sie die oben genannte Lösung in der Zwischenzeit durchführen.
Was ist für eine bestehende Live-Site zu tun?
Vermutlich fragen Sie dies, weil Sie bereits eine Live-Site in diesem Modell betreiben und diese ohne Ausfallzeiten aktualisieren möchten. Wir müssen also schrittweise zum oben genannten idealen Zielzustand gelangen.
Nehmen wir an, dass:
- Sie haben einen DNS-Namen, der auf Ihren Container verweist
- Ihr Container läuft auf einer IP-Adresse
- Ihre Benutzer kennen die IP-Adresse des Containers nicht und sie ist nirgendwo fest codiert
Wenn diese Annahmen falsch sind, sollten Sie sie zuerst so korrigieren, dass dies korrekt ist.
Führen Sie dann die folgenden Schritte aus:
- Erstellen Sie einen Load Balancer mit einer neuen IP und verweisen Sie ihn auf den vorhandenen Container als einziges Backend
- Ändern Sie DNS so, dass es direkt auf den Load Balancer und nicht auf die Container-IP verweist
- Fügen Sie ein identisches Apache-Backend mit demselben VM + -Container-Setup hinzu
- Jetzt verfügen Sie über einen Load Balancer mit zwei Backends B und C. Befolgen Sie daher die Anweisungen im Abschnitt "Ideales Zielszenario", um sie nacheinander zu aktualisieren
So aktualisieren Sie einen Load Balancer
Der einfache (gehostete) Weg
Am einfachsten ist es, keinen eigenen Balancer zu betreiben. Wenn Sie beispielsweise eine Cloud-Plattform verwenden, die Load Balancing als Service bereitstellt, sollten Sie die Verwendung in Betracht ziehen. Wartung und Aktualisierung des Load Balancers sind dann kein Problem.
Der manuelle Weg
Wenn Sie Ihren eigenen Lastenausgleich ausführen, kann das Hinzufügen einer weiteren Indirektionsebene (dh DNS) hilfreich sein. Nehmen wir folgendes an:
- dass wir einen Hostnamen haben, der in die IP unseres Load Balancers A aufgelöst wird, den wir aktualisieren möchten
- Unser Load Balancer verfügt über einen Backend-Pool mit P1, P2 usw.
Wir gehen wie folgt vor:
und du bist fertig.
Details, Diagramme und Werkzeuge
Sehen Sie sich diese Artikel und Tools an, mit denen Sie den Prozess automatisieren können, aber die allgemeine Idee ist dieselbe:
Die Moral
"Alle Probleme in der Informatik können durch eine andere Indirektionsebene gelöst werden, mit Ausnahme natürlich des Problems zu vieler Indirektionen." - David Wheeler