一、解释nginx的平滑升级 随着nginx越来越流行使用,并且nginx的优势也越来越明显,nginx的版本迭代也开始了加速模式,1.9.0版本的nginx更新了许多新功能,例如stream四层代理功能。伴随着nginx的广泛应用,版本升级必然是越来越快的,线上业务不能停,此时nginx的升级就是运维的重要工作了,下面就带大家一起来理解下nginx平滑升级。 二、nginx平滑升级原理 多进程模式下的请求分配方式 Nginx默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。 信号的接收和处理 Nginx主进程在启动完成后会进入等待状态,负责响应各类系统消息,如SIGCHLD、SIGHUP、SIGUSR2等。 Nginx信号简介 主进程支持的信号 TERM, INT: 立刻退出 QUIT: 等待工作进程结束后再退出 KILL: 强制终止进程 HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。 USR1: 重新打开日志文件 USR2: 启动新的主进程,实现热升级 WINCH: 逐步关闭工作进程 工作进程支持的信号 TERM, INT: 立刻退出 QUIT: 等待请求处理结束后再退出 USR1: 重新打开日志文件 三、nginx平滑升级实战 3.1 备份原Nginx二进制文件 备份二进制文件和nginx的配置文件 [root@iZ28t900vpcZ ~]#cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_$(date +%F) [root@iZ28t900vpcZ ~]#cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf_$(date +%F) 3.2 编译新的nginx源码包 编译新Nginx源码,安装路径需与旧版一致 [root@iZ28t900vpcZ nginx-1.9.12]#./configure --prefix=/usr/local/nginx-1.9.12 --user=www --group=www --with-http_ssl_module --with-openssl=/path/to/openssl_src [root@iZ28t900vpcZ nginx-1.9.12]#make&make install 3.3 发送USR2信号 向主进程发送USR2信号,Nginx会启动一个新版本的master进程和工作进程,和旧版一起处理请求 [root@iZ28t900vpcZ ~]# ps -ef|grep nginx|grep -v grep root 900 1 0 Mar07 ? 00:00:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx nginx 28475 900 0 11:32 ? 00:00:00 nginx: worker process [root@iZ28t900vpcZ ~]#kill -USR2 900 3.4 发送WITCH信号 向原Nginx主进程发送WINCH信号,它会逐步关闭旗下的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理 [root@iZ28t900vpcZ ~]#kill -WITCH 900 3.5 发送HUP信号 如果这时需要回退,可向原Nginx主进程发送HUP信号,它会重新启动工作进程, 仍使用旧版配置文件 。然后可以将新版Nginx进程杀死(使用QUIT、TERM、或者KILL) [root@iZ28t900vpcZ ~]#kill -HUP 900 注:此步骤只需在回滚的时候执行即可 3.6 升级完毕 如果不需要回滚,可以将原Nginx主进程杀死(使用QUIT、TERM、或者KILL),至此完成热升级 转载:https://www.cnblogs.com/liuqiang0/p/8528009.html