nginx热升级

nginx热升级

热升级原理

通过 信号控制多进程协作 实现无缝切换:

  1. 旧进程:保持处理现有连接。
  2. 新进程:加载新二进制和配置,接管新请求。
  3. 优雅退出:旧进程完成存量请求后退出。

标准热升级流程

1. 准备工作

# 查看当前进程和版本
ps aux | grep nginx
nginx -v

# 备份旧二进制和配置
cp /usr/sbin/nginx /usr/sbin/nginx_old
cp -r /etc/nginx /etc/nginx_backup

2. 替换新二进制

# 上传新二进制文件(需与旧版编译参数一致)
chmod +x nginx_new
mv nginx_new /usr/sbin/nginx

# 验证新版本
nginx -t          # 测试配置文件
nginx -v          # 检查版本

3. 触发热升级

# 向主进程发送 USR2 信号(启动新进程)
kill -USR2 $(cat /var/run/nginx.pid)

# 此时会生成新主进程,旧进程转为 Worker 不再接收新请求
ps aux | grep nginx

输出示例:

root      1234  0.0  0.1  10000  2000 ?        Ss   10:00   0:00 nginx: master process (old)
root      5678  0.0  0.1  10000  2000 ?        Ss   10:05   0:00 nginx: master process (new)
nginx     9012  0.0  0.1  10000  2000 ?        S    10:00   0:00 nginx: worker process (old)
nginx     9013  0.0  0.1  10000  2000 ?        S    10:05   0:00 nginx: worker process (new)

4. 优雅关闭旧进程

# 向旧主进程发送 WINCH 信号(停止 Worker)
kill -WINCH $(cat /var/run/nginx.pid.oldbin)

# 等待旧 Worker 处理完存量请求后,关闭旧 Master
kill -QUIT $(cat /var/run/nginx.pid.oldbin)

关键信号说明

信号 作用
USR2 启动新主进程,保留旧进程
WINCH 关闭旧 Worker(旧 Master 仍存在)
QUIT 优雅退出旧 Master
HUP 重载配置(无需重启)

热升级验证

# 检查新进程状态
netstat -tunlp | grep nginx

# 测试服务功能
curl -I http://localhost

# 监控日志
tail -f /var/log/nginx/access.log /var/log/nginx/error.log

回滚方案

如果新版本异常,快速回退到旧版本:

# 1. 恢复旧二进制
mv /usr/sbin/nginx_old /usr/sbin/nginx

# 2. 向新主进程发送 QUIT 信号(强制终止)
kill -QUIT $(cat /var/run/nginx.pid)

# 3. 重启旧进程
nginx -c /etc/nginx/nginx.conf

# 4. 确认旧进程恢复
ps aux | grep nginx

注意事项

  1. ABI 兼容性

    • 新旧二进制文件的 编译参数依赖库版本 必须一致。
    • 验证命令:ldd /usr/sbin/nginx
  2. 配置文件兼容性

    • 新旧版本配置语法需兼容,建议先测试 nginx -t
  3. 资源预留

    • 确保系统有足够内存同时运行新旧进程
  4. 监控指标

    • 观察升级后的内存、CPU、连接数变化
    • 使用命令:ss -svmstat 1

自动化脚本示例

#!/bin/bash
# 热升级脚本 (nginx为例)
OLD_PID=$(cat /var/run/nginx.pid)
cp nginx_new /usr/sbin/nginx
nginx -t || exit 1
kill -USR2 $OLD_PID
sleep 5
kill -WINCH $OLD_PID
kill -QUIT $OLD_PID
echo "Upgrade completed. New PID: $(cat /var/run/nginx.pid)"

通过此方案,您可以在不影响线上服务的情况下完成二进制升级,特别适合 7x24 小时运行 的关键业务系统。

posted @ 2025-03-21 13:33  逃离这世界~  阅读(109)  评论(0)    收藏  举报