Upgrade einer ausführbaren Datei zur Laufzeit
(nginx.org)- Von Nginx verwendetes Upgrade-Verfahren
→ Die ausführbare Datei des Originals durch eine neue ersetzen
→ Das Signal USR2 an den Master-Prozess senden
→ Der Master-Prozess benennt die Datei mit seiner eigenen Prozess-ID in die Erweiterung .oldbin um
→ Die neue ausführbare Datei starten, damit sie neue Worker-Prozesse erstellt
→ Alle Worker-Prozesse beginnen, Requests anzunehmen
→ Wenn das Signal WINCH an den ersten Master-Prozess gesendet wird, weist er seine Worker-Prozesse an, sich regulär zu beenden
-
Der bestehende Master-Prozess schließt den Listen-Socket nicht und kann bei Bedarf erneut Worker-Prozesse erzeugen
-
Falls der neue Master-Prozess nicht korrekt funktioniert
→ Dem bestehenden Master-Prozess das Signal HUP senden, damit er neue Worker-Prozesse startet; nachdem die Worker des neuen Masters beendet wurden, QUIT an den neuen Master senden und ihn beenden
→ Dem neuen Master-Prozess das Signal TERM senden, damit seine aktuellen Worker-Prozesse sofort zum Abbruch aufgefordert werden. Wenn der neue Master stirbt, startet der bestehende Master neue Worker-Prozesse
-
Wenn der neue Master-Prozess so beendet wird, entfernt der bestehende Master-Prozess die Erweiterung
.oldbin -
Wenn das Upgrade erfolgreich ist, dem bestehenden Master-Prozess das Signal
QUITsenden, ihn beenden und nur den neuen Prozess übrig lassen
1 Kommentare
Caddy 1 verwendet diese Methode ebenfalls.
Envoys Hot-Restart-Ansatz: https://envoyproxy.io/docs/envoy/…
HAProxy Seamless Reload: https://haproxy.com/blog/…