列出所有要迁移的组件:网站静态/动态文件、数据库(类型、版本)、缓存、会话存储、任务队列、证书、域名、邮件服务、第三方回调。记录当前性能:CPU、内存、磁盘I/O、带宽、峰值并发。确定业务窗口、可接受的最大切换时间(目标零停机意味着短暂停写或零写中断)。制定回滚方案、联系人清单和测试计划。
选择在台湾有物理节点或数据中心的云服务商,确认提供浮动IP/弹性IP、私有网络、负载均衡器、BGP或Anycast能力。确认备份、快照、监控日志、快起镜像选项。按评估的性能需求选机型(CPU、内存、SSD),并预留带宽与防火墙规则。申请试用或预置快照镜像加速部署。
创建与本地相同或兼容的操作系统与运行时(例如 Ubuntu/CentOS、PHP/Node/Python 版本)。配置防火墙(只开放必要端口),安装监控与日志采集(Prometheus/Datadog/ELK),创建用户和SSH密钥。保留与本地相同的目录结构,便于同步与路径兼容。
第一次用rsync做全量同步,命令示例:rsync -azP --delete --exclude='cache/' /var/www/ user@taiwan_ip:/var/www/。为了接近零停机,先做一次全量同步(业务不受影响),然后用定时增量同步(每几分钟)或 lsyncd 实时同步变更,最终在切换前做一次短暂停写的最终rsync。
方法一:主从复制先建立从库在台湾主机,步骤:在新库 my.cnf 设置 server-id=2、log_bin=ON;在旧库创建复制用户:CREATE USER 'repl'@'%' IDENTIFIED BY 'pwd'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; 使用 mysqldump --single-transaction --master-data=2 生成数据快照并导入到新库。然后在新库上执行 CHANGE MASTER TO MASTER_HOST='old_ip', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=12345; START SLAVE; 验证 SHOW SLAVE STATUS\G 是否 Slave_IO_Running/Slave_SQL_Running 均为 Yes。方法二(复杂但更低风险):配置双主或中间写入代理(如MaxScale、ProxySQL)在切换时把写流量切换到新主。
将会话存储从本地文件迁移到集中式(Redis/ memcached)并配置成高可用。确保应用读取同一Redis实例,这样在切换应用服务器时用户不会丢失登录状态。对于文件上传类数据,优先使用对象存储(S3兼容)或NFS/SMB共享,不能仅靠本地磁盘,否则需要同步策略。
导出现有证书与私钥,复制到台湾主机并确认权限,或者直接在台湾主机上用Certbot申请Let's Encrypt证书。为避免挑战失败,提前把域名的ACME验证记录准备好。将DNS TTL提前72小时调低到60-300秒以便切换时能快速生效(注意TTL降级需提前生效时间)。
在台湾主机上用hosts文件或内网域名做完整功能与集成测试:静态页面、登录、支付回调、文件上传、后台任务、邮件发送等。做压力测试(ab、wrk)模拟峰值流量,确认响应与并发能力。检查日志、慢查询、错误率,按需调整索引或缓存。
1) 提前24小时将DNS TTL降低。2) 在新机上把数据库做为从库并确保延迟为0。3) 用双写或写分流(ProxySQL/负载均衡)短时间开启对新旧同时写入,观察无异常。4) 在低峰时段执行最终同步:短暂停写(通常数十秒)或将应用切至只读模式(极短时间),做一次rsync --delete与 mysql 再次同步二进制日志位点。5) 切换写入主库到新主(调整ProxySQL或修改主从指向),确认应用写入成功。6) 更新DNS或浮动IP指向新机,TTL短时内生效。7) 逐步从负载均衡移除旧机并观察实时监控。
切换后密切监控错误日志、慢查询、CPU/网络、用户反馈。保留旧服务器至少一到两天运行且不做自动销毁,以便快速回滚。回滚流程要练习:若必须回退,先将流量切回旧主,并把在新主上的写入变化通过增量导出再同步回旧主,或直接把旧主作为新主重新指向。
确认防火墙规则、关闭不必要端口、启用自动更新或补丁策略、配置备份策略(数据库二进制日志与全备结合)并测试恢复。为降低未来迁移成本,采用基础设施即代码(Terraform/Ansible)记录部署脚本;将日志集中化与告警规则定义清楚。
问:数据库主从复制的延迟会影响零停机吗? 答:只要延迟接近0且切换时使用最后的binlog位点进行一次短暂停写的最终同步,就不会丢数据。关键是先把新库做为从库并持续同步,切换时应用短暂停写或通过代理切换写主。
问:如果DNS切换生效慢怎么办? 答:预先将TTL降到60秒并提前生效;切换时使用云厂商的浮动IP或负载均衡器可以在分钟级完成路由切换,作为DNS延迟的备选方案。
问:如何处理用户上传文件以避免数据丢失? 答:最佳做法是把上传文件存储在对象存储或共享文件系统;若仍使用本地磁盘,必须在迁移期间持续同步(lsyncd或短周期rsync)并在最终切换前做一次强制同步,切换后立即验证文件完整性。