设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间20 现在时间20 缓存数据 和聪明人交流,和靠谱的人恋爱,和进取的人共事,和幽默的人随行。晚安!

和聪明人交流,和靠谱的人恋爱,和进取的人共事,和幽默的人随行。晚安!

查看: 1495|回复: 2

Nginx生产环境平滑升级的实现

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
29
主题
27
精华
0
金钱
94
积分
58
注册时间
2023-10-3
最后登录
2025-5-31

发表于 2024-5-29 12:31:00 | 显示全部楼层 |阅读模式
目录


  • 一.背景
  • 二.升级方案
  • 三.操作流程

一.背景

最近遇到一个比较尴尬而又实际的问题,那就是我们生产环境使用的Nginx是Centos6的老古董。业务需求需要加载Nginx的一个模块来实现,但是版本太老了,需要Nginx1.18之后才能支持,而我们的是Nginx1.12。 那升级Nginx是我们要做的事情。但是在生产环境你要考虑的东西很多,不像测试服,Nginx停掉服务,重新编译新的版本再启动。 我们线上的服务需要不间断地提供服务,否则会对业务产生经济损失. 那有什么方案能平滑升级Nginx版本呢?

二.升级方案

其实官方早就针对Nginx平滑升级做足了功夫,基本原理就是,启动新的Nginx(master+worker)进程,之后给旧的master进程发送-USER2指令,这样就能同时让新版和旧版本进程同时接收处理请求。之后我们再发送-WINCH给旧进程,让它停止工作服务(关闭所有旧worker进程,但是旧的master进程没关,防止后面你遇到问题回滚). 如果确认新Nginx没问题,那么再手动Kill旧的master进程即可完成平滑升级.

三.操作流程

1.查看-旧版本【nginx 1.12.2】进程信息
  1. [root@k8s-master nginx-1.12.2]# ps aux | grep 'nginx' | grep -v '7月' | grep -v 'grep'

  2. root     15180  0.0  0.0  46136   920 ?        Ss   17:22   0:00 nginx: master process ./nginx-1.12.2/sbin/nginx

  3. nobody   15181  0.0  0.1  46584  4344 ?        S    17:22   0:00 nginx: worker process
复制代码
主要进程pid:  15180  worker进程15181
2. nginx -V查看旧版本nginx的编译参数
  1. [root@k8s-master nginx-1.12.2]# nginx-1.12.2/sbin/nginx.old.1.12 -V

  2. nginx version: nginx/1.12.2

  3. built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

  4. built with OpenSSL 1.0.2k-fips  26 Jan 2017

  5. TLS SNI support enabled

  6. configure arguments: --prefix=nginx-1.12.2 --with-pcre=/root/nginx-test/pcre-8.45/ --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-stream

  7. [root@k8s-master nginx-1.12.2]#
复制代码
如果make或者./configure报错,可以尝试安装:  yum install -y gcc-c++
3.备份旧版本二进制nginx程序,  mv nginx nginx.old
  1. mv nginx nginx.old
复制代码
4.此时我们下载【nginx1.20.2】新版本重新编译,按照旧版本的编译参数(或者自己新增编译模块)
5.拷贝新生成的二进制nginx, 移动到之前旧版本的nginx路径覆盖.
  1. ./configure --prefix=/usr/local/ --with-stream  xxxx[模块列表]

  2. make

  3. &make install
复制代码
6.发送nginx -USR2 15180(旧版nginx主进程)进行替换,此时存在4个进程.  2个旧版nginx进程  2个新版nginx进程
1.jpeg

此时请求经过测试是负载均衡到这2个master上.
2.jpeg

请求2次,第一次负载到新的master,第二次负载到旧的master.
7.确认升级成功,-WINCH 信号 停止旧版master接收新的请求(此时旧版本nginx master进程没死,只是停止接收新的请求)
  1. kill -winch 15180
复制代码
3.jpeg

旧版nginx只剩下master进程, 子进程不存在了.
此时多次访问URL, 不会出现负载均衡的情况了.
4.jpeg

没有再出现hello world
8.若要回退版本也很简单,发送 kill -HUP 15180(旧nginx master进程)即可
5.jpeg

6.jpeg

此时旧版和新版nginx都在负载均衡.  把新版本nginx master kill掉即可.
此时新版nginx已经kill -QUIT 即可.
到此这篇关于Nginx生产环境平滑升级的实现的文章就介绍到这了,更多相关Nginx生产环境平滑升级内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2024-9-26
最后登录
2024-9-26

发表于 2024-10-28 16:37:20 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:常驻代表
  • 打卡总天数:30
  • 打卡月天数:0
  • 打卡总奖励:384
  • 最近打卡:2025-08-29 23:58:47
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
437
积分
62
注册时间
2023-1-1
最后登录
2025-8-29

发表于 前天 02:05 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表