17 Punkte von xguru 2022-01-06 | 1 Kommentare | Auf WhatsApp teilen
  • 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 QUIT senden, ihn beenden und nur den neuen Prozess übrig lassen

1 Kommentare

 
xguru 2022-01-06

Caddy 1 verwendet diese Methode ebenfalls.

Envoys Hot-Restart-Ansatz: https://envoyproxy.io/docs/envoy/…

HAProxy Seamless Reload: https://haproxy.com/blog/…