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,亲爱的朋友们:

  • 感谢你们耐心完这个笔记,如果笔记中出现的一些软件包、资源找不到的可以直接留言&私聊,我看见了就回复;
  • 资源免费共享;有需要滴滴,(仅仅是我有的)

我的坚持初衷:💕立志要成为一名架构师

  • 不断地去坚持学,其中的各种各样的难度,不言而喻~!
  • 坚持不是一件容易的事情,但它却是成功的关键。做起来吧~!

如果你也想要坚持:那么组团吧,咋们一块互相监督;一天一点分享也是进步;最怕就是孤军奋战!加油吧,追梦人~!