Nginx 实现平滑升级和增加模块

it2023-06-05  77

      如果我们需要对当前的Nginx服务进行升级 ,应用新的模块,最简单的方式是停下来,然后开启新的Nginx服务,那么给我们的用户体验是非常差的,会导致用户在一段时间内无法访问我们的服务器为了解决这个问题,Nginx提供了平滑升级的方案。       为了实现nginx服务器的平滑升级,新安装的服务器路径应该和旧的一致。因此建议用新安装的服务器之前先备份一下我们的旧nginx服务器,如果由于种种原因不能保持新旧客户端路径一致则可以做一下操作,将旧的服务器路径更改为新的路径,新的服务器放入旧的路径中 过程如下:      一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块。,Nginx方便地帮助我们实现了平滑升级。其原理简单概括: 在不停掉老进程的情况下,启动新进程。老进程负责处理仍然没有处理完的请求,但不再接受处理请求。新进程接受新请求。老进程处理完所有请求,关闭所有连接后,停止。

一、主要过程如下

      需求:现在我们 需要将原有的nginx版本1.8.0 进行升级为官方推荐稳定版本1.18.0, 并在不影响业务的情况下添加SSL和pcre模块。 1. 下载官方的最新稳定版本 wget https://nginx.org/download/nginx-1.18.0.tar.gz 2. 解压安装包 tar zxvf nginx-1.18.0.tar.gz 3. 切换到1.18 解压目录下执行 ./configure命令(保持原nginx 的 --prefix 安装路径) cd /download/nginx-1.18.0 ./configure --prefix=/usr/local/nginx/nginx-1.8.0 --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre 4.执行make ,执行完成后不需要执行 make install make 5. 把原有的nginx二进制文件改名 nginx.old mv /usr/local/nginx/nginx-1.8.0/sbin/nginx /usr/local/nginx/nginx-1.8.0/sbin/nginx_old 6. 拷贝新编译好的nginx文件到sbin目录 cp /download/nginx-1.18.0/objs/nginx /usr/local/nginx/nginx-1.8.0/sbin 7. 使用USR2信号量,启动一个新的nginx进程。新旧Nginx进程会一起工作; kill -USR2 `cat /usr/local/nginx/nginx-1.8.0/logs/nginx.pid`       注释:Nginx服务接受到USR2的信号后,首先将旧的Nginx。pid文件后面添加一个.oldbin变成了nginx.pid.oldbin 然后执行新版本的Nginx服务器的二进制文件启动服务,如果启动成功那么我们将会有两个Nginx服务在提供服务。如果新的Nginx服务配置文件有问题那么将显示错误然后任然使用旧的Nginx

8. 查看nginx 进程状态,此时或多出一个nginx进程(一个master和worker)

ps aux | grep nginx

9. 使用 WINCH 信号量,平滑停止旧的master对应的worker进程,这个时候由新的Nginx处理服务请求

kill -WINCH `cat /usr/local/nginx/nginx-1.8.0/logs/nginx.pid.oldbin`

此时可以有2个操作:

选择启用新的Nginx 进程 (可以理解为commit),使用 QUIT 信号量 平缓结束 旧的的pid kill -QUIT `cat /usr/local/nginx/nginx-1.8.0/logs/nginx.pid.oldbin` 或者启用旧的Nginx进程(可以理解为rallback),使用 HUP 信号量 平缓重启 使用 旧的pid // 执行 HUP,恢复原来的旧的Nginx 进程 kill -HUP `cat /usr/local/nginx/nginx-1.8.0/logs/nginx.pid.oldbin` //在执行QUIT ,结束新的Nginx 进程 kill -QUIT `cat /usr/local/nginx/nginx-1.8.0/logs/nginx.pid`

注释:Nginx 启动停止可以参考:https://blog.csdn.net/womenyiqilalala/article/details/109178194 10. 查看安装后的版本

11. 查看安装时候的参数(切换到安装目录 /sibn , 执行./nginx -V)

最新回复(0)