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
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.
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
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]#
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
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
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
La demande a été testée en ce moment La charge est équilibrée sur ces deux maîtres
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
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
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)
. 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!