1) 明确迁移对象:列出要迁移的服务(Web、API、数据库、存储)。
2) 性能需求:估算并发、QPS、读写比、IOPS 与带宽峰值。
3) 可用性与RTO/RPO:定义恢复时间目标(RTO)和恢复点目标(RPO,若为零则需同步复制)。
4) 合规/数据主权:确认数据是否允许在新加坡托管并满足监管要求。
1) 廠商选项:AWS(ap-southeast-1)、GCP(asia-southeast1)、Azure(Southeast Asia)或本地托管机房。
2) 对比要点:可用区数量、网络带宽选项、支持的磁盘类型(SSD/NVMe)、价格与企业支持。
3) 延迟测试:使用mtr/traceroute/ping从主用户群测到目标区域延迟,优先选择延迟最低的可用区。
1) VPC与子网:规划私有网络,启用NAT、子网隔离并设计安全组规则。
2) 专线或VPN:若需要低延迟与高安全,考虑Direct Connect/ExpressRoute或IPSec/OpenVPN专线。
3) 公网访问:使用负载均衡器(ELB/ALB)和弹性IP/浮动IP以便切换而不改客户端配置。
1) 磁盘类型:选择SSD(gp3/ssd)或本地NVMe以满足IOPS需求。
2) 快照策略:开启定期快照(例如每日全量、每小时增量),并测试快照恢复流程。
3) RAID与文件系统:对性能敏感的服务使用RAID0/1或LVM,设置ext4/xfs并启用noatime等优化。
1) 同步复制(首选零丢失):对数据库使用同步复制(例如PostgreSQL synchronous replication、MySQL Group Replication),确保写操作在本地与新加坡副本都成功提交。
2) 异步+日志归档:如无法同步,使用异步复制并确保binlog/WAL持续传输与应用,切换前完成最后一段日志回放。
3) 文件级同步:先用rsync做初始全量复制,再用增量rsync或实时工具(lsyncd/unison)同步变更;切换瞬间做一次最终增量并校验checksum。
1) 建立目标实例并开启二进制日志(binlog)。
2) 在源端创建备份:mysqldump --single-transaction --master-data=2 -u root -p > dump.sql(适用于InnoDB)。
3) 启动复制:在目标上导入dump.sql,执行 CHANGE MASTER TO MASTER_HOST='源IP', MASTER_USER='repl', MASTER_LOG_FILE='xxx', MASTER_LOG_POS=yyy; START SLAVE; 等待IO/SQL线程同步到最新。
4) 最终切换:把写流量短暂定向至只读,确认slave已应用全部binlog,再停止写入并促使目标成为主库(promote)。
1) 使用pg_basebackup或物理复制建立初始副本:pg_basebackup -h 源 -D /var/lib/postgresql/data -P -U replicator。
2) 配置recovery.conf 或 standby.signal 并启用streaming replication。
3) 对于零丢失,使用synchronous_standby_names启用同步提交,确保事务被两个节点确认。
4) 切换时:先将写入指向目标,或在短暂停机窗口内promote并验证。
1) 初始全量:rsync -avz --delete --progress /data/ user@sg:/data/。
2) 增量与最终同步:在切换前执行一次rsync --checksum以确保内容一致。
3) 校验:在源和目标执行find + md5sum并比较结果,或使用rsync的--checksum选项。
1) 演练环境:在非生产环境做完整迁移流程并记录时间与问题点。
2) 验证点:连接测试、完整性校验、性能基准(压力测试)、备份恢复测试。
3) 演练记录:列出回滚步骤、联系清单与所需工具。
1) 预先降低DNS TTL(48小时前设置为60秒)。
2) 在切换窗口:暂停写入或将写入短暂定向至维护模式。
3) 执行最终增量同步(rsync/最后一段binlog回放),并做完整checksum校验。
4) 更新DNS/浮动IP/负载均衡器指向新加坡实例,监控错误率并验证业务流。
1) 回滚条件:新节点服务异常、数据不一致或性能不可接受。
2) 回滚步骤:将DNS/浮动IP切回原始主机,恢复写权限,监控并记录数据差异。
3) 保持快照与日志:在切换后保留源端快照与binlog至少若干小时以便回退或补救。
1) 完整性检查:随机抽样数据校验、跑关键查询比对结果。
2) 性能监控:设置APM/监控(Prometheus/Grafana/NewRelic)观察延迟、错误率、IO。
3) 用户验证:邀请业务方与测试团队进行回归测试并确认无误。
问:在迁移时如何做到零数据丢失?
答:通过同步复制(数据库的synchronous replication或分布式事务)保证每条写操作在源与目标均成功提交;对于文件使用实时同步(lsyncd/rsync + inotify)并在切换前做短暂停机和最终增量校验;最后务必保留并回放binlog/WAL确保无遗漏。
问:不能使用同步复制时怎么办以尽量避免数据丢失?
答:采用异步复制并缩短RPO:1) 持续传输并快速应用binlog/WAL;2) 在切换窗口暂停写入或进入只读,完成最后一段日志回放;3) 增加重试与校验机制并保留源端日志以便补偿。
问:迁移成功后怎样做成本优化与稳定运维?
答:先按需选择实例规格并启用自动扩缩容;使用预留实例或包年折扣降低长期成本;持续监控资源利用率并按需调整存储类型;定期测试备份恢复与灾备演练,确保长期稳定。