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

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

一.背景

最近遇到一个比较尴尬而又实际的问题,那就是我们生产环境使用的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】进程信息

[root@k8s-master nginx-1.12.2]# ps aux | grep 'nginx' | grep -v '7月' | grep -v 'grep'

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

nobody   15181  0.0  0.1  46584  4344 ?        S    17:22   0:00 nginx: worker process

主要进程pid:  15180  worker进程15181

2. nginx -V查看旧版本nginx的编译参数

[root@k8s-master nginx-1.12.2]# nginx-1.12.2/sbin/nginx.old.1.12 -V

nginx version: nginx/1.12.2

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

built with OpenSSL 1.0.2k-fips  26 Jan 2017

TLS SNI support enabled

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

[root@k8s-master nginx-1.12.2]#

如果make或者./configure报错,可以尝试安装:  yum install -y gcc-c++

3.备份旧版本二进制nginx程序,  mv nginx nginx.old

mv nginx nginx.old

4.此时我们下载【nginx1.20.2】新版本重新编译,按照旧版本的编译参数(或者自己新增编译模块)

5.拷贝新生成的二进制nginx, 移动到之前旧版本的nginx路径覆盖.

./configure --prefix=/usr/local/ --with-stream  xxxx[模块列表]

make

&make install

6.发送nginx -USR2 15180(旧版nginx主进程)进行替换,此时存在4个进程.  2个旧版nginx进程  2个新版nginx进程

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

请求2次,第一次负载到新的master,第二次负载到旧的master.

7.确认升级成功,-WINCH 信号 停止旧版master接收新的请求(此时旧版本nginx master进程没死,只是停止接收新的请求)

kill -winch 15180

旧版nginx只剩下master进程, 子进程不存在了.

此时多次访问URL, 不会出现负载均衡的情况了.

没有再出现hello world

8.若要回退版本也很简单,发送 kill -HUP 15180(旧nginx master进程)即可

此时旧版和新版nginx都在负载均衡.  把新版本nginx master kill掉即可.

此时新版nginx已经kill -QUIT 即可.

到此这篇关于Nginx生产环境平滑升级的实现的文章就介绍到这了,更多相关Nginx生产环境平滑升级内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • nginx平滑重启和平滑升级的图文教程

    目录 nginx平滑重启 平滑重启主要流程 图解 nginx平滑升级 平滑升级主要流程 图解 总结 nginx平滑重启 如果修改了nginx的配置文件(nginx.conf),想要重启nginx,可以发送系统信号给Nginx的master进程来进行. 平滑重启主要流程 向master进程发送HUB信号(reload命令) nginx -s reload kill -s gighup Nginx主进程号 master进程检查配置语法是否正确 如果配置文件或者语法错误会出现下图代码 master打开

  • 1分钟搞定Nginx版本的平滑升级与回滚的方法

    今天,我们来聊一聊,在企业实际生产环境中经常遇到的一个情况,升级Nginx到新的版本和如何回滚至旧版本. 1.环境介绍 今天准备的两个nginx版本如下: [root@nginx ~]# cd /download/nginx/ [root@nginx nginx]# ll total 1952 -rw-r--r-- 1 root root 981687 Oct 17 2017 nginx-1.12.2.tar.gz -rw-r--r-- 1 root root 1015384 Dec 4 09:

  • Linux版本中Nginx平滑升级与回退

    目录 一.平滑升级概述 1.平滑升级的定义 2.平滑升级的思路 (1)关于版本和备份 (2)向旧的Nginx的master进程发送USR2信号 (3)向旧的master进程发送winch信号,旧的worker子进程退出 (4)向旧master进程发送quit信号,旧的master进程就退出 3.平滑升级的信号 4.平滑升级示意图 二.Nginx平滑升级 1.安装依赖 2.编译并安装nginx 3.备份旧的Nginx二进制 4.向旧的master发送USR2信号 5.向旧master发送winch

  • Nginx1.8.0版本平滑升级新版本1.9.7

    首先查看现在环境nginx的版本为1.8.0 编译的参数只指定了安装路径: 复制代码 代码如下: [root@localhost sbin]# ./nginx -V nginx version: nginx/1.8.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) configure arguments: --prefix=/usr/local/nginx 平滑升级步骤如下: 下载nginx1.9.7版本,解压并进入解压后的目录 复制代

  • 图文详解Nginx版本平滑升级方案

    目录 背景: Nginx平滑升级方案 回退步骤 总结 背景: 由于负载均衡测试服务器中nginx版本过低,存在安全漏洞,查询相关修复漏洞资料,需要采取nginx版本升级形式对漏洞进行修复. Nginx平滑升级方案 1.案例采用版本介绍 旧版本 nginx-1.12.2.tar.gz 新版本 nginx-1.20.1.tar.gz 2.nginx-1.12.2版本为当前运行版本 设置端口8080和对主页index.html进行修改,后续进行平滑升级后,依然可以对其访问. 3.解压新版本 nginx

  • nginx编译安装后对nginx进行平滑升级的方法

    nginx编译安装后用了一段时间后发现当前版本有漏洞或需要新的功能时就需要对当前nginx版本进行版本升级,但又不能影响正常的使用,所以这时就需到对nginx的平滑升级,更新到最新版本了. 本文演示的是nginx-1.13.6升级到nginx-1.13.12的过程,其他版本也适用. 一.nginx新版的下载 下载页面:http://nginx.org/en/download.html wget -c http://nginx.org/download/nginx-1.13.12.tar.gz 二

  • nginx平滑升级及nginx配置文件详解

    目录 nginx平滑升级及nginx配置文件 nginx平滑升级并添加新功能 nginx配置文件 nginx.conf配置详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 网络连接相关的配置参数 fastcgi的相关配置参数 nginx作为web服务器时使用的配置:http{}段的配置参数 http{}段配置指令: nginx平滑升级及nginx配置文件 nginx平滑升级并添加新功能 1.先获取老版本的编译信息 2.获取新版本安装包和功能包 3.配置新版本或功能,

  • Nginx平滑升级的详细操作方法

    一.平滑升级概述Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是:(1)在不停掉老进程的情况下,启动新进程.(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求.(3)新进程接受新请求.(4)老进程处理完所有请求,关闭所有连接后,停止.这样就很方便地实现了平滑升级.一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块.二..升级过程具体的操作也很简单,如下: (0)查看当前版本在存放Nginx的可执行文件的目录下输入: 复制

  • 详解nginx平滑升级的过程

    1.开始之前首先查看当前的使用版本以及编译时的参数: [root@www ~]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.12.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --user=ww

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

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

  • Nginx1.21.6生产环境升级步骤

    现在要把nginx旧版本升级到新版,所以针对生产环境的升级做一个平滑升级教程,如下:服务器:CentOS7旧版本:nginx-1.19.5新版本:nginx-1.21.6 升级步骤: 1.解压新版本nginx tar -zxvf nginx-1.21.6.tar.gz 2.进入安装目录,开始编译 # 编译应与之前版本的编译相同,我这里之前编辑就是默认,所以不需要改动 ./configure 3.make,一定不要make install!!! make 4.替换二进制文件(把新版本的二进制执行文

  • c#使用FreeSql生产环境时自动升级备份数据库

    目录 项目场景: 解决方案: 概要描述: 详细说明: 总结: 项目场景: 使用FreeSql,包含所有的ORM数据库,都会存在这样的问题.在codefirst模式下,根据代码自动更新数据库,都建议不要在生产环境使用.为什么呢? 其实不建议使用,主要是根据代码自动生成数据时,极有可能会造成数据的丢失,比如修改字段类型,自动更新的结果可能并不是自己想的. 但是有一些使用场景是需要在生产环境自动升级的,比如 我们有一个CS客户端的产品,客户本地离线使用,客户本地部署,数据库也是本地数据库,版本从100

  • Django uwsgi Nginx 的生产环境部署详解

    配置生产环境 #setting.py 文件中 DEBUG = False # 生产环境 # 允许访问的域名,域名前加一个点表示允许访问该域名下的子域名,比如 www.zmrenwu.com. # test.zmrenwu.com 等二级域名同样允许访问.如果不加前面的点则只允许访问 zmrenwu.com ALLOWED_HOSTS = ["127.0.0.1",".blogzjl.site"] 创建Python虚拟环境 安装 virtualenv sudo pip

  • 生产环境之Nginx高可用方案实现过程解析

    准备工作: 192.168.16.128 192.168.16.129 两台虚拟机.安装好Nginx 安装Nginx 更新yum源文件: rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7

  • 详解Django+Uwsgi+Nginx的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署 准备条件: 1.确保有一个能够用runserver正常启动的django项目 2.项目已上传到linux 3.linux上已部署好python环境,且已安装好项目所需的模块 安装uwsgi uwsgi是python的一个模块,安装u

随机推荐