nginx平滑升级
来源:互联网 发布:less没网络可以安装吗 编辑:程序博客网 时间:2024/05/02 00:30
转载请注明转自: 存储系统研究, 本文固定链接:nginx平滑升级
1. nginx平滑升级
当我们开发了一个新的nginx模块,需要升级nginx binary时,需要进行以下的步骤:
a) 替换老的nginx binary
[root@lg-miui-file-mfs09 sbin]# mv nginx nginx.old[root@lg-miui-file-mfs09 sbin]# scp guojun1@10.237.92.30:/usr/local/nginx/sbin/nginx .guojun1@10.237.92.30's password:nginxb) 向old master process 发送SIGUSR2信号[root@lg-miui-file-mfs09 sbin]# kill -s SIGUSR2 16236nginx.pid文件会被重命名为nginx.pid.oldbin,并且执行新的nginx binary文件,此时新老版本会同时运行:
[root@lg-miui-file-mfs09 sbin]# ll ../logs/total 14392-rw-r--r-- 1 guojun1 500 893 May 30 10:58 error.log-rw-r--r-- 1 guojun1 500 5617929 May 12 13:12 nginx-access.log-rw-r--r-- 1 guojun1 500 9102050 May 13 22:39 nginx-error.log-rw-r--r-- 1 root root 6 May 30 10:58 nginx.pid-rw-r--r-- 1 root root 6 May 30 10:58 nginx.pid.oldbin[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginxroot 16236 0.0 0.0 92920 3064 ? Ss 10:58 0:00 nginx: master process ./nginxroot 16237 0.0 0.0 94992 3988 ? S 10:58 0:00 nginx: worker processroot 16238 0.0 0.0 94992 3988 ? S 10:58 0:00 nginx: worker processroot 16239 0.0 0.0 94992 3988 ? S 10:58 0:00 nginx: worker processroot 16385 0.0 0.0 92924 6072 ? S 10:58 0:00 nginx: master process ./nginxroot 16386 0.0 0.0 94996 3908 ? S 10:58 0:00 nginx: worker processroot 16387 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker processroot 16388 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker processroot 16445 0.0 0.0 103244 852 pts/4 S+ 10:58 0:00 grep nginxc) 向old master process发送SIGWINCH此时,master会”优雅地”关闭它的工作进程:
[root@lg-miui-file-mfs09 sbin]# kill -s SIGWINCH 16236[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginxroot 16236 0.0 0.0 92920 3072 ? Ss 10:58 0:00 nginx: master process ./nginxroot 16385 0.0 0.0 92924 6072 ? S 10:58 0:00 nginx: master process ./nginxroot 16386 0.0 0.0 94996 3908 ? S 10:58 0:00 nginx: worker processroot 16387 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker processroot 16388 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker processd) 关闭old master如果查看log发送更新成功,可以关闭old master,此时向old master进程发送SIGQUIT,只留下新的server运行。
[root@lg-miui-file-mfs09 sbin]# kill -s SIGQUIT 16236[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginxroot 16385 0.0 0.0 92924 6072 ? S 10:58 0:00 nginx: master process ./nginxroot 16386 0.0 0.0 94996 3908 ? S 10:58 0:00 nginx: worker processroot 16387 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker processroot 16388 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker process
2. 回滚
如果我们在关闭老的工作进行之后查看log发现新的nginx server运行有问题,我们可以回滚到老的版本,其步骤如下:
a) 启动老的worker 进程可以通过向old master 进程发送SIGHUP信号,让其启动老的worker 进程。
[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginxroot 16385 0.0 0.0 92924 6072 ? S 10:58 0:00 nginx: master process ./nginxroot 44583 0.0 0.0 92924 6076 ? S 11:57 0:00 nginx: master process ./nginxroot 44584 0.0 0.0 94996 3984 ? S 11:57 0:00 nginx: worker processroot 44585 0.0 0.0 94996 3984 ? S 11:57 0:00 nginx: worker processroot 44586 0.0 0.0 94996 3984 ? S 11:57 0:00 nginx: worker processroot 44757 0.0 0.0 94996 3908 ? S 11:58 0:00 nginx: worker processroot 44758 0.0 0.0 94996 3980 ? S 11:58 0:00 nginx: worker processroot 44759 0.0 0.0 94996 3980 ? S 11:58 0:00 nginx: worker processb) 关闭新的master进程和worker进程向新的master进程发送SIGQUIT信号,关闭新的master进程和worker进程;
[root@lg-miui-file-mfs09 sbin]# kill -s SIGQUIT 44583[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginxroot 16385 0.0 0.0 92924 6072 ? S 10:58 0:00 nginx: master process ./nginxroot 44757 0.0 0.0 94996 3908 ? S 11:58 0:00 nginx: worker processroot 44758 0.0 0.0 94996 3980 ? S 11:58 0:00 nginx: worker processroot 44759 0.0 0.0 94996 3980 ? S 11:58 0:00 nginx: worker process
如果新的master进程由于某些原因hung住了没有关闭,可以向它们发送SIGTERM或者SIGKILL信号。当新的master进程退出后,老的master进程会将nginx.pid.oldbin文件重命名为nginx.pid.
参考文献:
Nginx:http://wiki.nginx.org/CommandLine#Upgrading_To_a_New_Binary_On_The_Fly
陶辉,深入理解Nginx模块开发与架构解析
5 0
- nginx 平滑升级
- nginx平滑升级
- nginx的平滑升级
- nginx平滑升级
- nginx平滑升级
- nginx平滑升级
- Nginx的平滑升级
- nginx的平滑升级
- nginx 平滑升级
- Nginx平滑升级
- Nginx平滑升级
- nginx平滑升级问题
- Nginx平滑升级
- Nginx 平滑升级
- Nginx平滑升级
- 平滑升级你的Nginx
- nginx之平滑升级详解
- Linux下平滑升级nginx
- copy语法学习记录
- uva 101 - The Blocks Problem(模拟)
- WPF做一个闪动的按钮
- 读书笔记---陀螺仪
- 踏实的生活态度
- nginx平滑升级
- Java面向对象 包
- InnoDB 的相关优化
- 联想A208T ROOT
- RabbitMQ 使用的AMQP模型解析
- datastage环境配置
- ssh远程连接客户端Xshell莫名其妙输出一大堆“xshell”的原因
- 蚊子132 今天来介绍最简单的 CFileFind 程序实现
- 兼容火狐和IE的javascript中iframe自动适应高度