联系我们

info@serverion.com

给我们打电话

+1 (302) 380 3902

用于 DevOps 的 NGINX 配置:Serverion 实现零停机部署的技巧

用于 DevOps 的 NGINX 配置:Serverion 实现零停机部署的技巧

零停机部署 这意味着在不中断服务的情况下更新应用程序——这对于即使是短暂的中断也可能造成数百万美元损失的企业来说至关重要。NGINX 使用其主从进程模型和智能信号(例如 USR2 (启动新流程)和 胡普 (重新加载配置)。关键如下:

  • 工作原理:NGINX 将流量从旧工作者转移到更新的工作者,而不会断开连接。
  • 关键步骤:使用信号(USR2, 胡普等),配置 nginx.conf 正确,并在重新加载之前验证更改。
  • 技术:将 NGINX 与蓝绿部署或 Docker 等方法相结合,实现无缝更新。
  • 健康检查:使用 NGINX 的被动或主动健康检查,确保只有健康的服务器处理流量。

通过正确的配置,您可以在更新期间保持服务顺利运行、保护收入并维护客户信任。

NGINX 零停机部署基础知识

NGINX

零停机部署说明

NGINX 采用主从模型来处理更新,且不会中断服务。主进程负责配置和控制,而工作进程则管理客户端连接。这种设置允许流量在更新期间无缝地从旧工作进程转移到新工作进程,从而确保服务不中断。

NGINX 连接管理

NGINX 依靠特定的信号来控制升级或配置更改期间的进程:

  • USR2:启动新的主进程和工作进程。
  • 绞盘:正常停止旧工作进程。
  • 胡普:重新加载配置并替换工人。
  • 辞职:正常关闭主机和工作器。

重新加载时,NGINX 将旧的主进程 ID 移动到 /运行/nginx.pid.oldbin,将新的主进程 ID 写入 /运行/nginx.pid,并允许老的worker在关闭之前完成活跃的请求。

现代应用程序部署:如何使用 NGINX 和 JFrog 来……

JFrog

设置 NGINX 以实现持续运行

为了在重新加载期间保持连接处于活动状态,请利用 NGINX 的主从架构和以下设置。

NGINX 关键配置步骤

打开 多接受 让工作进程处理每个事件的多个连接。以下是示例配置 nginx.conf:

worker_processes 自动;pid /run/nginx.pid;事件 { worker_connections 1024;multi_accept 开启;} http { 上游后端 { 服务器 backend1.example.com:8080;服务器 backend2.example.com:8080;keepalive 32;} 服务器 { 监听 80;服务器名称 example.com;位置 / { proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header 连接“”;proxy_set_header 主机 $host;proxy_set_header X-Real-IP $remote_addr;} } } 

无需停机即可重新加载配置

  1. 重新加载当前工作人员以应用更改:
    nginx -s 重新加载 
  2. 检查更新后的主进程ID:
    猫/运行/nginx.pid 
  3. 在不停止流量的情况下执行二进制升级:
    杀死 -USR2 $(cat /run/nginx.pid) 杀死 -WINCH $(cat /run/nginx.pid.oldbin) 

这些措施使得新老员工之间的交通能够顺利过渡,确保服务不间断。

NGINX 的部署方法

您可以使用 NGINX 通过利用蓝绿设置或基于容器的方法等技术实现零停机部署。

蓝绿部署设置

使用 NGINX,您可以管理两个环境之间的流量 - 通常称为 蓝色的绿色的。这些环境完全相同,但每次只能激活一个。具体操作如下:

  • 将更新的版本部署到非活动环境(例如绿色)。
  • 运行健康检查以确保新版本正常运行。
  • 验证后,更新 NGINX 配置 将流量路由到更新的环境。
  • 使用 胡普 信号以避免丢失任何活动连接。

这种方法可确保平稳过渡,不会中断服务。

Docker 和 NGINX 集成

将 Docker 与 NGINX 结合使用,可简化部署,为应用程序层和代理层维护一致的环境。以下是如何实现零停机更新的方法:

  • 与当前活动容器一起启动新容器。
  • 执行健康检查以确认新容器已准备就绪。
  • 修改 NGINX 上游配置以包含新容器。
  • 使用 胡普 信号,让老工人在退出之前完成处理。

这种方法可确保在更新应用程序时服务不中断。

测试和验证

配置健康检查

NGINX 健康检查有助于确保只有正常运行的服务器才能处理流量。这些检查与上游配置和蓝绿路由协同工作。NGINX 提供两种类型的健康检查: 被动的 (可在 NGINX 开源中使用)和 积极的 (NGINX Plus 独有)。

对于 NGINX Open Source 中的被动健康检查,请按如下方式设置上游块:

上游后端 { 服务器 backend1.serverion.com:8080 max_fails=3 fail_timeout=30s; 服务器 backend2.serverion.com:8080 max_fails=3 fail_timeout=30s; 区域后端 64k; } 

如果您使用的是 NGINX Plus,则可以通过添加以下代码来启用主动健康检查: 健康检查 指令以及 匹配 堵塞:

位置 / { proxy_pass http://backend; health_check interval=5s failed=3 passing=2 mandatory persistent; match health_check { status 200; header Content-Type = application/json; body ~ '"status":"UP"'; } } 

在重新加载 NGINX 之前,请务必验证这些配置。

验证配置

重新加载之前,请务必测试 NGINX 配置是否正确。使用以下命令:

nginx -t -c /路径/到/你的/nginx.conf 

零停机部署要点

实现零停机部署取决于 NGINX 的周密配置和稳固的基础架构规划。这些要素协同工作,确保更新不间断进行。

以下是成功的关键因素:

  • 过程控制和配置验证:充分利用 NGINX 的架构,同时遵守全面的测试协议。
  • 基础设施稳定性:在整个部署过程中保持一致的性能并确保严密的安全性。

有关健康检查和回滚步骤的详细信息,请查看 测试和验证 部分。

服务器的平台以可靠的稳定性和安全性支持这些努力。其 全球数据中心 在更新期间保持性能稳定,内置的 DDoS 保护可确保安全性保持不变。

从小规模开始,在非关键服务上使用功能切换。逐步扩大规模,同时将定期测试、密切监控和清晰的回滚计划作为策略的核心。

相关博客文章

zh_CN