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

(*-*)浩
(*-*)浩original
2019-11-26 14:08:292913parcourir

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

Vous pouvez remplacer l'ancien par le nouvel exécutable nginx 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/lors de la suppression du serveur module). (Apprentissage recommandé : Exploitation et maintenance de Nginx)

Utilisez d'abord le nouveau programme exécutable pour remplacer l'ancien (il est préférable de faire une sauvegarde), puis , envoyez le signal USR2 ( kill -USR2 pid) 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, dans séquence Démarrez un nouveau processus principal et un nouveau processus de travail :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (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 :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

Après un certain temps, l'ancien processus de travail gère tous les éléments connectés. Après avoir quitté la requête, seul le nouveau processus de travail traitera la requête entrante :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

À ce stade, car l'ancien serveur n'a pas encore fermé le socket qu'il écoute, donc, via ce qui suit Vous pouvez toujours restaurer l'ancien serveur en quelques étapes :

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

Envoyer le signal QUIT au nouveau processus principal pour lui demander d'arrêter son processus de travail en douceur

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

Si, pour une raison quelconque, le nouveau travail, le processus ne peut pas quittez, envoyez-lui le signal KILL

Après la sortie du nouveau processus principal, l'ancien processus principal supprimera le préfixe .oldbin et le restaurera dans son fichier .pid, afin que tout soit restauré dans la mise à niveau avant.

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 :

      PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
    36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
    36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
    36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
    36267 36264 nobody   0.0  1364 kqread nginx: worker process (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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn