searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Nginx热升级原理及实践

2023-09-19 01:40:53
154
0

Nginx的热升级主要依赖Master-Worker进程模型以及信号机制来实现的。

1. Master-Worker进程模型

  1. Master 进程:在启动时,Nginx会创建一个Master进程,负责管理所有工作进程。Master进程主要负责初始化Nginx,读取配置文件,以及控制和管理所有工作进程。
  2. Worker 进程:Nginx会创建多个Worker进程,每个Worker进程都负责处理客户端的请求。Worker进程会被Master进程派遣任务,从而实现并行处理请求的能力。

2. Nginx中的信号管理机制

Nginx的信号管理机制是Nginx热升级的基石,因此在了解其热升级原理前,首先要了解其信号管理机制。

下面是Nginx中常用的信号及其作用:

  • TERM:这是默认的关闭信号。当收到这个信号时,Nginx会优雅地关闭所有工作进程,允许它们完成当前的请求并关闭连接。
  • QUIT:这也是一个优雅关闭信号,与TERM类似,但通常用于停止主进程。
  • HUP:重新加载配置文件。当Nginx接收到这个信号时,它会重新加载配置文件,而无需停止服务。这对于在不中断服务的情况下应用配置更改非常有用。
  • USR1:重新打开日志文件。当日志文件需要轮换时,可以向Nginx发送此信号。
  • USR2:平滑升级可执行文件。用于在不停止服务的情况下更新Nginx可执行文件。新的Nginx进程会启动,然后逐渐接管流量,旧的进程会逐渐关闭。
  • WINCH:优雅停止工作进程。这个信号可以用于关闭工作进程,但不会影响主进程。它可以让你逐渐地减少工作进程的数量。
  • KILL:强制关闭。这个信号会立即终止Nginx进程,不会进行清理或完成未完成的请求。
  • QUIT:优雅地关闭所有工作进程。

了解了上述信号,就要知道如何发送这些信号给Nginx进程,要向Nginx发送信号,可以使用kill命令和进程ID,例如:

# SIGNAL:信号
# PID:进程号
sudo kill -s SIGNAL PID

3. Nginx热升级原理

了解了Nginx的进程模型和信号管理机制,接下来就来说说其热升级原理。

通过上面的信号管理机制,我们可以知道,通过给Nginx进程发送信号的方式来触发Nginx进程重新加载配置文件(HUP)、更新可执行文件(USR2)、优雅停止Worker进程(WINCH)以及优雅关闭所有Worker进程(QUIT)。Nginx热升级原理就是通过组合这些信号来实现优雅替换Nginx可执行文件,实现请求平滑迁移到新版本进程中。

基本步骤如下:

  • 备份老版本可执行文件
  • 准备新的可执行文件
  • 向Master进程发送USR2信号
  • Master进程启动新Worker进程
  • 新Worker进程接管连接
  • 旧Worker进程逐渐关闭
  • 如果升级失败,则通过HUP信号重新加载配置,进行回滚

4. Nginx热升级实践

4.1 确定老版本版本号及进程号

当前版本:1.25.1

老版本master进程号:26346

4.2 备份老版本可执行文件以及配置文件

cd /usr/local/nginx
cp  sbin/nginx ./sbin/nginx.20230919.old
cp -r conf conf.20230919.old

4.3 拷贝新的Nginx可执行文件

4.4 向老版本发送USR2信号,触发可执行文件替换

kill -USR2 26346

从图中可以看出,已经启动了一个新版本的Master进程,新版本Master进程号:30951

此时已经有请求路由到新版本进程中处理,已经可以验证新版本是否有问题。

4.5 如果验证没问题,可以通过WINCH信号停止老版本的请求处理

kill -WINCh 26346

从截图中,我们可以看出,老版本已经没有Worker进程了(图中Worker process 26347已经退出)

4.6 如果验证没问题,此时已经可以退出老版本的Master进程

kill -QUIT 26346    

4.7 如果验证有问题,需要回滚,可以通过HUP信号

回滚可执行文件

回滚进程

kill -HUP 26346

通过给老版本进程发送HUP信号,可以使老版本重新加载配置文件并启动老版本Worker进程,后续就可以通过WINCH信号做新老版本进程之前的请求迁移。步骤参考4.5和4.6,本节不再赘述。

5. Nginx热升级的优势

  • 无需停机时间:平滑升级使得Nginx可以在不中断服务的情况下完成升级,保证了网站的连续性和稳定性。
  • 避免请求丢失:新的Worker进程会逐渐接管连接,这样可以避免在升级过程中出现请求丢失的情况。
0条评论
作者已关闭评论
平常心
4文章数
0粉丝数
平常心
4 文章 | 0 粉丝
原创

Nginx热升级原理及实践

2023-09-19 01:40:53
154
0

Nginx的热升级主要依赖Master-Worker进程模型以及信号机制来实现的。

1. Master-Worker进程模型

  1. Master 进程:在启动时,Nginx会创建一个Master进程,负责管理所有工作进程。Master进程主要负责初始化Nginx,读取配置文件,以及控制和管理所有工作进程。
  2. Worker 进程:Nginx会创建多个Worker进程,每个Worker进程都负责处理客户端的请求。Worker进程会被Master进程派遣任务,从而实现并行处理请求的能力。

2. Nginx中的信号管理机制

Nginx的信号管理机制是Nginx热升级的基石,因此在了解其热升级原理前,首先要了解其信号管理机制。

下面是Nginx中常用的信号及其作用:

  • TERM:这是默认的关闭信号。当收到这个信号时,Nginx会优雅地关闭所有工作进程,允许它们完成当前的请求并关闭连接。
  • QUIT:这也是一个优雅关闭信号,与TERM类似,但通常用于停止主进程。
  • HUP:重新加载配置文件。当Nginx接收到这个信号时,它会重新加载配置文件,而无需停止服务。这对于在不中断服务的情况下应用配置更改非常有用。
  • USR1:重新打开日志文件。当日志文件需要轮换时,可以向Nginx发送此信号。
  • USR2:平滑升级可执行文件。用于在不停止服务的情况下更新Nginx可执行文件。新的Nginx进程会启动,然后逐渐接管流量,旧的进程会逐渐关闭。
  • WINCH:优雅停止工作进程。这个信号可以用于关闭工作进程,但不会影响主进程。它可以让你逐渐地减少工作进程的数量。
  • KILL:强制关闭。这个信号会立即终止Nginx进程,不会进行清理或完成未完成的请求。
  • QUIT:优雅地关闭所有工作进程。

了解了上述信号,就要知道如何发送这些信号给Nginx进程,要向Nginx发送信号,可以使用kill命令和进程ID,例如:

# SIGNAL:信号
# PID:进程号
sudo kill -s SIGNAL PID

3. Nginx热升级原理

了解了Nginx的进程模型和信号管理机制,接下来就来说说其热升级原理。

通过上面的信号管理机制,我们可以知道,通过给Nginx进程发送信号的方式来触发Nginx进程重新加载配置文件(HUP)、更新可执行文件(USR2)、优雅停止Worker进程(WINCH)以及优雅关闭所有Worker进程(QUIT)。Nginx热升级原理就是通过组合这些信号来实现优雅替换Nginx可执行文件,实现请求平滑迁移到新版本进程中。

基本步骤如下:

  • 备份老版本可执行文件
  • 准备新的可执行文件
  • 向Master进程发送USR2信号
  • Master进程启动新Worker进程
  • 新Worker进程接管连接
  • 旧Worker进程逐渐关闭
  • 如果升级失败,则通过HUP信号重新加载配置,进行回滚

4. Nginx热升级实践

4.1 确定老版本版本号及进程号

当前版本:1.25.1

老版本master进程号:26346

4.2 备份老版本可执行文件以及配置文件

cd /usr/local/nginx
cp  sbin/nginx ./sbin/nginx.20230919.old
cp -r conf conf.20230919.old

4.3 拷贝新的Nginx可执行文件

4.4 向老版本发送USR2信号,触发可执行文件替换

kill -USR2 26346

从图中可以看出,已经启动了一个新版本的Master进程,新版本Master进程号:30951

此时已经有请求路由到新版本进程中处理,已经可以验证新版本是否有问题。

4.5 如果验证没问题,可以通过WINCH信号停止老版本的请求处理

kill -WINCh 26346

从截图中,我们可以看出,老版本已经没有Worker进程了(图中Worker process 26347已经退出)

4.6 如果验证没问题,此时已经可以退出老版本的Master进程

kill -QUIT 26346    

4.7 如果验证有问题,需要回滚,可以通过HUP信号

回滚可执行文件

回滚进程

kill -HUP 26346

通过给老版本进程发送HUP信号,可以使老版本重新加载配置文件并启动老版本Worker进程,后续就可以通过WINCH信号做新老版本进程之前的请求迁移。步骤参考4.5和4.6,本节不再赘述。

5. Nginx热升级的优势

  • 无需停机时间:平滑升级使得Nginx可以在不中断服务的情况下完成升级,保证了网站的连续性和稳定性。
  • 避免请求丢失:新的Worker进程会逐渐接管连接,这样可以避免在升级过程中出现请求丢失的情况。
文章来自个人专栏
深入实践Kubernetes
4 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0