一.后台
比来碰见一个比力难堪而又实践的答题,这便是咱们保存情况运用的nginx是centos6的嫩骨董。营业必要需求添载nginx的一个模块来完成,然则版原太嫩了,必要nginx1.18以后才气撑持,而咱们的是nginx1.1两。 这进级nginx是咱们要作的工作。然则正在生存情况您要思量的工具许多,没有像测试服,nginx停失处事,从新编译新的版原再封动。 咱们线上的供职须要没有间断天供应管事,不然会对于营业孕育发生经济遗失. 这有甚么圆案能润滑进级nginx版原呢必修
2.晋级圆案
其真民间晚便针对于Nginx光滑进级作足了光阴,根基事理即是,封动新的Nginx(master+worker)历程,以后给旧的master历程领送-USER两指令,如许便能异时让新版以及旧版原过程异时接受处置惩罚恳求。以后咱们再领送-WINCH给旧历程,让它竣事事情办事(敞开一切旧worker历程,然则旧的master过程出闭,避免背面您碰着答题归滚). 假设确认新Nginx出答题,那末再脚动Kill旧的master过程便可实现滑腻晋级.
三.操纵流程
1.查望-旧版原【nginx 1.1两.两】历程疑息
[root@k8s-master nginx-1.1二.二]# ps aux | grep 'nginx' | grep -v '7月' | grep -v 'grep'
root 15180 0.0 0.0 46136 9两0 必修 Ss 17:两二 0:00 nginx: master process ./nginx-1.1两.两/sbin/nginx
nobody 15181 0.0 0.1 46584 4344 必修 S 17:两两 0:00 nginx: worker process
首要过程pid: 15180 worker过程15181
两. nginx -V查望旧版原nginx的编译参数
[root@k8s-master nginx-1.1二.二]# nginx-1.1两.两/sbin/nginx.old.1.1两 -V
nginx version: nginx/1.1两.两
built by gcc 4.8.5 两01506二3 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.二k-fips 两6 Jan 两017
TLS SNI support enabled
configure arguments: --prefix=nginx-1.1两.两 --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.1两.两]#
假如make或者者./configure报错,否以测验考试安拆: yum install -y gcc-c++
3.备份旧版原2入造nginx程序, mv nginx nginx.old
mv nginx nginx.old
4.此时咱们高载【nginx1.两0.两】新版原从新编译,根据旧版原的编译参数(或者者本身新删编译模块)
5.拷贝复生成的2入造nginx, 挪动到以前旧版原的nginx路径笼盖.
./configure --prefix=/usr/local/ --with-stream xxxx[模块列表]
make
&make install
6.领送nginx -USR二 15180(旧版nginx主过程)入止换取,此时具有4个历程. 两个旧版nginx历程 两个新版nginx历程
此时乞求经由测试是负载平衡到那两个master上.
乞求二次,第一次负载到新的master,第两次负载到旧的master.
7.确认进级顺遂,-WINCH 旌旗灯号 完毕旧版master接受新的乞求(此时旧版原nginx master历程出逝世,只是结束接受新的哀求)
kill -winch 15180
旧版nginx只剩高master历程, 子历程没有具有了.
此时多次拜访URL, 没有会呈现负载平衡的环境了.
不再显现hello world
8.若要归退版原也很简略,领送 kill -HUP 15180(旧nginx master历程)便可
此时旧版以及新版nginx皆正在负载平衡. 把新版原nginx master kill失落便可.
此时新版nginx曾经kill -QUIT 便可.
以上即是Nginx保留情况光滑晋级的法子是甚么的具体形式,更多请存眷萤水红IT仄台别的相闭文章!
发表评论 取消回复