Nginx|源码编译Nignx => 平滑升级与回退(小白进阶篇3)

架构详解

  • 平滑升级
    • 源码编译
    • 进行平滑升级
  • 平滑回退
  • 总结
    • 平滑升级的作用
    • 平滑回退的作用
    • 技术总结


版本:nginx1.12 nginx1.14
下载:https://nginx.org/download/nginx-1.12.2.tar.gz
https://nginx.org/download/nginx-1.14.2.tar.gz
解析: 掌握了1.12与1.14平滑升级 ,其他版本操作都一样
平滑升级
编译安装nginx1.12
1. 获取源码包:wget https://nginx.org/download/nginx-1.12.2.tar.gz 2. 解压缩指定目录:tar -xvzf nginx-1.12.2.tar.gz -C /usr/local/src/ 3. 进入nginx目录:cd /usr/local/src/nginx-1.12.2/ 4. 配置编译安装:./configure --user=nginx --group=nginx --prefix=/usr/local/nginx12 --with-http_stub_status_module --with-http_ssl_module && make && make install


编译安装nginx1.14
1. 获取源码包:wget https://nginx.org/download/nginx-1.14.2.tar.gz 2. 解压缩指定目录:tar -xvzf nginx-1.14.2.tar.gz -C /usr/local/src/ 3. 进入nginx目录:cd /usr/local/src/nginx-1.14.2/ 4. 配置编译安装:./configure --user=nginx --group=nginx --prefix=/usr/local/nginx14 --with-http_stub_status_module --with-http_ssl_module && make && make install


进行平滑升级
  • kill -USR2 旧版本的主进程号 (让旧版本的worker进程不再接受请求)
  • kill -WINCH 旧版本的主进程号 (关闭旧版本的worker进程)
1. ps aux|grep ngin[x]#查看nginx的主进程号和工作进程号 ? 2. mv /usr/local/nginx12/sbin/nginx{,.bak}#重命名nginx12的执行程序 ? 3. cp /usr/local/nginx14/sbin/nginx/usr/local/nginx12/sbin/nginx #复制nginx14的执行程序给nginx12 ? 4. /usr/local/nginx12/sbin/nginx -V#查看版本信息 nginx version: nginx/1.14.25. 查看进程号:ps aux|grep ngin[x] root172660.00.0459481124 ?Ss01:110:00 nginx: master ? 6. 给主进程发送User2信号:kill -USR2 旧进程号(17266) 相对应 ls nginx12/logs/nginx.pid.oldbin#pid文件被重命名 ? 7. 发送WINCH信号: kill -WINCH 旧进程号(17266) ? 8. 重启nginx: pkill nignx /usr/local/nginx12/sbin/nginx ? 9. 访问网站查看版本号:curl -i http://IP HTTP/1.1 200 OK Server: nginx/1.14.2


回退版本 Kill –HUP 旧的主进程号:Nginx将在不重载配置文件的情况下启动它的工作进程;
Kill –QUIT 新的主进程号:从容关闭其他工作进程(woker process);
Kill –TERM 新的主进程号:强制退出;

1. 先查看进程:ps aux|grep nginx root17266(旧)0.00.0460921904 ?Ss00:470:00 nginx: root17279(新)0.00.0459563248 ?S00:530:00 nginx: nginx172800.00.0464041872 ?S00:530:00 nginx:.. ? 2. 开启旧进程:kill -HUP 17266 ? 3. 关闭新进程:kill -QUIT 17279 ? 4. 查看进程:ps aux|grep ngin[x] ? 5. 恢复原来的执行文件:rm -rfnginx12/sbin/nginx mv nginx12/sbin/nginx.baknginx12/sbin/nginx ? 6. 重启nginx: pkill nginx /usr/local/nginx12/sbin/nginx ? 7. 访问网站查看版本号:curl -i http://IP HTTP/1.1 200 OK Server: nginx/1.12.2


总结 平滑升级
作用:为nginx添加新的模块优化,版本性能、稳定性
平滑升级也可以说是"热升级" => 在不停止对User的服务进行升级版本,继续对外服务,不受影响。 原理: 1. 在不停掉旧版本程序的运行进程的情况下,启动新版本的进程。 2. 旧版本的进程负责处理之间没有处理完成的请求,但不接受任何请求 3. 由新版本的进程接受用户的请求 4. 当旧程序处理完之前的请求后,关闭所有连接、停止服务。


平滑回退
作用:将新版本回滚至旧版本,主要是新本的稳定性与漏洞,在有些场景对版本的要求很高
1. 将旧版本的进程重新拉起来 2. 再将新版本的进程停止掉

【Nginx|源码编译Nignx => 平滑升级与回退(小白进阶篇3)】
技术总结
-----------平滑升级----------- 1. 先重命名旧版本的二进制.bak结尾的文件后,在将新版本的二进制执行文件复制到旧版本中。 2. 给旧版本的进程发送USR2指令,让其不在接受请求后 3. 再给旧版本的进程发送WINCH指令,让其停止服务,关闭 4. 使得新版本来接受用户的请求-----------平滑回退----------- 1. 使用HUP指令将旧版本的进程拉起来 2. 使用QUIT指令将新版本的进程关闭 3. 在将旧版本的二进制文件替换回来 4. 使得旧版本重新对外提供服务

    推荐阅读