Maison > Opération et maintenance > Nginx > le corps du texte

Quelle est la méthode pour une mise à niveau fluide de l'environnement de production Nginx ?

WBOY
Libérer: 2023-05-13 17:58:06
avant
1374 Les gens l'ont consulté

1. Contexte

J'ai récemment rencontré un problème plutôt embarrassant et pratique, c'est-à-dire que le Nginx utilisé dans notre environnement de production est une antiquité de Centos6. Les exigences métier doivent être mises en œuvre en chargeant un module de Nginx, mais la version est trop ancienne et nécessite Nginx1.18 ou version ultérieure pour la prendre en charge, et la nôtre est Nginx1.12. Ensuite, mettre à niveau Nginx est ce que nous devons faire. Mais dans l’environnement de production, vous devez prendre en compte de nombreux éléments. Contrairement au serveur de test, Nginx arrête le service, recompile la nouvelle version, puis la redémarre. Nos services en ligne doivent être fournis sans interruption, sinon cela entraînera des pertes économiques pour l'entreprise. Alors, quelles solutions existe-t-il pour mettre à niveau en douceur la version de Nginx

2. Plan de mise à niveau

En fait, le responsable a déjà fait assez pour le ? mise à niveau en douceur de Nginx Le principe de base est de démarrer un nouveau processus Nginx (maître + travailleur), puis d'envoyer la commande -USER2 à l'ancien processus maître, afin que les nouvelles et anciennes versions du processus puissent recevoir des demandes de traitement en même temps temps. Après cela, nous envoyons -WINCH à l'ancien processus pour arrêter le service en fonctionnement (fermons tous les anciens processus de travail, mais l'ancien processus maître n'est pas fermé pour vous éviter de rencontrer des problèmes plus tard si vous confirmez qu'il n'y a pas de problème avec le). nouveau Nginx, puis tuez manuellement l'ancien processus maître pour terminer la mise à niveau en douceur.

Processus de fonctionnement

1 Afficher - ancienne version [nginx 1.12.2] informations sur le processus

[root@k8s-master nginx-1.12.2]# ps aux | grep 'nginx' | grep -v '7月' | grep -v 'grep'

root     15180  0.0  0.0  46136   920 ?        Ss   17:22   0:00 nginx: master process ./nginx-1.12.2/sbin/nginx

nobody   15181  0.0  0.1  46584  4344 ?        S    17:22   0:00 nginx: worker process
Copier après la connexion

Pid du processus principal : 15180 processus de travail. 15181

2 . nginx -V Afficher les paramètres de compilation de l'ancienne version de nginx

[root@k8s-master nginx-1.12.2]# nginx-1.12.2/sbin/nginx.old.1.12 -V

nginx version: nginx/1.12.2

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

built with OpenSSL 1.0.2k-fips  26 Jan 2017

TLS SNI support enabled

configure arguments: --prefix=nginx-1.12.2 --with-pcre=/root/nginx-test/pcre-8.45/ --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-stream

[root@k8s-master nginx-1.12.2]#
Copier après la connexion

Si make ou ./configure signale une erreur, vous pouvez essayer d'installer : yum install -y gcc-c++

3. Sauvegardez l'ancienne version du programme binaire nginx, mv nginx nginx.old

mv nginx nginx.old
Copier après la connexion

4 A ce moment, nous téléchargeons la nouvelle version de [nginx1.20.2] et la recompilons selon les paramètres de compilation de l'ancienne version (ou. ajoutez un nouveau module de compilation par vous-même)

5. Copiez le binaire nginx nouvellement généré et déplacez-le vers l'ancienne version précédente de la couverture du chemin nginx.

./configure --prefix=/usr/local/ --with-stream  xxxx[模块列表]

make

&make install
Copier après la connexion

6. Envoyez nginx -USR2 15180 (ancien processus principal nginx) pour le remplacer. il y a 4 processus en ce moment. 2 anciens processus nginx 2 nouveaux processus nginx

Quelle est la méthode pour une mise à niveau fluide de lenvironnement de production Nginx ?

La demande a été testée en ce moment La charge est équilibrée sur ces deux maîtres

Quelle est la méthode pour une mise à niveau fluide de lenvironnement de production Nginx ?

La demande est faite deux fois, la première. le chargement est vers le nouveau maître, et le deuxième chargement est vers l'ancien maître.

7. Confirmez que la mise à niveau est réussie, le signal -WINCH arrête l'ancienne version. Le maître reçoit de nouvelles requêtes (l'ancienne version du processus maître nginx ne l'est pas). mort pour le moment, mais cesse simplement de recevoir de nouvelles requêtes)

kill -winch 15180
Copier après la connexion

Quelle est la méthode pour une mise à niveau fluide de lenvironnement de production Nginx ?

L'ancienne version de nginx n'a plus que le processus maître et le processus enfant n'existe plus.

Visites multiples à ce moment URL, l'équilibrage de charge sera n'apparaîtra plus

Quelle est la méthode pour une mise à niveau fluide de lenvironnement de production Nginx ?

Bonjour tout le monde n'apparaîtra plus

8 Il est également très simple de restaurer la version, envoyez simplement kill -HUP 15180 (ancien processus maître nginx)

Quelle est la méthode pour une mise à niveau fluide de lenvironnement de production Nginx ?

Quelle est la méthode pour une mise à niveau fluide de lenvironnement de production Nginx ?

. Pour le moment, l'ancienne version et la nouvelle version de nginx sont en équilibrage de charge. Tuez simplement la nouvelle version de nginx master.

À ce moment, la nouvelle version de nginx a été supprimée -QUIT.

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal