Nginx系列p2:重载,热部署,日志分割

  今天我们来学习 nginx 的 重载、热部署、日志分割功能

重载:当我们需要修改配置文件中的一些值,我们可以直接修改该配置文件,然后重新启动 nginx 服务,就可以实现在 nginx 不停止服务的情况下,使用了我们最新修改过的配置文件。

重载example:

step1:

# 打开配置文件,设置配置文件中的 tcp_nopush 选项为开启,然后保存退出
$ vim conf/nginx_conf

 

 step2: 重新启动 nginx 服务,此时 nginx 服务就可以使用新的配置文件了

$ sudo ./nginx -s reload

 

热部署:我们在不停止服务的情况下,对 nginx 重新进行部署。比如我们升级了 nginx 版本(又称版本升级),则该功能可以使我们的应用平滑的过渡到新部署的高版本的 nginx 服务上。

热部署 example:

step1: 首先以同样的方式编译更高版本的 nginx, 然后将高版本的 sbin/nginx 二进制可执行文件替换掉我们要升级的 nginx 服务用的 nginx 文件

# 注:该旧版本 nginx 服务正在运行的情况下进行下述操作
# 本机器开启的 nginx 服务版本为 nginx-1.12.2
# 重新编译的 nginx 版本为 nginx-1.16.1,安装目录为 nginx-16 文件夹下
# 用新编译生成的 nginx 二进制文件覆盖掉正在使用的 nginx 旧版本二进制文件

$ mv nginx nginx.old   // 备份一下旧版本的 nginx 文件
$ sudo cp /home/zhangpeng/nginx-16/sbin/nginx ./

此时查看一下我们正在运行的 nginx 服务:

 

 注:从上图可以看出 master 进程的 PID 为 3278,worker 进程的 PID 为 3287,父进程为 master 进程

step2: 向 master 进程发送 USR2 信号,此时再查看一下 nginx 进程

$ sudo kill -USR2 3278

 

 注:此时我们观察可以发现:给老的 master 进程发送 USR2 信号后,老的 master 进程生成了新 master, 新的 master 生成了新的 worker。同时老的 nginx 进程就不再监听 80 号端口了,这样就可以实现从老的 nginx 服务到新的 nginx 服务进行平滑过渡了。

step3:向老的 nginx master 进程发送 WINCH 信号告诉 master 进程请优雅的关闭你的 worker 进程

 

 注:此时可以发现:老的 nginx master 中的 worker 都已经全部关闭了,但是此时老的 nginx master 进程还存在。存在的原因是:有些情况下我们需要将版本退回到旧的版本,这时,我们就可以根据老的 nginx master 把它的 worker 进程再拉起来!(发送 RELOAD 信号拉起 worker,然后再关闭新的 master 进程就可以了)

日志分割:在 nginx 不停止运行的情况下,把当前的日志备份到另外一个文件中。

日志分割 example:

# 进入 logs 目录
# 将 error.log 备份为 error.log.bak 文件
# 此时重新开启 nginx 服务,发送 reopen 信号,会重新生成一个新的 error.log 文件
# 中间的日志文件不会有缺少

$ mv error.log error.log.bak
$ sudo ../sbin/nginx -s reopen

注:但是正常情况下,我们不会这样使用,我们一般会编写一个日志分割的脚本文件,然后定时执行这个脚本文件即可。一般我们用 crontab 来开启定时计划,在 Ubuntu 下,是系统默认安装的,直接使用即可,我会在 Ubuntu 分类下单独写一篇博客来介绍 crontab 的使用。

 

posted on 2019-10-10 21:57  爱笑的张飞  阅读(256)  评论(0编辑  收藏  举报

导航