Nginx平滑升级到新的二进制代码

  1. 你可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。
  2. 首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。主进程将重命名它的 .pid.pid 文件为 .oldbin.oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin/usr/local/nginx/logs/nginx.pid.oldbin),然后执
    行新的可执行程序,依次启动新的主进程和新的工作进程:
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)
  1. 在这时,两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,你必须发送 WINCH信号给旧的主进程,然后,它的工作进程就将开始从容关闭:
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. 这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以恢复旧的服务器:
    1) 发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
    2) 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
    3) 发送 TERM 信号给新的主进程,迫使其退出
    4) 如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号
  2. 新的主进程退出后,旧的主进程会由移除 .oldbin.oldbin 前缀,恢复为它的 .pid.pid 文件,这样,一切就都恢复到升级之前了。
    如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:
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平滑升级过程中,通常采用无侵入式的方式,即版本的 Nginx 作为副本来运行,当旧版 Nginx 完成配置并负载均衡切换到版后,再停止旧版进程。使用 `kill` 和启动的主进程来实现平滑升级的一般步骤如下: 1. **备份当前运行的 Nginx**:确保服务数据的安全,先创建备份。 2. **启动版本 Nginx 作为副版**: - 先将版本 Nginx 设置为静默启动模式(例如添加 `-s single_core` 参数),使其只监听非标准端口,不接受外部请求。 -c /path/to/new/nginx.conf -s single_core ``` 3. **检查负载情况**: 确保 Nginx 已经正常工作并且接收到流量,可以使用 `netstat` 或 `ss` 查看连接状态。 4. **更配置**: 在旧版 Nginx 配置文件中设置的服务器块,指向 Nginx 的地址,并逐渐增加权重,让客户端流量逐步转移到服务器。 5. **监控负载均衡**: 使用工具如 `nginxadm`、`heartbeat` 或者直接通过系统监控工具确认负载均衡过渡。 6. **更旧版配置**: 当旧版的负载降低到可以承受的程度时,修改其配置文件,取消对 Nginx 的引用,并关闭不必要的端口。 7. **停止旧版 Nginx**: 确认旧版 Nginx 的流量已经完全转移到版本后,安全地杀死旧版本进程: ``` sudo kill -QUIT $(cat /var/run/nginx.pid) ``` 或者如果需要更干净的终止,使用: ``` sudo killall -QUIT nginx ``` 8. **清理资源**: 删除旧版本 Nginx 的pid文件以及日志文件等。 9. **验证升级成功**: 检查 Nginx 是否成为主进程,确认所有配置和功能都能正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Bigboy_sz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值