Maison  >  Article  >  Opération et maintenance  >  Comment mettre à niveau en douceur l'exploitation et la maintenance de Nginx

Comment mettre à niveau en douceur l'exploitation et la maintenance de Nginx

王林
王林avant
2023-05-15 17:34:061376parcourir

Vous pouvez remplacer l'ancien exécutable nginx par le nouveau sans interrompre le service - les nouvelles requêtes ne seront pas perdues (lors de la mise à niveau vers une nouvelle version ou de l'ajout/suppression de modules serveur). (Apprentissage recommandé : fonctionnement et maintenance de nginx)

Tout d'abord, utilisez le nouveau programme exécutable pour remplacer l'ancien (il est préférable de faire une sauvegarde), puis envoyez le signal USR2 (kill-USR2pid) au processus principal.

Le processus principal renommera son fichier .pid en .oldbin (par exemple : /usr/local/nginx/logs/nginx.pid.oldbin), puis exécutera le nouveau programme exécutable et démarrera le nouveau processus principal et le nouveau travail en séquence. Processus :

PIDPPIDUSER%CPUVSZWCHANCOMMAND

​331261root0.01164pausenginx:masterprocess/usr/local/nginx/sbin/nginx

​3313433126nobody0.01368kqreadnginx:workerprocess(nginx)

​3313533126nobody0.01380kqreadnginx:workerprocess(nginx)

​3313633126nobody0.01368kqreadnginx:workerprocess(nginx)

​3626433126root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx

​3626536264nobody0.01364kqreadnginx:workerprocess(nginx)

​3626636264nobody0.01364kqreadnginx:workerprocess(nginx)

​3626736264nobody0.01364kqreadnginx:workerprocess(nginx)

À ce stade, deux instances nginx s'exécuteront en même temps et traiteront les demandes entrantes ensemble. Pour supprimer progressivement l'ancienne instance, vous devez envoyer le signal WINCH à l'ancien processus maître, puis ses processus de travail commenceront à s'arrêter progressivement :

PIDPPIDUSER%CPUVSZWCHANCOMMAND

​331261root0.01164pausenginx:masterprocess/usr/local/nginx/sbin/nginx

3313533126personne0,01380kqreadnginx:le processus de travail s'arrête (nginx)

​3626433126root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx

​3626536264nobody0.01364kqreadnginx:workerprocess(nginx)

​3626636264nobody0.01364kqreadnginx:workerprocess(nginx)

​3626736264nobody0.01364kqreadnginx:workerprocess(nginx)

Après un certain temps, l'ancien processus de travail traite toutes les requêtes connectées puis se termine, ne laissant que le nouveau processus de travail pour gérer les requêtes entrantes :

PIDPPIDUSER%CPUVSZWCHANCOMMAND

​331261root0.01164pausenginx:masterprocess/usr/local/nginx/sbin/nginx

​3626433126root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx

​3626536264nobody0.01364kqreadnginx:workerprocess(nginx)

3626636264nobody0.01364kqreadnginx:workerprocess(nginx)

​3626736264nobody0.01364kqreadnginx:workerprocess(nginx)

A ce stade, comme l'ancien serveur n'a pas encore fermé le socket sur lequel il écoute, vous pouvez toujours restaurer l'ancien serveur en suivant les étapes suivantes :

Envoyez le signal HUP à l'ancien processus maître - il démarrera son processus de travail sans recharger le fichier de configuration

Envoyez le signal QUIT au nouveau processus principal, lui demandant d'arrêter calmement son processus de travail

Envoyez le signal TERM au nouveau processus principal pour le forcer à quitter

Si le nouveau processus de travail ne peut pas se terminer pour une raison quelconque, envoyez-lui un signal KILL

Une fois le nouveau processus principal terminé, l'ancien processus principal supprimera le préfixe .oldbin et le restaurera dans son fichier .pid. De cette façon, tout sera restauré à ce qu'il était avant la mise à niveau.

Si la tentative de mise à niveau réussit et que vous souhaitez conserver le nouveau serveur, envoyez un signal QUIT à l'ancien processus principal pour quitter et laisser uniquement le nouveau serveur en cours d'exécution :

PIDPPIDUSER%CPUVSZWCHANCOMMAND

​362641root0.01148pausenginx:masterprocess/usr/local/nginx/sbin/nginx

​3626536264nobody0.01364kqreadnginx:workerprocess(nginx)

​3626636264nobody0.01364kqreadnginx:workerprocess(nginx)

​3626736264nobody0.01364kqreadnginx:workerprocess(nginx)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer