1.
迁移前的全面评估与备份策略
- 盘点资产:列出应用、静态文件、数据库、缓存、定时任务、域名和证书等。
- 确定RTO/RPO:例如RTO≤5分钟,RPO≤1分钟将决定采用异步复制/主从等策略。
- 完整备份:对数据库做逻辑备份 mysqldump 或者物理备份 xtrabackup;文件用 tar + 校验 sha256sum。备份保存到第三方(例如对象存储)并验证恢复能用。
2.
选择迁移方案与工具
- 小流量或静态站点:建议使用 rsync 增量同步(rsync -azP --delete),先做全量再做少量增量。
- 数据库:MySQL 可用主从或 GTID 复制、Postgres 用流复制或 logical replication;需要考虑 binlog 位点或 replication slot。
- 业务持续写入场景:采用双写或者先做从库同步并切换读写到新主,或通过中间层(消息队列)缓冲写入。
3.
- 网络与安全组:在香港云开通相同或更优的带宽,配置安全组/防火墙放行管理端口(22/SSH)、应用端口、数据库端口(仅允许白名单IP)。
- 系统与依赖:同源系统镜像或使用容器,安装相同版本的语言运行环境、依赖包、SSL证书预装。
- 监控与日志:部署监控(Prometheus/Datadog)与集中式日志(ELK/Fluentd),并确保告警通道可用。
4.
文件与静态资源的增量同步
- 首次全量:从旧服到新服执行 rsync -azP /var/www/ user@new:/var/www/ 并记录同步耗时与文件数。
- 计划增量窗口:在切换前最后一次使用 rsync 做短时间内的增量(关闭非关键写入或进入维护模式),保持 --delete 以一致。
- 校验:在目标服务器上用 find + sha256sum 与源的校验列表对比,确认无缺失。
5.
数据库迁移实操(以 MySQL 为例)
- 建立复制:在源库开启 binlog(ROW 格式),创建用于复制的账号 GRANT REPLICATION SLAVE。
- 获取基线:锁表或 use --single-transaction 导出 mysqldump --single-transaction --master-data=2,记录 binlog 文件和位置(或 GTID)。
- 导入与追赶:在目标导入数据,然后配置 CHANGE MASTER TO MASTER_HOST='源IP', MASTER_LOG_FILE='xxx', MASTER_LOG_POS=1234;START SLAVE 并等待同步追上。用 SHOW SLAVE STATUS 确认 Seconds_Behind_Master≈0。
6.
会话和缓存处理(避免用户掉线)
- 无状态优先:将会话从本地存储迁移到 Redis/Memcached 或数据库,先把新服也接入同一缓存。
- Sticky session:如果使用负载均衡且不易改造,确保会话同步或开启粘性会话(但这是最后手段)。
- 缓存预热:在切换前对关键页面、热数据进行预热,避免第一次访问雪崩。
7.
测试与预演(先在内网或灰度环境验证)
- 主机文件/内部域名指向:本地 hosts 指向新服务器,进行完整功能和压力测试(接口、上传、下载、支付流程等)。
- 性能对比:用 ab、wrk 或 JMeter 做并发压测,确认延迟与吞吐满足生产要求。
- 回归校验:对比日志、错误率与数据库记录数,确认一致性。
8.
DNS 切换与低风险切换策略
- 缩短 TTL:提前 48 小时将域名的 TTL 降到 60-300 秒,便于快速切换。
- 蓝绿/灰度发布:使用负载均衡器把小部分流量导到新香港节点(Canary),观察 1-2 小时无异常再扩大权重直至全量。
- 完全切换:在低峰期执行最后的短暂同步(文件+binlog),然后切换负载均衡或更新 DNS,记录切换时间点。
9.
切换当天的详细步骤清单(实操顺序)
- T-2 小时:通知相关团队和备份;确认回滚联系人。
- T-30 分钟:停止部分后台写入或进入维护模式,做一次 rsync 增量并 flush tables with read lock(若使用 mysqldump)。
- T-10 分钟:做数据库最后追赶,确认 slave lag=0;更新负载均衡后端或更改 DNS;验证线上请求在新服成功响应。
- T+30 分钟:监控指标(错误率、响应时间、数据库压力),若异常立即回滚并说明原因。
10.
回滚与恢复策略
- 快速回滚:保留旧服运行状态并保持最后的备份;如果新服故障,立即把负载均衡或 DNS 指回旧服。
- 数据一致性:若在切换后发现数据丢失,优先从新/旧的 binlog 或备份恢复并按时间顺序合并。
- 事后复盘:记录问题原因、解决方式、改进点,形成 SOP。
11.
切换后清理与优化
- 监控至少 48-72 小时:密切关注 SLA 指标与用户反馈,修复潜在性能瓶颈。
- 迁移完成后逐步回收旧资源,并保留旧环境快照 7-30 天以防紧急回滚。
- 更新文档:含 IP、证书到期日、运维流程与紧急联系人。
12.
常见问题问答:迁移会导致短时间内断服务吗?
- 问:迁移过程中会不会中断业务?
- 答:通过增量同步、数据库复制和蓝绿/灰度切换,正常可以做到零或极短时间中断(几秒到几分钟)。关键在于提前准备、缩短 DNS TTL、使用负载均衡分流以及最后一次短暂锁定来完成最后追赶。
13.
常见问题问答:如何处理实时写入导致的数据不一致?
- 问:如果业务持续写入,如何避免新旧库数据不一致?
- 答:常用策略是建立异步复制并在切换前确保 slave 跑到最新;或者在切换窗口采用双写(写入同时写入旧新库),配合幂等和去重;复杂场景可用消息队列缓冲写入并在新环境消费。
14.
常见问题问答:无法缩短 DNS TTL 或第三方 CDN 怎么办?
- 问:若域名托管无法改低 TTL 或使用了第三方 CDN,如何快速切换?
- 答:可通过负载均衡器/反向代理层面做流量切换(更改后端 IP 或权重)或联系 CDN 提供商做回源切换;也可使用流量分发策略(按路径或 Cookie)做灰度迁移。
来源:升级指南香港云服务器怎样平滑迁移不中断业务