如何在迁移到新 VPS 时做到零停机?这是每个站长在服务器切换前最关心的问题。哪怕只宕机十几分钟,搜索引擎抓取失败、用户看到错误页面、订单数据丢失——这些损失往往比迁移本身更大。零停机迁移的核心思路,就是在旧服务器继续服务的同时,把数据完整同步到新服务器,最后通过 DNS 平滑切换,让访问者几乎感知不到后台发生了什么。
迁移前的准备工作
摸清站点现状
动手之前,先搞清楚当前站点的规模和依赖。登录现有服务器,查看网站文件总大小、数据库大小以及近 7 天修改的文件数量。这些数字决定了同步策略:文件总量小于 50GB 用 rsync 通常够用;数据库超过 10GB 要考虑主从复制替代 mysqldump。另外别忘了检查是否有 cron job、后台队列进程、邮件服务等隐性依赖。关于VPS 建站与配置的更多细节,可以参考我们的专题文章。
提前降低 DNS TTL
这是零停机的关键前置操作。大多数域名默认 TTL(生存时间)为 3600 秒甚至 86400 秒,意味着 DNS 变更后需要 1-24 小时才能全球生效。在迁移前 24-48 小时,把 TTL 降到 300 秒(5 分钟),这样最终切换时 DNS 生效窗口会从几小时压缩到几分钟。在域名注册商的 DNS 管理面板中,找到 TTL 设置项,将所有 A 记录和 CNAME 记录的 TTL 改为 300。
新 VPS 环境搭建
在新服务器上搭建与旧环境一致的运行环境:操作系统版本保持一致,Web 服务器版本匹配(Nginx 或 Apache),PHP 版本和扩展保持同步,数据库版本一致。配置好域名的虚拟主机、申请 SSL 证书(推荐用 Let’s Encrypt 的 certbot 模式在切换前预签),然后用 hosts 文件临时绑定域名到新 IP 进行测试。
在开始数据同步之前,还需要在新服务器上完成防火墙配置和安全加固。确保 SSH 端口已修改、fail2ban 已安装、必要的端口已开放。关于VPS 防火墙配置,可以参考我们的详细教程。同步过程中建议使用 screen 或 tmux 保持会话,避免因 SSH 断开导致同步中断。
数据同步:两阶段迁移法
零停机的核心技巧是「两阶段同步」——先做一次全量同步把大部分数据搬过去,切换前再做一次增量同步补齐差异。这样最终切换时只需要同步少量变更数据,停机窗口被压缩到最短。
文件同步:rsync 增量方案
rsync 是 Linux 下最常用的文件同步工具,它只传输源和目标之间的差异部分,非常适合大文件量的增量迁移。迁移前 24 小时执行初始全量同步,排除缓存和日志目录;切换前 10 分钟再执行一次带 --delete 参数的增量同步,确保两端完全一致。如果你的站点有用户上传目录,记得在排除列表中去掉它。
数据库同步
数据库同步需要短暂锁表来保证一致性。对于 MySQL/MariaDB,使用 mysqldump 导出时加上 --single-transaction 参数,它会在一个事务内完成导出,InnoDB 引擎不会锁表。切换前建议在旧站点短暂开启维护模式,导出最新数据后立即恢复。对于大多数中小型站点,这个窗口用户几乎感知不到。如果你需要VPS 高可用架构方面的指导,可以参考我们的相关文章。
动态内容站点的额外处理
如果你的站点有用户注册、评论、订单等动态功能,数据同步时还要注意:用户会话数据默认存在本地 /tmp/ 目录,迁移后用户会被迫重新登录,这属于正常现象。用 crontab -l 导出旧服务器的定时任务,在新服务器导入。如果旧服务器跑了邮件服务,确保邮件队列在切换前已清空。对于 WordPress 站点,迁移后记得更新 wp-config.php 中的数据库连接信息,并在后台执行一次「永久链接」保存操作以刷新 rewrite 规则。
DNS 切换与验证
执行 DNS 切换
确认新服务器站点通过 hosts 绑定测试正常、最新增量数据同步已完成、SSL 证书已在新服务器生效后,在域名注册商后台将 A 记录从旧服务器 IP 改为新服务器 IP。由于提前把 TTL 降到了 300 秒,全球 DNS 节点会在 5 分钟内更新。切换时间建议选在访问量最低的凌晨 2-4 点。
切换后验证清单
DNS 修改后,立即在新服务器上监控访问日志确认请求开始进来。同时用 dig 命令从不同的公共 DNS 服务器(如 8.8.8.8、1.1.1.1、114.114.114.114)查询域名解析结果,确认已指向新 IP。完整的验证清单包括:首页和核心页面能正常加载,表单提交、搜索、登录等交互功能正常,SSL 证书显示有效,数据库读写正常,cron job 在新服务器按预期执行,旧服务器的日志显示请求量归零。
保留旧服务器
切换完成后,不要急着释放旧服务器。建议保留 7 天,确认搜索引擎已重新抓取、所有 CDN 节点缓存已过期、用户没有报告异常后再关闭。这期间旧服务器可以开启维护模式,避免数据分歧。
常见问题与回滚方案
如果部分用户反馈看到旧内容,大概率是 DNS 缓存未过期,建议用户清空本地 DNS 缓存或等 300 秒后重试。新服务器上最常见的报错是数据库连接失败,原因是 MySQL 用户权限绑定了旧服务器 IP,需要在新服务器重新创建用户并授权。如果切换后浏览器提示证书错误,检查证书是否覆盖了 www 和裸域名,Let’s Encrypt 申请时用 -d domain.com -d www.domain.com 同时覆盖两个。
万一新服务器出现严重问题需要回滚,步骤很简单:把 DNS A 记录改回旧服务器 IP,由于 TTL 已是 300 秒,5 分钟内流量就会切回旧服务器。这也是为什么建议保留旧服务器 7 天——它是你的安全网。回滚后记得检查旧服务器的数据库是否有切换期间产生的新数据,避免数据丢失。
选择靠谱的 VPS 主机
迁移方案再完善,如果新服务器本身不稳定,一切努力都白费。选择 VPS 时建议关注 SSD 存储的 I/O 性能、机房到目标用户群的网络延迟、是否支持快照备份以及工单响应速度。Hostease 提供的 VPS 方案内置快照备份和中文工单支持,对中小站长来说是比较务实的选择。如果你的站点跑在 WordPress 上,WordPress 性能优化技巧也能帮助你在迁移后进一步提升访问速度。更多关于VPS 选购建议,欢迎查阅我们的技术博客。
总结来说,VPS 站点迁移零停机的核心是「提前准备 + 两阶段同步 + 快速切换」。我们建议你把这篇文章收藏为迁移检查清单,下次换服务器时按步骤执行。如果你正在为选择哪种迁移方案犹豫,可以先从测试环境跑一遍完整流程,确认无误后再操作生产环境。如果需要专业的迁移协助,可以考虑联系 Hostease 技术支持团队获取帮助。