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

JavaScript zum Erreichen eines einfachen Seiten-Countdowns

In diesem Artikelbeispiel wird der spezifische Ja...

Tutorial zum Importieren und Exportieren von Docker-Containern

Hintergrund Die Popularität von Docker hängt eng ...

Was tun, wenn der von Docker Run gestartete Container hängt und Daten verliert?

Szenariobeschreibung In einem bestimmten System w...

Warum DOCTYPE HTML verwenden?

Sie wissen, dass der Browser ohne diese Option bei...

So schreiben Sie HTML-Header in der Webentwicklung für mobile Geräte

Code kopieren Der Code lautet wie folgt: <Kopf...

InnoDB-Typ MySql stellt Tabellenstruktur und Daten wieder her

Voraussetzung: Speichern Sie die .frm- und .ibd-D...

Tutorial zur Installation von VMware Workstation 14 Pro unter Ubuntu 16.04

In diesem Artikel wird die spezifische Methode zu...

Detaillierte Erläuterung der Nginx-Rewrite-Jump-Anwendungsszenarien

Anwendungsszenario 1: Domänennamenbasierte Umleit...

Webdesigner sollten Webseiten unter drei Aspekten optimieren

<br />Mit der zunehmenden Bandbreite werden ...

Unterschied zwischen varchar- und char-Typen in MySQL

Inhaltsverzeichnis vorgenannt VARCHAR-Typ VARCHAR...