1) 资产清单:列出应用、数据库、缓存、队列、中间件、证书、监控、日志、IP、域名。2) 依赖关系:绘制拓扑图,标注入/出流量、带宽、端口。3) 性能基线:记录现网CPU/内存/磁盘/IO和QPS/DC响应时间(使用sar/iostat/htop/nginx-status)。4) 确定迁移窗口与SLA、维护公告。
1) 文件备份:使用rsync --archive --compress --delete --progress 源/ 目标/(或 tar+scp)。例:rsync -azP /var/www/ user@philippine:/data/www/ 。2) 数据库备份:MySQL使用mysqldump或xtrabackup。示例:mysqldump -u root -p --single-transaction --routines --triggers --databases app_db > app_db.sql。3) 快照:对云磁盘做快照并验证可恢复性。
1) 公网IP策略:准备弹性IP或保留IP,若使用浮动IP/LoadBalancer配置预留资源。2) 防火墙/安全组:列出允许端口(80/443/22/3306等),在目标先开放。3) VPN/专线:若有跨区域数据库链路,先测试VPN连通与带宽。
1) 全量导出并导入:在低峰期执行mysqldump并导入目标实例(mysql -u root -p app_db < app_db.sql)。2) 增量同步:使用MySQL主从或GTID设置临时从库,步骤:在源开启binlog,记录位置;在目标配置CHANGE MASTER TO master_log_file='binlog', master_log_pos=xxx;start slave;3) 测试一致性:使用pt-table-checksum或自定义校验脚本。
1) 物理复制:使用Percona XtraBackup做热备份并恢复到目标,减少停机。2) 双写/业务层缓存:短期内采用双写策略(应用层同时写两边),或利用消息队列确保最终一致。3) 切换时机:切换主库前先暂停写入,等待binlog同步完成并验证无延迟。
1) 环境一致性:使用容器或配置管理(Ansible/Chef)在目标重建环境,确保依赖、版本一致。2) 配置项更新:替换数据库地址、缓存地址、第三方回调域名,建议使用环境变量并通过CI/CD注入。3) SSL证书:提前在目标安装并测试证书(openssl s_client -connect host:443)。
1) 静态文件:使用rsync或rclone周期性增量同步,首次全量后持续增量。2) 对象存储:若使用S3兼容存储,可用s3cmd或awscli sync。3) 校验:通过文件数量和Md5校验比对,示例脚本:find /data/www -type f -exec md5sum {} \; > local.md5 ,在目标同样生成并比对。
1) 预调低TTL:迁移前48小时将A记录TTL下调到60秒或更低。2) 切换步骤:在验证目标服务健康后,将DNS指向新IP或负载均衡器;若使用权威DNS厂商API可自动化切换。3) 回滚:在切换前保留源服务并准备立即将DNS指回。
1) 灰度切换:先将小比例流量引到目标(负载均衡按权重或使用NGINX upstream),监控错误率、延迟。2) 健康探针:配置HTTP/HTTPS健康检查路径(/healthz),返回200并包含版本信息。3) 全量切换:当指标稳定(错误率<0.1%,响应时间在SLA内)后完成全部流量切换。
1) 回滚触发条件:严重错误、数据不一致或业务关键功能失败。2) 回滚步骤:暂停写入(进入只读模式或暂停队列),将DNS或负载均衡重新指回源,必要时从备份恢复数据库并验证。3) 演练:在非生产环境多次演练回滚流程,记录时间消耗并优化脚本化操作。
1) 快速切换到冷备/热备:若目标故障,按顺序启用预留快照恢复新实例->挂载快照磁盘->导入备份数据库并启动服务。2) DNS故障转移:使用低TTL和多个DNS提供商或DNS Failover服务自动指向健康节点。3) 验证:恢复后执行业务链路测试,检查数据完整性,自动化运行健康检查脚本。
1) 验证点:业务功能测试、接口测试、日志检查、监控告警、性能基线对比。2) 监控项:增加额外监控(磁盘、IO、DB延迟、错误率、外部API失败)并设置告警。3) 清理与归档:保留源端快照和备份若干天,待稳定再清理资源,更新运维文档与Runbook。
问题:在迁移过程中如何确保业务数据的一致性和最小化丢失?
回答:回答:推荐使用主从复制(binlog/GTID)或XtraBackup做物理热备,先做全量复制再同步增量。切换瞬间暂停写入或把应用切成只读并等待binlog完全同步;使用pt-table-checksum或自定义校验脚本比对行级一致性,必要时采用双写短期策略并回放队列保证最终一致。
问题:如果DNS切换后发现目标不可用或解析异常,如何快速恢复用户访问?
回答:回答:预先把TTL调低到60秒,出现问题立即将DNS记录切回源并通知DNS厂商加急刷新;若使用负载均衡器,可直接调整权重或把流量回流到旧LB;同时开启应急页面或维护页降低影响,并通知客户与内部团队。
问题:应多久进行一次迁移/故障恢复演练?演练时关注哪些指标?
回答:回答:建议至少每季度做一次小规模演练、每半年进行一次全链路演练。关注RTO(恢复时间目标)、RPO(可接受数据丢失窗口)、切换成功率、业务错误率、响应延迟,以及运维手册的可执行性和回滚时间。记录问题并持续改进。