nginx运维中怎么样平滑升级


本文摘自PHP中文网,作者(*-*)浩,侵删。

可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。 ( 推荐学习:nginx运维 )

首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。

主进程将重命名它的 .pid 文件为 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的可执行程序,依次启动新的主进程和新的工作进程:

1

2

3

4

5

6

7

8

9

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND

33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx

33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)

33135 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)

33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)

36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx

36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

在这时,两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:

1

2

3

4

5

6

7

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND

33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx

33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)

36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx

36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了:

1

2

3

4

5

6

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND

33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx

36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx

36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以恢复旧的服务器:

发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程

发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程

发送 TERM 信号给新的主进程,迫使其退出

如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号

新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切就都恢复到升级之前了。

如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:

1

2

3

4

5

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND

36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx

36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

以上就是nginx运维中怎么样平滑升级的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

怎么在linux系统中以单容器安装nginx+asp.net core

nginx的配置文件在哪个目录下

docker下如何安装nginx

nginx上出现403应该怎么解决

重启nginx有哪几种方法

nginx怎么实现负载均衡的

如何在不影响业务的情况下升级nginx版本

怎么查看nginx端口被占用

nginx如何在linux环境下卸载

nginx禁止指定目录运行php脚本的方法是什么

更多相关阅读请进入《nginx》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...