So führen Sie in 1 Minute ein reibungsloses Upgrade und Rollback der Nginx-Version durch

So führen Sie in 1 Minute ein reibungsloses Upgrade und Rollback der Nginx-Version durch

Lassen Sie uns heute über eine Situation sprechen, die in der tatsächlichen Produktionsumgebung eines Unternehmens häufig auftritt: das Upgrade von Nginx auf eine neue Version und das Zurücksetzen auf die alte Version.

1. Umgebung Einführung

Die beiden heute vorbereiteten Nginx-Versionen sind wie folgt:

[root@nginx ~]# cd /download/nginx/
[root@nginx nginx]# ll
gesamt 1952
-rw-r--r-- 1 root root 981687 17. Oktober 2017 nginx-1.12.2.tar.gz
-rw-r--r-- 1 root root 1015384 4. Dez. 09:58 nginx-1.14.2.tar.gz

2. Kompilieren und installieren Sie die alte und neue Version

Kompilieren und installieren Sie nginx-1.12.2

[root@nginx nginx]# tar zxf nginx-1.12.2.tar.gz 
[root@nginx nginx]# cd nginx-1.12.2
[root@nginx nginx-1.12.2]# ./configure --prefix=/usr/local/nginx-1.12.2
[root@nginx nginx-1.12.2]# echo $?
0
[root@nginx nginx-1.12.2]# make && make install
[root@nginx nginx-1.12.2]# echo $?
0
[root@nginx nginx-1.12.2]# ll /usr/local/nginx-1.12.2/
gesamt 0
drwxr-xr-x 2 root root 333 1. März 09:01 conf
drwxr-xr-x 2 root root 40 1. März 09:01 html
drwxr-xr-x 2 root root 6 1. März 09:01 Protokolle
drwxr-xr-x 2 root root 19 Mär 1 09:01 sbin

Kompilieren und installieren Sie nginx-1.14.2

[root@nginx ~]# cd /download/nginx/
[root@nginx nginx]# tar zxf nginx-1.14.2.tar.gz 
[root@nginx nginx]# cd nginx-1.14.2
[root@nginx nginx-1.14.2]# ./configure --prefix=/usr/local/nginx-1.14.2
[root@nginx nginx-1.14.2]# echo $?
0
[root@nginx nginx-1.14.2]# make && make install
[root@nginx nginx-1.14.2]# echo $?
0
[root@nginx nginx-1.14.2]# ls -l /usr/local/nginx-1.14.2/
gesamt 0
drwxr-xr-x 2 root root 333 1. März 09:03 conf
drwxr-xr-x 2 root root 40 1. März 09:03 html
drwxr-xr-x 2 root root 6 1. März 09:03 Protokolle
drwxr-xr-x 2 root root 19 Mär 1 09:03 sbin

Zu diesem Zeitpunkt wurden zwei Versionen der Nginx-Software bereitgestellt.

3. Starten Sie die alte Version von nginx

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -t
nginx: die Syntax der Konfigurationsdatei /usr/local/nginx-1.12.2/conf/nginx.conf ist in Ordnung
nginx: Test der Konfigurationsdatei /usr/local/nginx-1.12.2/conf/nginx.conf ist erfolgreich
[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx
[root@nginx ~]# ps -ef|grep nginx
root 6324 1 0 09:06 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
niemand 6325 6324 0 09:06 ? 00:00:00 nginx: Arbeitsprozess
root 6327 1244 0 09:06 Punkte/0 00:00:00 grep --color=auto nginx
[root@nginx ~]# lsof -i :80
BEFEHL PID BENUTZER FD TYP GERÄTEGRÖSSE/AUS KNOTENNAME
nginx 6324 root 6u IPv4 26324 0t0 TCP *:http (HÖREN)
nginx 6325 niemand 6u IPv4 26324 0t0 TCP *:http (HÖREN)

4. Upgrade auf die neueste Version

Bei einem Versionsupgrade handelt es sich eigentlich um ein Upgrade für Binärdateien. Der Vorgang läuft wie folgt ab:

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v
Nginx-Version: nginx/1.12.2
[root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/
[root@nginx sbin]# mv nginx nginx-1.12.2
#Sichern Sie zuerst die ursprüngliche alte Version der Nginx-Binärdatei [root@nginx sbin]# cp /usr/local/nginx-1.14.2/sbin/nginx ./
#Kopieren Sie die neue Version der Binärdatei in das aktuelle Verzeichnis

Führen Sie als Nächstes einen reibungslosen Upgrade-Vorgang durch

[root@nginx ~]# ps -ef|grep nginx
root 6324 1 0 09:06 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
niemand 6325 6324 0 09:06 ? 00:00:00 nginx: Arbeitsprozess
root 6338 1244 0 09:11 Punkte/0 00:00:00 grep --color=auto nginx
[root@nginx ~]# kill -USR2 6324
[root@nginx ~]# ps -ef|grep nginx
root 6324 1 0 09:06 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
niemand 6325 6324 0 09:06 ? 00:00:00 nginx: Arbeitsprozess
root 6340 6324 0 09:12 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
niemand 6341 6340 0 09:12 ? 00:00:00 nginx: Arbeitsprozess
root 6343 1244 0 09:12 pts/0 00:00:00 grep --color=auto nginx

Zu diesem Zeitpunkt wurde der neue Masterprozess normal gestartet, aber der alte Arbeitsprozess existiert noch. Daher verwenden wir den folgenden Befehl, um dem alten Arbeitsprozess zu signalisieren, dass er reibungslos gestoppt werden soll:

[root@nginx ~]# kill -WINCH 6324
[root@nginx ~]# ps -ef|grep nginx
root 6324 1 0 09:06 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
root 6340 6324 0 09:12 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
niemand 6341 6340 0 09:12 ? 00:00:00 nginx: Arbeitsprozess
root 6346 1244 0 09:14 pts/0 00:00:00 grep --color=auto nginx

An diesem Punkt wurde der alte Worker-Prozess gestoppt. Als nächstes testen wir, ob er normal aufgerufen werden kann:

Der Zugriff ist normal möglich. Tatsächlich ist dieses reibungslose Upgrade für die zugreifenden Benutzer völlig unbemerkt, sodass die Hot-Bereitstellung von Nginx abgeschlossen ist.

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v
Nginx-Version: nginx/1.14.2

Überprüfen Sie die Version. Es handelt sich um die neuste Version. Das Upgrade ist abgeschlossen.

Hinweis: Wenn nach Abschluss des Versions-Upgrades keine Probleme auftreten und Sie den alten Master-Prozess beenden müssen, können Sie den folgenden Befehl verwenden:

töten -QUIT old_master_PID

5. Versions-Rollback

Der schwierigste Teil des Upgrades ist nicht das Upgrade, sondern das Rollback, da in der tatsächlichen Produktionsumgebung die Möglichkeit eines Rollbacks besteht. Beispielsweise ist die neue Version aufgrund unbekannter Fehler nicht mit der vorhandenen Anwendung kompatibel oder der Betrieb wird instabil usw.

Daher ist für Betriebs- und Wartungsingenieure die Fehlerbehebung der entscheidende Punkt.

In den obigen Ergebnissen können wir auch sehen, dass der alte Masterprozess immer existiert. Er wird nicht von selbst heruntergefahren, es sei denn, er wird manuell heruntergefahren. Dieses Design ist vorteilhaft. Der Vorteil besteht darin, dass nach dem Upgrade auf die neue Version bei Problemen zeitnah und schnell auf die vorherige stabile Version zurückgesetzt werden kann.

[root@nginx ~]# ps -ef|grep nginx
root 6324 1 0 09:06 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
root 6340 6324 0 09:12 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
niemand 6341 6340 0 09:12 ? 00:00:00 nginx: Arbeitsprozess
root 6350 1244 0 09:23 Punkte/0 00:00:00 grep --color=auto nginx
[root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/
[root@nginx sbin]# mv nginx nginx-1.14.2
[root@nginx sbin]# mv nginx-1.12.2 nginx
[root@nginx sbin]# kill -USR1 6324
[root@nginx sbin]# ps -ef|grep nginx
root 6324 1 0 09:06 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
root 6340 6324 0 09:12 ? 00:00:00 nginx: Masterprozess /usr/local/nginx-1.12.2/sbin/nginx
niemand 6341 6340 0 09:12 ? 00:00:00 nginx: Arbeitsprozess
root 6355 1244 0 09:24 pts/0 00:00:00 grep --color=auto nginx
[root@nginx sbin]# ./nginx -v
Nginx-Version: nginx/1.12.2

Aus den obigen Ergebnissen können wir erkennen, dass die vorherige Version problemlos zurückgesetzt wurde. Als Nächstes testen wir, ob normal darauf zugegriffen werden kann:

Der normale Zugriff ist weiterhin möglich, so dass auch der Rollback-Vorgang für den Benutzer nicht wahrnehmbar ist.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispiel für das Upgrade von nginx zur Unterstützung von HTTP2.0
  • Detaillierte Erläuterung der Lösung zum reibungslosen Upgrade der Nginx-Version
  • So aktualisieren Sie Nginx zur Unterstützung von http2
  • Einige Vorschläge zur Verbesserung der Nginx-Leistung
  • Installation des Nginx-Dienstes und Software-Upgrade

<<:  Detaillierte Erläuterung des Beobachtermodus ausgehend von der Komponentenwertübertragung von Vue

>>:  Beispiel für die Verwendung von CASE WHEN beim Sortieren in MySQL

Artikel empfehlen

So ändern Sie das Root-Passwort von MySQL in Docker

Der erste Schritt besteht darin, einen MySQL-Cont...

$nextTick-Erklärung, die Sie auf einen Blick verstehen

Inhaltsverzeichnis 1. Funktionsbeschreibung 2. Üb...

Vue implementiert den Anwesenheitskalender von DingTalk

In diesem Artikel wird der spezifische Code von V...

Zusammenfassung des Speicherorts und Tipps für Docker-Konfigurationscontainer

Tipps zur Verwendung von Docker 1. Bereinigen Sie...

HTML-Tutorial: Sortierte Listen

<br />Originaltext: http://andymao.com/andy/...

Erste Schritte mit dem Animieren von SVG-Pfadstrichen mit CSS3

Ohne auf JavaScript angewiesen zu sein, wird rein...

So versuchen Sie, Ihrem CSS einen Sticky-Effekt hinzuzufügen

Vorne geschrieben Ich weiß nicht, wer als Erster ...

Node-Skript realisiert automatische Anmelde- und Lotteriefunktion

Inhaltsverzeichnis 1. Einleitung 2. Vorbereitung ...

MYSQL Eine Frage zur Verwendung von Zeichenfunktionen zum Filtern von Daten

Problembeschreibung: Struktur: test hat zwei Feld...

So leiten Sie eine URL mit Nginx Rewrite um

Ich muss in letzter Zeit bei der Arbeit oft die N...

Vergleich der Vorteile von vue3 und vue2

Inhaltsverzeichnis Vorteil 1: Optimierung des Dif...

Beispielcode zur Implementierung eines Foto-Stacking-Effekts mit CSS

Ergebnisse erzielen Schritt 1. Ursprüngliche inde...

Detaillierte Erklärung des CSS-Pseudoelements::marker

Dieser Artikel stellt ein interessantes Pseudoele...

N Möglichkeiten, adaptive Teiler geschickt mit CSS zu implementieren

Trennlinien sind eine gängige Gestaltungsart auf ...