nginx平滑升级版本

nginx平滑升级版本

1nginx平滑升级的概述:

   随着网络并发访问量越来越高,nginx web服务器也越来越流行,nginx版本换代越来越频繁,1.15.2版本的nginx更新了许多新功能,生产环境中版本升级必然的但是线上业务不能停,此时nginx的升级就是运维的重要工作了。

2nginx平滑升级原理

1): 多进程模式下的请求分配方式:  

      Nginx默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。

2):信号的接受和处理:

nginx主进程在启动完成后会进入等待状态,负责影响各类系统,如:SIGCHLD,SIGHUP,SIGUSR2.

3):Nginx信号介绍:

   《1》:主进程支持的信号

  •    TERM,INT:        立刻推出
  •    QUIT:             等待工作进程结束后再推出
  •    KILL:              强制终止进程
  •    HUP:             重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程
  •    USR1:            重新打开日志文件
  •    USR2            启动新的主进程,实现热升级
  •    WINCH:         逐步关闭工作进程

   《2》:工作进程支持的信号

  •    TERM,INT:        立刻退出
  •    QUIT             等待请求处理结束后再退出
  •    USR1:            重新打开日志文件

(注:nginx主要玩的是信号,nginx有两种进程,一种是主进程,一种是工作进程,当在启动服务的时候,他首先会出现主进程,主进程启动之后去加载配置文件,绑定端口等,然后主进程派送工作进程,工作进程上会持有工作描述符,然后在描述符上添加监听事件来接受请求然后去处理请求。)

3nginx平滑升级实战

《1》:rz  上传

《2》:tar xf nginx-1.15.9.tar.gz -C /usr/src/     解压

《3》: cd /usr/src/nginx-1.15.9/   切换目录

《4》:useradd -M -s /sbin/nologin nginx   创建用户

《5》:./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install  编译安装

(注:以上方式是报错

解决方法:

《1》:yum -y install pcre-devel openssl openssl-devel  安装依赖包

))))))

《6》:ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/   创建链接

《7》:vim /usr/local/nginx/conf/nginx.conf  编辑文件

《8》:修改文件

worker_processes  2;

《9》:nginx  启动

《10》:netstat -lnpt |grep 80

《11》:ps aux | grep nginx

1):查看旧版本nginx的编译参数

   《1》: nginx -V  查看编译安装时候的配置项

2):编译安装新版本nginx源码包,安装路径需要与旧版本一致,(注:不要执行make install 上传源码包不要与老版本差的太大。)

《1》:rz  上传

《2》: tar xf nginx-1.16.0.tar.gz -C /usr/src/    解压

《3》: cd /usr/src/nginx-1.16.0/  切换目录

《4》:./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make  编译安装

3):备份二进制文件,用新版本的替换

《1》:ls  查看,(注:里面有一个objs目录,在objs目录里有一个nginx的主程序。)

《2》: cd /usr/local/nginx/sbin/  切换目录

《3》:mv nginx nginx.old  修改名称

《4》:ls  查看

《5》:cp /usr/src/nginx-1.16.0/objs/nginx ./   复制

《6》:./nginx -t  用新程序去加载老文件的语法

(注:不能把老的进程杀死,假如用户在访问资源,这时候不就完了。)

4):发送USR2信号

向主进程(master)发送usr2信号,nginx会启动一个新的版本的master进程和对应工作进程,和旧版本一起处理请求

《1》:ps aux | grep nginx   查看进程

《2》:kill -USR2 10826  发送信号   (注:这个时候就要看运气了,如果运气不好就不会出现,如果运气好就会有。)

在做一个遍试一试

《1》:rm -rf nginx   删了

《2》:mv nginx.old nginx  修改名

《3》:killall -9 nginx  杀死进程

《4》:nginx 重启

《5》:mv nginx nginx.old  重命名

《6》:mv /usr/src/nginx-1.16.0/objs/nginx ./  移动

《7》:ps aux |grep nginx  查看进程

《8》:kill -USR2 14234   发送信号

《9》:ps aux |grep nginx    查看进程  (注:此时出现了 许多进程,说明成功。)

《10》:访问(注:这个时候新的和旧的都在发送请求。)

5)发送WINCH 信号(注:就是让老的工作进程逐步退出。)

   向旧的Nginx主进程(master)发送WINCH信号,它会逐步关闭自己的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理

《1》:kill -WINCH 14234  发送信号

《2》:ps aux |grep nginx 查看进程

  注意:回滚步骤,发送HUP信号

   如果这时需要回退继续使用旧版本,可向旧的Nginx主进程发送HUP信号,它会重新启动工作进程,仍使用旧版配置文件。然后可以将新版Nginx进程杀死(使用QUIT、TERM    、或者KILL)

《1》:kill -HUP …….

6):发送OUT 信号

 升级完毕,可向旧的Nginx主进程(master)发送(QUIT、TERM、或者KILL)信号,时旧的主进程退

《1》:kill -QUIT  14234

《2》:ps aux |grep nginx

7):验证nginx版本号,并访问测试

《1》: nginx -v

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BK_小小关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值