1. 概述与迁移范围定义
- 目标:明确迁移的是单台主机、多个服务还是完整数据中心迁移;
- 范围划分:列出应用、数据库、静态文件、缓存、队列等组件;
- 要点:优先保证数据一致性、最小化停机时间、制定回滚点与验证方法。
2. 迁移前的环境与权限准备
- 账户与权限:确保有源端与目标端的root或sudo权限,API凭证(云平台快照/镜像权限);
- 网络:开放SSH、数据库端口仅在迁移窗口设置白名单;确认两端时间同步(ntp/chrony);
- 资源预配:目标主机CPU、内存、磁盘、IOPS、网络带宽预先配置并验证。
3. 数据一致性模型选择
- 冷迁移(停机窗口):停服后全量拷贝,适合低可用性要求;
- 温迁移(短停机):先同步冷数据,切换瞬间应用短暂停机;
- 在线迁移(零停机):采用主从复制、日志接收或文件增量同步并最终切换。
4. 备份与快照策略(回滚基础)
- 全量备份:迁移前做完整数据库备份(mysqldump/pg_dump、Xtrabackup、wal/pg_basebackup)并验证恢复;
- 文件快照:使用云盘快照或LVM快照保存目标回滚点;
- 保存位置:备份存放在独立存储(对象存储、外部NAS)并做校验(md5/sha256)。
5. 数据库迁移的实操步骤(以MySQL为例)
- 初始化复制:在源启用binlog与GTID,创建用于复制的用户;
- 全量基线:使用Percona XtraBackup做热备份或mysqldump做逻辑备份并恢复到目标;命令示例:xtrabackup --backup --target-dir=/data/xbk;
- 增量与追赶:启动目标为从库,配置复制槽或基于GTID追赶binlog,确认无延迟后停止写入并完成最后一段binlog追赶;
- 切换:把目标提升为主库(RESET SLAVE; STOP SLAVE;),应用短时间阻塞写入后切DNS或负载均衡。
6. 文件与静态资源同步(实操rsync/lsyncd)
- 初始全量:源端执行rsync -azP --delete /var/www/ target:/var/www/;
- 持续增量:在迁移窗口使用rsync再次追赶,或在长窗口使用lsyncd实时同步小变更;
- 一致性点:在最终切换前暂停写入(应用进入维护模式)并做一次即时rsync确保0差异。
7. 缓存与队列的处理
- 缓存(Redis/Memcached):如果可重建,清空并在目标重建;若不可丢失,使用主从复制或RDB/AOF持久化再恢复;
- 队列(RabbitMQ/Kafka):优先将消费者停掉,确保队列中消息持久化并在目标恢复后重新消费或迁入。
8. 网络、DNS与切换策略
- DNS TTL:提前将相关域名TTL降到60秒以内至少24小时;
- 负载均衡:优先通过LB进行切换(修改后端),如使用浮动IP或BGP则切换IP绑定;
- 验证:切换后立即进行健康检查脚本(HTTP 200,DB连通性)。
9. 切换步骤(详细执行顺序)
- 1) 进入维护模式、暂停应用写入;
- 2) 最后一次数据库binlog/事务追赶并锁表(如使用FLUSH TABLES WITH READ LOCK或事务快照);
- 3) 最后一次rsync同步静态文件;
- 4) 提升目标数据库为主、更新配置文件指向新库;
- 5) 修改负载均衡/DNS、解除维护模式;
- 6) 运行验证脚本与内外部回归测试。
10. 回滚方案及触发条件
- 回滚触发:关键服务不可用、数据损坏、严重性能退化或验证失败;
- 回滚方法A(使用快照):如果使用云盘快照或镜像,直接恢复快照并重启旧环境;
- 回滚方法B(数据库主从回退):在新主失效时,将旧主从快照/备份恢复到新的主角色并重新指向LB/DNS;
- 关键点:回滚前先冻结写入并记录自切换以来的新事务以便后续合并或人工处理。
11. 验证与一致性检查工具
- 数据校验:使用pt-table-checksum/pt-table-sync(MySQL)或pg_dump + diff(Postgres);
- 文件校验:rsync --checksum或逐目录md5sum比较;
- 最终验收:核心业务接口冒烟测试、性能基准与日志检查(错误率/延迟)。
12. 监控与迁移后观察期
- 监控项:CPU、内存、磁盘IO、DB延迟、错误率、请求成功率;
- 日志:集中化日志(ELK/EFK)观察异常堆栈;
- 回滚窗口:设定观察期(如48小时)为安全回滚窗口,期间保留旧环境快照与备份。
13. 常见问题与预防措施
- 问题:网络延迟导致复制积压、防火墙阻断或时间不同步;
- 预防:提前演练一次完整演练(演练日志、时间统计),在非生产环境模拟切换与回滚流程。
14. 台湾云主机注意事项(本地化建议)
- 区域与网络:确认云商台湾区的可用区与跨区延迟,尽量在同一可用区完成数据同步以减少延迟;
- 法规与数据主权:注意个人资料保护相关法规(若涉及),备份与快照保存策略需合规;
- 客服与支持:在迁移窗口预先联系云厂商支持以便快速响应硬件/网络故障。
15. 问:迁移过程中如何保证业务零丢失?
- 答:采用主从或逻辑复制实现热同步,关键步骤为(1)先做全量基线恢复,(2) 启动复制追赶binlog/wal,(3) 在切换时短暂停写入并完成最后一次日志追赶与文件同步,切换后验证无差异。并结合低TTL与负载均衡做平滑流量切换。
16. 问:遇到切换失败我应该如何快速回滚?
- 答:优先判断回滚成本与影响,若使用云快照或磁盘镜像,直接恢复旧环境快照最快;若无快照则按备份恢复数据库并用旧负载均衡或DNS回指旧IP,同时冻结新写入并记录增量以便后续补偿。
17. 问:迁移后如何验证数据一致性最可靠?
- 答:结合工具与人工:对数据库使用pt-table-checksum或pg_dump+diff做逐表校验,对文件使用rsync --checksum或校验和比对,最后运行生产级回归测试与业务验收脚本确认功能与性能。