有时候我们需要对Nginx版本进行升级以满足运维人员对其功能的需求,例如添加xxx模块,需要xxx功能,而此时Nginx又在跑着业务无法停掉,这时我们就只能平滑升级了。
平滑升级原理Nginx服务接收到USR2信号后,将Nginx.pid文件添加.oldbin变成nginx.pid.oldbin文件;然后执行新版本Nginx服务器的二进制文件启动服务,如果新的服务启动成功,系统中将有新旧两个Nginx主进程共同提供Web服务,之后,需要向旧的Nginx服务进程发送WINCH信号,使旧的Nginx服务平滑停止,并删除Nginx.pid.oldbin文件。
Nginx信号简介 1.主进程支持的信号 2.TERM, INT: 立刻退出 3.QUIT: 等待工作进程结束后再退出 4.KILL: 强制终止进程 5.HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。 6.USR1: 重新打开日志文件 7.USR2: 启动新的主进程,实现热升级 8.WINCH: 逐步关闭工作进程 9.工作进程支持的信号 10.TERM, INT: 立刻退出 11.QUIT: 等待请求处理结束后再退出 12.USR1: 重新打开日志文件 进行平滑升级 1.当前环境 System : CentOS-7.5 Nginx :1.12.02.查看当前版本并下载新版本Nginx
/usr/local/nginx/sbin/nginx -v # nginx version: nginx/1.12.0 wget -c http://nginx.org/download/nginx-1.16.0.tar.gz # 下载的版本为nginx-1.16.03.开始平滑升级
tar -xzf nginx-1.16.0.tar.gz # 解压源码包 cd nginx-1.16.0 ./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-http_ssl_module # 进入源码包内执行预编译 预编译结果如上图所示,即可执行编译。。。 make # 执行编译,切记不要安装也就是不要去执行 make install 对Nginx执行文件进行更新 cd /usr/local/nginx/sbin # 进入nginx的执行文件目录内 mv nginx nginx.old # 将旧版本Nignx执行文件备份为nginx.old cp /root/nginx-1.16.0/objs/nginx . # 将新版本Nginx执行文件移动到当前目录内 进行平滑重启 /usr/local/nginx/sbin/nginx -t # 检测新版本Nginx是否正常 正常为 successful ps -ef|grep nginx # 查看旧版本nginx进程 kill -USR2 4428 # 向主进程发送USR2信号,Nginx会启动一个新版本的master进程和工作进程,和旧版一起处理请求 此时再次查看Nginx进程就发现有俩Nginx在工作 kill -WITCH 4428 # 向原Nginx主进程发送WINCH信号,它会逐步关闭旗下的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理 kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` # 杀死旧版本Nginx主进程或者 kill -9 2248 也可以 /usr/local/nginx/sbin/nginx -v # ouput:nginx version: nginx/1.16.0 Nginx平滑升级结束文章原文地址:https://www.113p.cn/287.html
113资讯网 段师傅 本人性格开朗、稳重、有活力,待人热情、真诚,工作认真负责,积极主动,能吃苦耐劳,用于承受压力,勇于创新,有很强的组织能力和团队协作精神,具有较强的适应能力,纪律性强,工作积极配合,意志坚强,具有较强的无私奉献精神。