欢迎您, 来到 宁时修博客.^_^

Nginx系列---5、Nginx命令行,热部署升级版本

2019/07/23 林木立 Nginx 444
Nginx系列

一、Nginx命令行

    1、格式: nginx -s reload

    2、帮助: -?/-h

    3、使用指定的配置文件: -c

    4、指定配置指令: -g

    5、指定运行目录: -p

    6、发送信号: -s

      立刻停止nginx服务: stop

      优雅的停止nginx服务: quit

      重载配置文件: reload

      重新开始记录日志文件: reopen

    7、测试配置文件是否有语法错误: -t/-T

    8、打印nginx的版本信息、编译信息等: -v/-V



二、热部署升级nginx版本步骤

    1、把现有的nginx二进制文件备份一下;

    2、把新版本nginx编译好的nginx二进制文件替换掉现在使用的nginx二进制文件,编译新版Nginx源码,安装路径需与旧版一致;

    3、发送信号 -USR2 给现在的nginx master进程,告诉它需要进行热部署升级版本;

    4、nginx会新启动一个master进程,是由新版nginx二进制文件启动的,老版本的nginx master进程和worker进程也在运行。新版本的nginx master会生成新的worker进程,会将后续所有请求平滑过渡到新nginx进程,而老版本的worker进程已不再监听80/443这样的WEB端口了,新的请求和新的连接只会进入新的nginx进程中。这个时候,需要再向老版本的nginx master进程发送一个 -WINCH 信号,告诉它请优雅的关闭你的所有worker进程。


    注:我们有可能需要回退到老版nginx,所以可以向老版nginx master发送reload命令,重新拉起worker进程,再把新版本nginx进程杀死(使用QUIT、TERM、或者KILL)。所以老版nginx master进程不会自动退出,保留下来,允许做版本回退。也可向原Nginx主进程发送HUP信号,它会重新启动worker进程,仍使用旧版配置文件 。


示例:

[root@lynn ~]# cd /usr/local/src/
[root@lynn src]# wget http://nginx.org/download/nginx-1.17.2.tar.gz
[root@lynn src]# tar xf nginx-1.17.2.tar.gz 
[root@lynn src]# cd nginx-1.17.2/

# 新版nginx编译路径要与旧版本nginx一致。
[root@lynn nginx-1.17.2]# ./configure --prefix=/usr/local/nginx-1.16.0 --with-pcre

# 只进行 make,不要make install。
[root@lynn nginx-1.17.2]# make
[root@lynn nginx-1.17.2]# cd /usr/local/nginx-1.16.0/sbin/

# 备份旧版nginx二进制文件
[root@lynn sbin]# mv nginx nginx.bak

# 复制编译好的新版nginx二进制文件到 旧版本nginx的sbin目录下。
[root@lynn sbin]# cp /usr/local/src/nginx-1.17.2/objs/nginx ./
[root@lynn sbin]# ll
total 7488
-rwxr-xr-x 1 root root 3830432 Jul 23 21:04 nginx
-rwxr-xr-x 1 root root 3825504 Jul 23 16:16 nginx.bak
[root@lynn sbin]# ps -ef|grep nginx
root     14465     1  0 21:00 ?        00:00:00 nginx: master process /usr/local/nginx-1.16.0/sbin/nginx
nobody   14466 14465  0 21:00 ?        00:00:00 nginx: worker process
root     17546 13733  0 21:04 pts/0    00:00:00 grep --color=auto nginx

# 向旧版本nginx master进程发送 USR2 信号,Nginx会启动一个新版本的master进程和worker进程,和旧版本一起处理请求。
[root@lynn sbin]# kill -USR2 14465
[root@lynn sbin]# ps -ef|grep nginx
root     14465     1  0 21:00 ?        00:00:00 nginx: master process /usr/local/nginx-1.16.0/sbin/nginx
nobody   14466 14465  0 21:00 ?        00:00:00 nginx: worker process
root     23508 14465  0 21:12 ?        00:00:00 nginx: master process /usr/local/nginx-1.16.0/sbin/nginx
nobody   23509 23508  0 21:12 ?        00:00:00 nginx: worker process
root     23516 13733  0 21:12 pts/0    00:00:00 grep --color=auto nginx

# 向旧版本Nginx master进程发送 WINCH 信号,它会逐步关闭旗下的worker进程(master进程不退出),这时所有请求都会由新版本Nginx处理。
[root@lynn sbin]# kill -WINCH 14465
[root@lynn sbin]# ps -ef|grep nginx
root     14465     1  0 21:00 ?        00:00:00 nginx: master process /usr/local/nginx-1.16.0/sbin/nginx
root     23508 14465  0 21:12 ?        00:00:00 nginx: master process /usr/local/nginx-1.16.0/sbin/nginx
nobody   23509 23508  0 21:12 ?        00:00:00 nginx: worker process
root     23618 13733  0 21:13 pts/0    00:00:00 grep --color=auto nginx

# 如果不需要回滚,可以将旧版本Nginx主进程杀死(使用QUIT、TERM、或者KILL),至此完成热升级。




# 回滚旧版本,向旧Nginx主进程发送HUP信号,它会重新启动worker进程。
[root@lynn sbin]# kill -HUP 14465
[root@lynn sbin]# ps -ef|grep nginx
root     14465     1  0 21:00 ?        00:00:00 nginx: master process /usr/local/nginx-1.16.0/sbin/nginx
root     23508 14465  0 21:12 ?        00:00:00 nginx: master process /usr/local/nginx-1.16.0/sbin/nginx
nobody   23509 23508  0 21:12 ?        00:00:00 nginx: worker process
nobody   23898 14465  0 21:15 ?        00:00:00 nginx: worker process
root     23900 13733  0 21:15 pts/0    00:00:00 grep --color=auto nginx

# 将新版本Nginx master进程杀死(使用QUIT、TERM、或者KILL)。
[root@lynn sbin]# kill 23508
[root@lynn sbin]# kill 23508
-bash: kill: (23508) - No such process
[root@lynn sbin]# ps -ef|grep nginx
root     14465     1  0 21:00 ?        00:00:00 nginx: master process /usr/local/nginx-1.16.0/sbin/nginx
nobody   23898 14465  0 21:15 ?        00:00:00 nginx: worker process
root     23970 13733  0 21:16 pts/0    00:00:00 grep --color=auto nginx



点赞
说说你的看法

所有评论: (0)

# 加入组织

1、用手机QQ扫左侧二维码

2、搜Q群:1058582137

3、点击 宁时修博客交流群