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

Detaillierte Erklärung der API in Vue.js, die leicht zu übersehen ist

Inhaltsverzeichnis nächstesTick Syntaxvereinfachu...

MySQL-Inspektionsskript (unbedingt lesen)

Wie unten dargestellt: #!/usr/bin/env python3.5 p...

So starten/stoppen Sie den Tomcat-Server in Java

1. Projektstruktur 2. Rufen Sie Tomcat.java auf P...

So zeigen Sie im Hintergrund laufende Programme in Linux an und schließen sie

1. Führen Sie die .sh-Datei aus Sie können es dir...

Beispielcode und Methode zum Speichern von Arrays in MySQL

Beim Schreiben gespeicherter Prozeduren werden hä...

So installieren Sie schnell eine Tensorflow-Umgebung in Docker

Installieren Sie schnell die Tensorflow-Umgebung ...

Fallstricke bei der neueren Version des IDEA2021 Tomcat10-Servlets

Da die Version, die ich beim Lernen verwendet hab...

So dockerisieren Sie eine Python-Django-Anwendung

Docker ist ein Open-Source-Projekt, das Entwickle...

Allgemeine Überlegungen zum Erstellen eines Hadoop 3.2.0-Clusters

Ein Port ändert sich In Version 3.2.0 beträgt der...