Nginx的平滑升级及版本回退,日志切割

在实际的生产环境当中,每分每秒都会有客户在访问我们的nginx服务器。这样,我们就不能直接重启服务或reload重新加载配置,否则会影响客户的访问,甚至导致Nginx服务器崩溃,严重影响用户体验!这就需要将服务平滑升级。

系统环境:RHEL7.3

一、首先需要两个不同版本的Nginx安装包

[root@server1 ~]# ls
nginx-1.15.8.tar.gz  nginx-1.16.0.tar.gz

二、先安装nginx-1.15.8

1.解压源码包
[root@server1 ~]# tar zxf nginx-1.15.8.tar.gz
2.为Nginx添加语法检测(方便编写配置文件,减少出错率)
mkdir ~/.vim
cd nginx-1.16.0/contrib/
cp -r vim/* ~/.vim/

在这里插入图片描述

3.修改编译配置文件,使其不debug
vim auto/cc/gcc
====================
171 # debug
172 #CFLAGS="$CFLAGS -g"

在这里插入图片描述

4.解决编译依赖,并配置
yum install -y pcre-devel zlib-devel gcc
./configure --prefix=/usr/local/nginx --with-file-aio

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.编译安装
make && make install

在这里插入图片描述

6.查看Nginx版本
cd /usr/local/nginx/sbin/
./nginx -t
./nginx -V

在这里插入图片描述

7.添加Ngnix用户
useradd nginx

在这里插入图片描述

8.修改文件系统数目限制
vim /etc/security/limits.conf
=================================
 61 # End of file
 62 nginx   -       nofile          65535

在这里插入图片描述

9.修改Ngnix配置文件
cd /usr/local/nginx/conf/
vim nginx.conf
==========================

  2 user  nginx nginx;
  3 worker_processes  auto;

 12 events {
 13     worker_connections  65535;
 14 }

在这里插入图片描述

10.开启Nginx服务
./nginx
./nginx -V

在这里插入图片描述

三、将nginx-1.15.8平滑升级为nginx-1.16.0

1.解压缩
[root@server1 ~]# tar zxf nginx-1.16.0.tar.gz
[root@server1 ~]# ls
nginx-1.15.8  nginx-1.15.8.tar.gz  nginx-1.16.0  nginx-1.16.0.tar.gz
2.配置、编译
[root@server1 ~]# cd nginx-1.16.0/
[root@server1 nginx-1.16.0]# pwd
/root/nginx-1.16.0
[root@server1 nginx-1.16.0]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.15.8
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
configure arguments: --prefix=/usr/local/nginx --with-file-aio
[root@server1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-file-aio
[root@server1 nginx-1.16.0]# make 

在这里插入图片描述
在这里插入图片描述

3.查看新生成的二进制执行文件
[root@server1 nginx-1.16.0]# cd objs/
[root@server1 objs]# ls
autoconf.err  nginx    ngx_auto_config.h   ngx_modules.c  src
Makefile      nginx.8  ngx_auto_headers.h  ngx_modules.o
[root@server1 objs]# ./nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
configure arguments: --prefix=/usr/local/nginx --with-file-aio

在这里插入图片描述

4.备份原有Nginx启动脚本(以防止升级失败无法版本回退)
[root@server1 objs]# cd /usr/local/nginx/sbin/
[root@server1 sbin]# cp nginx nginx.old
[root@server1 sbin]# ls
nginx  nginx.old

在这里插入图片描述

5.将新版本的脚本复制到旧版本的脚本目录下
[root@server1 sbin]# cd -
/root/nginx-1.16.0/objs
[root@server1 objs]# cp -f nginx /usr/local/nginx/sbin/
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y

在这里插入图片描述
此时/usr/local/nginx/sbin/目录下的nginx为新版本的执行文件,nginx.old为旧版本的二进制执行文件
在这里插入图片描述

6.查看Nginx进程号

查看到此时nginx的master进程和worker进程:

ps -ef | grep nginx

在这里插入图片描述
客户端查看此时生效的nginx服务器:
在这里插入图片描述
此时为nginx/1.15.8生效

7.替换服务

在这里插入图片描述
注意:此时4852为旧版本的master进程,4853为所属master的worker进程

ps -ef | grep nginx
kill -USR2 4852
ps -ef | grep nginx

在这里插入图片描述
注意:17125为新版本的master进程,17126为所属master进程的worker进程,用于处理新的用户请求;而4852,旧版本的master进程,4853,所属master的worker进程则处理当前正在处理的用户的请求,不再接受新的用户请求。

之前访问过Nginx服务器的主机
在这里插入图片描述
未访问Nginx服务器的主机
在这里插入图片描述

原有进程处理完所有请求,关闭所有连接后,停止
ps -ef | grep nginx
kill -WINCH 4852
ps -ef | grep nginx

在这里插入图片描述
在这里插入图片描述
注意:kill -WINCH 只会杀掉旧版本master进程的worker进程,不会杀掉master进程。等更新完毕后,可以杀死旧版本的master进程,平滑升级完成。

四、版本回退

我们再实际生产环境当中,如果升级失败,则需要再第一时间,版本回退!!!

1.将备份好的旧版本的脚本还原
[root@server1 sbin]# pwd
/usr/local/nginx/sbin
[root@server1 sbin]# ls
nginx  nginx.old
[root@server1 sbin]# cp -f nginx.old nginx
cp: overwrite ‘nginx’? y
[root@server1 sbin]# ls
nginx  nginx.old
[root@server1 sbin]# ./nginx -V
nginx version: nginx/1.15.8
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
configure arguments: --prefix=/usr/local/nginx --with-file-aio

在这里插入图片描述

2.唤醒旧版本的master进程,使之产生新的worker进程
ps -ef | grep nginx
kill -HUP 4852		#唤醒旧版本的master进程,使之产生新的worker进程
ps -ef | grep nginx

在这里插入图片描述

3.使回退版本的worker进程接收新的用户请求。同时新版本的master进程的worker进程不再接收新的用户请求,只处理当前的用户请求
ps -ef | grep nginx
kill -USR2 7681
ps -ef | grep nginx

在这里插入图片描述

4.关闭新版本master进程的两个worker进程
ps -ef | grep nginx
kill -WINCH 7681
ps -ef | grep nginx

在这里插入图片描述
现在工作的进程为旧版本的Nginx的服务,杀掉新版本的master进程后,则版本回退完毕。

五、nginx日志切割

我们再日常的生产环境当中,日志文件的大小可能高达几个G,这对我们的管理造成很大的不变。我们需要日志切割将每天的日志定期备份,并且新的日志产生再新的日志文件,方便日志的管理。

这就是日志切割!!!

1、创建每天日志切割后存放目录
[root@server1 logs]# pwd
/usr/local/nginx/logs
[root@server1 logs]# mkdir oldlogs
[root@server1 logs]# ls
access.log  error.log  nginx.pid  nginx.pid.oldbin  oldlogs

在这里插入图片描述

2、编写日志切割脚本
[root@server1 logs]# vim /usr/local/nginx/logs/backup.sh
===============================================================
#!/bin/bash

LOG_PATH=/usr/local/nginx/logs/oldlogs		##定义切割日志后存放的路径变量
CUR_LOG_PATH=/usr/local/nginx/logs			##定义nginx日志存放的路径变量
YESTERDAY=$(date +%F -d -1day)				##定义昨天的日期变量

mv $CUR_LOG_PATH/access.log $LOG_PATH/${YESTERDAY}_access.log	##将昨天的access日志文件移动到切割目录,并且重命名
mv $CUR_LOG_PATH/error.log $LOG_PATH/${YESTERDAY}_error.log   	##将昨天的error日志文件移动到切割目录,并且重命名

kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)			##告诉nginx产生新的日志文件,用来存放日志

在这里插入图片描述

3、制作定时任务,定时nginx日志切割
[root@server1 logs]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@server1 logs]# crontab -l
0 0 * * * /bin/bash /usr/local/nginx/logs/backup.sh		#每天的00:00进行日志切割

在这里插入图片描述
日志切割的任务部署完成。关于Nginx的部分操作就是这些,我们下次再见!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值