1. 迁移前的总体规划与准备
迁移前先做可行性分析与时序表:确定迁移窗口、评估业务可容忍的最大延迟与数据一致性要求、列出需要迁移的服务(网站静态文件、用户上传、数据库、缓存、邮件等)。准备清单包括新
香港机房的公网IP、带宽、镜像操作系统、必要软件版本(Nginx/Apache、MySQL/MariaDB、Redis、PHP、Certbot等)、运维账号与密码管理。做一次完整的当前系统快照与备份(文件与数据库),并记录现有负载均衡与防火墙规则。
2. 在香港机房部署基础环境
在香港机房按生产环境相同的配置部署服务器或虚拟机:建立相同版本的Web、应用、DB、缓存节点。配置时间同步(ntp/chrony)、防火墙、安全组,安装监控与日志采集(agent)。建议先单独完成环境验证:用内部IP或 hosts 指向测试,运行功能验证用 curl / 浏览器做回归测试。
3. 静态文件与上传文件的同步策略
选择合适工具:rsync、lsyncd(实时同步)、Unison 或对象存储(S3兼容)迁移。初始全量同步示例命令:rsync -azP --delete --bwlimit=2000 /var/www/ user@hk-server:/var/www/。完成全量后启用增量实时同步:部署 lsyncd 在老机房,配置同步到香港的目标目录,示例配置包含排除缓存目录与临时文件。若使用对象存储,可将上传改写为同时写入两个存储(双写)。
4. 数据库(MySQL/MariaDB)零停机迁移方法
推荐使用复制(replication)而非单次 mysqldump 切换。步骤:在新机房部署 MySQL,配置为从库,确保版本兼容并启用 binlog。在旧主库获取当前 binlog 坐标:执行 FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;(记录 File 和 Position),用 mysqldump --single-transaction 导出初始快照并导入到从库;然后配置 CHANGE MASTER TO MASTER_LOG_FILE='file', MASTER_LOG_POS=pos, MASTER_HOST='old-master-ip', ...; START SLAVE; 等待延迟为 0。若流量双向变化需求,考虑 GTID 或主主复制并处理自增ID冲突。完成同步并验证一致性后,再将应用切到新库。
5. 动态数据一致性与缓存同步
缓存(Redis/Memcached)不建议直接同步,通常在切换时清理或重建缓存。对会话存储采用集中式(如Redis)并考虑将Redis迁移到HA架构或使用跨机房复制(注意延迟与一致性)。如果存在文件与数据库并发写入(如用户上传并写DB记录),建议在应用层实现双写:在旧环境继续服务同时将写请求异步复制到香港机房目标,或使用消息队列(Kafka/RabbitMQ)来保证写操作在两端都能被重放。
6. 负载与流量切换策略(确保零停机)
常见方法:A)负载均衡器中先加入香港节点,按权重逐步提升;B)使用全局负载均衡/Anycast或CDN做流量引导;C)DNS权重切换或降低TTL后逐步更改记录。建议优先使用反向代理/负载均衡(如HAProxy、Nginx upstream),在旧机房的LB上添加新香港节点并逐步减小旧节点权重,观察流量与错误率,最后移除旧节点。若只能改DNS,先将A记录TTL降到60s或更低,等待生效,再做权重迁移或直接替换IP。
7. SSL证书与域名配置注意事项
将SSL证书和私钥安全地复制到香港机房(scp/rsync,注意权限),或在香港机房重新申请证书(推荐使用ACME自动签发)。确认新机房的域名解析已正确指向并且防火墙放行 80/443。若使用通配符证书,确保私钥只在受控主机可用,并更新负载均衡的SNI配置。
8. 会话粘滞、文件锁与事务处理
如果应用依赖会话粘滞(sticky sessions),需要在切换前统一会话存储(例如把 PHP session 存到 Redis),以避免用户在切换过程中丢失登录状态。对于依赖文件锁的应用,确保迁移时锁机制仍然有效,或者重构为数据库锁或分布式锁(如RedLock)。
9. 回滚与应急预案
制定回滚步骤:在切换前保留旧环境至少一段冷备时间,确保老IP仍可用并能切换回流量。准备回滚脚本(DNS回退、LB权重回退、DB切回主写)并先在演练环境进行一次演练。记录回滚触发条件(如新环境错误率 > X% 或 数据库延迟 > Y 秒)。
10. 测试与验证步骤清单
测试分阶段:功能测试(页面访问、上传下载、登录、支付流程)、性能测试(rps、并发)、一致性测试(核对关键表行数或哈希)、容错测试(断开部分节点模拟故障)。用脚本自动化对比文件哈希(find ... | xargs md5sum)和数据库行数/校验和(pt-table-checksum/pt-table-sync)。所有测试通过后再推进下一阶段。
11. 监控与报警在切换期间的配置
在迁移期间加强监控:新增香港机房的监控项(CPU、IO、网络、错误率、数据库复制延迟),并在切换窗口内降低报警阈值(更敏感)。确保日志集中(ELK/EFK)并能快速检索切换发生时的请求与错误堆栈。
12. 常用命令与配置示例总结
常用rsync命令:rsync -azP --delete --exclude='cache/' /var/www/ user@hk:/var/www/。lsyncd简单配置可监听 /var/www/ 并同步到目标。MySQL设置示例:CHANGE MASTER TO MASTER_HOST='old-ip', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='mysql-bin.0001', MASTER_LOG_POS=12345; START SLAVE;。HAProxy示例后端:server hk1 hk-ip:80 weight 50 check。
13. 网络与ISP、路由考虑
香港机房的带宽、骨干链路与国际出口相对优越,但仍要与原机房对比延迟与丢包。在必要时使用BGP或多线路冗余以提高稳定性。若客户主要在大陆访问,需评估跨境访问延迟并考虑使用大陆CDN或在原机房保留反向代理节省跳数。
14. 完成切换后的收尾工作
切换完成后保留旧机房数据一段时间并定期校验。更新运维文档、DNS TTL 恢复到常规值、关闭临时同步工具、清理不再需要的权限与口令。进行一次迁移总结会,记录问题与优化点,形成迁移模板以便复用。
15. 常见问题一:迁移如何做到真正零停机?
问:如何保证在切换到香港机房时用户感觉不到中断?
16. 常见问题一的回答
答:通过并行部署与双写/复制实现零停机。先在香港部署并与旧机房建立文件实时同步(lsyncd/rsync增量)和数据库复制(MySQL主从或GTID主主),在旧机房的负载均衡上加入香港节点并逐步转流量。使用低TTL DNS或全局LB做最终切换,验证后再删除旧节点。关键是确保数据在切换时双向或单向同步并且会话统一。
17. 常见问题二:数据库主从延迟如何处理?
问:如果数据库复制发生延迟甚至中断,如何保证数据不丢失?
18. 常见问题二的回答
答:首先监控复制延迟并设置报警。采用可靠的复制方案(GTID可简化出现故障时的主备切换),重要写操作可以先写入主库并异步复制到备库,或通过消息队列确保写入动作被重演。对于强一致性需求,短暂内可以继续把写流量留在老主库并仅把读流量导向香港。确保有完整的binlog备份与增量恢复计划用于数据恢复。
19. 常见问题三:如果切换失败如何快速回滚?
问:万一新香港机房出现严重问题,如何快速回退到旧机房?
20. 常见问题三的回答
答:提前准备回滚脚本和步骤:1)把DNS或LB权重指回旧机房(低TTL能加速DNS回退);2)在旧机房恢复写状态(如果已切到新库,则需将新库的变更回写或停写并切换回旧库);3)确保旧库的binlog包含切换期间的变更以做补回;4)恢复旧机房的全部节点并验证服务。回滚前先确认触发条件并通知业务团队,整个过程应在演练后可在短时间内执行。
来源:虚拟主机机房香港迁移指南网站零停机切换与数据同步方法