Nginx无论是运维、开发、测试,都是日常工作中需要掌握的知识点。之前写过很多关于Nginx的文章:Nginx服务介绍及安装Nginx服务配置文件介绍Nginx配置虚拟主机Nginx反向代理负载均衡配置Nginx+Tomcat多实例及负载均衡配置HTTP服务器Nginx服务介绍续Nginx优化配置Nginx+keepalived高可用配置实战ApacheVSNginx,你选对了吗?基于Nginx的HTTPS性能优化实践Nginx能做什么?看完这篇文章你就明白了!深度总结|深入浅出Nginx终极指南:提升Nginx服务器硬度的12个技巧。感兴趣的可以关注【民工科技之路】微信公众号,阅读以上文章。今天,我们就来说说如何将Nginx升级到新版本,以及如何回滚到旧版本,这是企业实际生产环境中经常遇到的情况。一、环境介绍今天准备的两个nginx版本如下:[root@nginx~]#cd/download/nginx/[root@nginxnginx]#lltotal1952-rw-r--r--1rootroot981687Oct172017nginx-1.12.2.tar.gz-rw-r--r--1rootroot1015384Dec409:58nginx-1.14.2.tar.gz2,编译安装老版本和新版本编译安装nginx-1.12.2[root@nginxnginx]#tarzxfnginx-1.12.2.tar.gz[root@nginxnginx]#cdnginx-1.12.2[root@nginxnginx-1.12.2]#./configure--prefix=/usr/local/nginx-1.12.2[root@nginxnginx-1.12.2]#echo$?0[root@nginxnginx-1.12.2]#make&&makeinstall[root@nginxnginx-1.12.2]#echo$?0[root@nginxnginx-1.12.2]#ll/usr/local/nginx-1.12.2/total0drwxr-xr-x2rootroot333Mar109:01confdrwxr-xr-x2rootroot40Mar109:01htmldrwxr-xr-x2rootroot6Mar109:01logsdrwxr-xr-x2rootroot19Mar109:01sbincompileandinstallnginx-1.14.2[root@nginx~]#cd/download/nginx/[root@nginxnginx]#tarzxfnginx-1.14.2.tar.gz[root@nginxnginx]#cdnginx-1.14.2[root@nginxnginx-1.14.2]#./configure--prefix=/usr/local/nginx-1.14.2[root@nginxnginx-1.14.2]#echo$?0[root@nginxnginx-1.14.2]#make&&makeinstall[root@nginxnginx-1.14.2]#echo$?0[root@nginxnginx-1.14.2]#ls-l/usr/local/nginx-1.14.2/total0drwxr-xr-x2rootroot333Mar109:03confdrwxr-xr-x2rootroot40Mar109:03htmldrwxr-xr-x2rootroot6Mar109:03logsdrwxr-xr-x2rootroot19Mar109:03sbin这里部署了两个版本的nginx软件3.启动老版本的nginx[root@nginx~]#/usr/local/nginx-1.12.2/sbin/nginx-tnginx:配置文件/usr/local/nginx-1.12.2/conf/nginx。conf语法是oknginx:配置文件/usr/local/nginx-1.12.2/conf/nginx.conf测试成功[root@nginx~]#/usr/local/nginx-1.12.2/sbin/nginx[root@nginx~]]#ps-efgrepnginxroot63241009:06?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxnobody63256324009:06?00:00:00nginx:workerprocessroot63271244009:06pts/000:00:00grep--color=autonginx[root@nginx~]#lsof-i:80COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEEnginx6324root6uIPv4263240t0TCP*:http(LISTEN)nginx6325nobody6uIPv4263240t0TCP*:http(LISTEN)4.升级到新版本版本升级其实就是对二进制文件的升级,过程是如下:[root@nginx~]#/usr/local/nginx-1.12.2/sbin/nginx-vnginxversion:nginx/1.12.2[root@nginx~]#cd/usr/local/nginx-1.12.2/sbin/[root@nginxsbin]#mvnginxnginx-1.12.2#先备份原来老版本的nginx二进制文件[root@nginxsbin]#cp/usr/local/nginx-1.14.2/sbin/nginx./#复制新版本二进制文件进入当前目录,进行平滑升级操作[root@nginx~]#ps-ef|grepnginxroot63241009:06?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxnobody63256324009:06?00:00:00nginx:workerprocessroot63381244009:11pts/000:00:00grep--color=autonginx[root@nginx~]#kill-USR26324[root@nginx~]#ps-ef|grepnginxroot63241009:06?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxnobody63256324009:06?00:00:00nginx:工人processroot63406324009:12?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxnobody63416340009:12?00nginx:workerprocessroot63431244009:12pts/000:00:00grep--color=autonginx此时新的master进程已经正常启动,但是旧的work进程也存在,所以我们使用以下命令,发送旧的工作进程平滑停止信号如下:[root@nginx~]#kill-WINCH6324[root@nginx~]#ps-ef|grepnginxroot63241009:06?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxroot63406324009:12?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxnobody63416340009:12?00:00:00nginx:workerprocessroot63461244009:14pts/000:00:00grep--color=autonginx此时老的worker进程已经停止,接下来我们测试是否可以访问normally:是正常访问,实际上这个平滑的升级动作是访问用户完全察觉不到的,所以nginx热部署已经完成[root@nginx~]#/usr/local/nginx-1.12.2/sbin/nginx-vnginx版本:nginx/1.14.2查看版本也是最新版本,升级完成。注意:如果版本升级完成后没有问题,如果需要关闭oldmaster进程,可以使用如下命令:kill-QUITold_master_PID5,versionrollback对于升级,最难的是不升级,而是要回滚,因为在实际生产环境中存在回滚的可能,例如:新版本由于一些未知的bug导致与现有应用不兼容,或者运行不稳定等。因此,为了运维工程师们,故障回滚是重点。在上面的结果中,我们也可以看到老master进程一直存在,只有手动关闭它才会自己关闭。这种设计是有益的。好处是升级新版本后,如果出现问题,可以及时快速回滚到之前的稳定版本。[root@nginx~]#ps-ef|grepnginxroot63241009:06?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxroot63406324009:12?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxnobody63416340009:12?00:00:00nginx:workerprocessroot63501244009:23pts/000:00:00grep--color=autonginx[root@nginx~]#cd/usr/local/nginx-1.12.2/sbin/[root@nginxsbin]#mvnginxnginx-1.14.2[root@nginxsbin]#mvnginx-1.12.2nginx[root@nginxsbin]#kill-USR16324[root@nginxsbin]#ps-ef|grepnginxroot63241009:06?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxroot63406324009:12?00:00:00nginx:主进程/usr/local/nginx-1.12.2/sbin/nginxnobody63416340009:12?00:00:00nginx:workerprocessroot63551244009:24pts/000:00:00grep--color=autonginx[root@nginxsbin]#./nginx-vnginxversion:nginx/1.12.2从上面的结果发现已经顺利回滚到之前的版本,再测试是否可以正常访问:可以正常访问,所以这个回滚操作是对用户也是无感知的。今天的制作技巧就分享到这里。如果您认为本文对您有帮助或参考,请转发并分享本文。你的转发是我的福气。最大的支持!!更多精彩文章,请关注米工个人微信公众号:米工的技术之路
