源码编译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.2

5. 查看进程号:ps aux|grep ngin[x]
root      17266  0.0  0.0  45948  1124 ?        Ss   01:11   0: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
root      17266(旧)  0.0  0.0  46092  1904 ?        Ss   00:47   0:00 nginx:
root      17279(新)  0.0  0.0  45956  3248 ?        S    00:53   0:00 nginx:
nginx     17280  0.0  0.0  46404  1872 ?        S    00:53   0:00 nginx:.. 
​
2. 开启旧进程:kill -HUP 17266
​
3. 关闭新进程:kill -QUIT 17279
​
4. 查看进程:ps aux|grep ngin[x]
​
5. 恢复原来的执行文件:rm -rf  nginx12/sbin/nginx
                    mv nginx12/sbin/nginx.bak  nginx12/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. 再将新版本的进程停止掉

技术总结

-----------平滑升级-----------
1. 先重命名旧版本的二进制.bak结尾的文件后,在将新版本的二进制执行文件复制到旧版本中。
2. 给旧版本的进程发送USR2指令,让其不在接受请求后
3. 再给旧版本的进程发送WINCH指令,让其停止服务,关闭
4. 使得新版本来接受用户的请求

-----------平滑回退-----------
1. 使用HUP指令将旧版本的进程拉起来
2. 使用QUIT指令将新版本的进程关闭
3. 在将旧版本的二进制文件替换回来
4. 使得旧版本重新对外提供服务

你可能感兴趣的:(Nginx,nginx,云计算)