nginx平滑升级
  1. Nginx服务接收到USR2信号后,将Nginx.pid文件添加.oldbin变成nginx.pid.oldbin文件;然后执行新版本Nginx服务器的二进制文件启动服务,如果新的服务启动成功,系统中将有新旧两个Nginx主进程共同提供Web服务,之后,需要向旧的Nginx服务进程发送WINCH信号,使旧的Nginx服务平滑停止,并删除Nginx.pid.oldbin文件。

nginx信号简介
  1. 1.主进程支持的信号
  2. 2.TERM, INT: 立刻退出
  3. 3.QUIT: 等待工作进程结束后再退出
  4. 4.KILL: 强制终止进程
  5. 5.HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
  6. 6.USR1: 重新打开日志文件
  7. 7.USR2: 启动新的主进程,实现热升级
  8. 8.WINCH: 逐步关闭工作进程9.工作进程支持的信号
  9. 10.TERM, INT: 立刻退出
  10. 11.QUIT: 等待请求处理结束后再退出
  11. 12.USR1: 重新打开日志文件

案例:
  1. #使用此命令查看nginx详情
  2. /usr/local/nginx/sbin/nginx -V
  3. nginx version: nginx/1.20.2
  4. built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
  5. built with OpenSSL 1.0.2k-fips 26 Jan 2017
  6. TLS SNI support enabled
  7. configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  8. 1,下载需要平滑升级的软件包 ,我现在版本是1.20,退回为1.20
  9. wget http://nginx.org/download/nginx-1.16.0.tar.gz
  10. 2,解压编译
  11. tar zxf nginx-1.16.0.tar.gz
  12. cd nginx-1.16.0/
  13. ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  14. make #执行编译,切记不要安装也就是不要去执行 make install
  15. 3,对Nginx执行文件进行更新
  16. cd /usr/local/nginx/sbin
  17. mv nginx nginx.old
  18. cp /root/app/nginx-1.16.0/objs/nginx .
  19. 4,进行平滑重启,
  20. (1)检测新版本Nginx是否正常 正常为 successful
  21. /usr/local/nginx/sbin/nginx -t
  22. (2)查看旧版本nginx进程
  23. ps -ef|grep nginx
  24. (3)向主进程发送USR2信号,Nginx会启动一个新版本的master进程和工作进程,和旧版一起处理请求
  25. kill -USR2 PID
  26. (4)此时再次查看Nginx进程就发现有俩Nginx在工作
  27. ps -ef|grep nginx
  28. (5)向原Nginx主进程发送WINCH信号,它会逐步关闭旗下的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理
  29. kill -WINCH pid(原来nginxpid)
  30. 6)杀死旧版本Nginx主进程或者 kill -9 pid 也可以
  31. 5,验证nginx版本
  32. /usr/local/nginx/sbin/nginx -v