nginx的热部署(方案二)
方案一的缺点就是直接升级完成了;
那么问题来了:
- 如果说出现问题了,想要回退 那么应该怎么处理?
- 所以最好就是有一段的缓冲期限;
那么久可以直接 从升级的方案来进行 拆分
1、查看原来的编译参数
#这个是一样的;可以优先查看编译参数
[root@Linux2 ~]# nginx -V
nginx version: LJW/WEB
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments: --prefix=/usr/local/nginx
- 这里只是指定了一个编译参数,其余都是默认的;
- 那么我们现在尝试多增加一个编译参数
2、准备nginx的源码包
#准备好源码包:
#上面的是nginx的 1.27版本,目前这个是1.26版本
[root@Linux2 ~]# cd nginx-1.26.2
3、预编译、编译、安装
#预编译 -->这里再加一个status的状态模块
[root@Linux2 nginx-1.26.2]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module
#编译、安装
[root@Linux2 nginx-1.26.2]# make && make install
4、生成新的master进程
- 首先:查看原来的nginx的pid
- 给它发信号,
#升级的过程是把make upgrade的步骤拆开
[root@Linux2 nginx-1.26.2]# tail -10 Makefile
upgrade:
/usr/local/nginx/sbin/nginx -t #测试一下配置文件
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` #然后发送信号给pid
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin #然后备份一个pid文件
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` #然后退出老的进程
.PHONY: build install modules upgrade
#优先查看一下pid号
#这里可以蛋刀master的进程号是9359
[root@Linux2 nginx-1.26.2]# ps -ef | grep nginx
root 9359 1 0 11:44 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
nobody 9361 9359 0 11:44 ? 00:00:00 nginx: worker process
root 12052 1157 0 12:11 pts/0 00:00:00 grep --color=auto nginx
#然后给到这个进程发送一个信号
[root@Linux2 nginx-1.26.2]# kill -USR2 9359
#这里明显看到多了一个master进程
#多出来的master进程号是12053
[root@Linux2 nginx-1.26.2]# ps -ef | grep nginx
root 9359 1 0 11:44 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
nobody 9361 9359 0 11:44 ? 00:00:00 nginx: worker process
root 12053 9359 0 12:12 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
nobody 12054 12053 0 12:12 ? 00:00:00 nginx: worker process
root 12056 1157 0 12:12 pts/0 00:00:00 grep --color=auto nginx
5、退出老master进程
- 接上述实验,老的master进程号是9359
#向老的master进程发信号:
[root@Linux2 nginx-1.26.2]# kill -WINCH 9359
[root@Linux2 nginx-1.26.2]# ps -ef | grep "[n]ginx"
root 9359 1 0 11:44 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
root 12053 9359 0 12:12 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
nobody 12054 12053 0 12:12 ? 00:00:00 nginx: worker process
- 这时候,检查一下nginx的版本是否回退了
- 这里需要注意、老进程并没有退出的,
- 只是测试一段时间没问题才推出
#到这里为止,我们能够看到版本号已经回到1.26版本了
[root@Linux2 nginx-1.26.2]# nginx -V
nginx version: nginx/1.26.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module
6、抉择
这里的抉择指的是:
- 可以回退到原来1.27版本
- 也可以直接回到目前的1.26版本
#这里回滚
#重新拉起老的worker进程:
[root@Linux2 nginx-1.26.2]# kill -HUP 9359
#再次查看:没有问题
[root@Linux2 nginx-1.26.2]# ps -ef | grep "[n]ginx"
root 9359 1 0 11:44 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
root 12053 9359 0 12:12 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
nobody 12054 12053 0 12:12 ? 00:00:00 nginx: worker process
nobody 12063 9359 0 12:20 ? 00:00:00 nginx: worker process
#回滚就得退出目前的新的nginx的master号
[root@Linux2 nginx-1.26.2]# kill -QUIT 12053
[root@Linux2 nginx-1.26.2]# ps -ef | grep "[n]ginx"
root 9359 1 0 11:44 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
nobody 12063 9359 0 12:20 ? 00:00:00 nginx: worker process
#然后把升级的旧文件,重新换回来
[root@Linux2 nginx-1.26.2]# mv /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx
如果是决定使用了nginx的最新版本
- nginx的最新版本
#直接退出老worker的进程即可
[root@Linux2 nginx-1.26.2]# kill -QUIT 9359
[root@Linux2 nginx-1.26.2]# ps -ef | grep "[n]ginx"
root 12073 1 0 12:24 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/ngin
nobody 12074 12073 0 12:24 ? 00:00:00 nginx: worker process
分享环节:
hi,亲爱的朋友们:
- 感谢你们耐心完这个笔记,如果笔记中出现的一些软件包、资源找不到的可以直接留言&私聊,我看见了就回复;
- 资源免费共享;有需要滴滴,(仅仅是我有的)
我的坚持初衷:💕立志要成为一名架构师
- 不断地去坚持学,其中的各种各样的难度,不言而喻~!
- 坚持不是一件容易的事情,但它却是成功的关键。做起来吧~!
如果你也想要坚持:那么组团吧,咋们一块互相监督;一天一点分享也是进步;最怕就是孤军奋战!加油吧,追梦人~!