前文讲解了割接的相关检查项及命令,本文继续讲割接的关键思路:停服维护和无缝升级该如何设计。通过入口层 Nginx 与数据层 MySQL 两个典型案例,覆盖平滑升级原理、停服割接流程与不停服割接的架构设计。
割接可以理解为迁移中的一个关键部分,但两者并不等同:修改程序配置、做版本升级都需要割接操作,却不属于网站迁移的范围。
割接过程分为两种:
| 类型 | 特点 | 适用场景 |
|---|---|---|
| 停服割接 | 割接期间业务停止对外服务,影响正常访问 | 大部分场景 |
| 不停服割接 | 业务几乎完全正常对外服务,基本不影响访问 | 对可用性要求极高的场景 |
多数场景选择停服割接:不停服割接对方案设计和人员成本要求高,需要前期大量细致分析。在业务低峰期牺牲一部分用户访问换成本,是更务实的做法。
Nginx 支持平滑升级,核心是信号机制。Nginx 进程包含 master 进程(管理与分配流量)和 worker 进程(处理用户请求)。

把二进制替换为新版本 B 后,向 A 版本 master 发送 USR2 信号(或执行 make upgrade):不影响 A 版本现有 worker 的工作,同时用新二进制启动 B 版本的 master 与 worker。新流量交给 B 版本处理,老流量继续由 A 版本的 worker 处理完毕;再向旧 master 发送 WINCH/QUIT 信号使其优雅退出,完成平滑过渡。
回滚同样平滑:编译升级会保留旧版二进制为 11-Nginx基础概述.old,若新版本异常,可用 11-Nginx基础概述.old 再次通过 USR2 换回旧版本并重启 worker,实现回滚。
11-Nginx基础概述 -V 查看旧版本编译参数,在新版本编译时保持参数一致;11-Nginx基础概述 -t 做语法测试(可用 -c 指定配置文件);USR2 信号(或执行 make upgrade)完成平滑升级。重点注意三点:确认服务是否支持平滑升级、明确升级后的回滚方式、正式环境操作前先在测试环境模拟一次升级。
MySQL 的迁移与升级必须慎重细致,通常由 DBA 负责。停服割接流程:
rewrite ^(.*)$ /maintain.html break; 将所有请求转发到维护页;架构上建议把传统逻辑层拆分为业务逻辑层和服务逻辑层(中台),数据层变更只改中台与数据库的关联配置,不干扰业务层。
不停服割接对人员投入和 DBA 技术能力要求更高,核心是解决"老库与新库数据差异如何填补",有两条思路:
思路一:日志重放填平
思路二:服务层双写
割接设计的核心决策是停服还是不停服:停服割接靠"维护页 + 检查清单 + 连接切换"三步走,成本低、风险可控;不停服割接靠"CUD 日志重放"或"双写 + 存量同步"填补数据差异,适合核心链路。无论哪种方式,都要先验证平滑升级能力、备好回滚手段、测试环境先行。Nginx reload 与 MySQL 割接这两套思路,分别代表了无状态层与有状态层的升级范式。
下一章讲解 Nginx 高性能优化配置,看承载入口流量的关键组件如何压榨性能。