1.1 明确范围:列出要迁移的域名、IP、应用、数据库、文件存储、证书与定时任务等。
1.2 选择维护窗口:选择低业务量时间,设置DNS最低TTL(例如300秒)至少提前48小时生效。
1.3 角色分配:指定迁移负责人、DB管理员、网络工程师与回滚负责人并记录联系方式。
2.1 获取新服务器:确认操作系统版本、磁盘分区、内存与带宽;开启SSH并换好默认端口。
2.2 网络检查:在源/目标都运行 mtr -r -c 10 <目标IP> 或 traceroute,确认走CN2优先路径及延迟。
2.3 防火墙与安全组:提前开放SSH、HTTP/HTTPS、数据库访问(仅限管理IP),关闭不必要端口。
3.1 建立备份目录:在源服务器创建 /backup/migration/YYYYMMDD/ 并确保磁盘空间充足。
3.2 使用tar打包并压缩:示例命令:tar -czf /backup/migration/site_www_YYYYMMDD.tar.gz -C /var/www .
3.3 校验文件完整性:sha256sum site_www_YYYYMMDD.tar.gz > site_www.sha256,然后对比传输后校验值。
4.1 逻辑备份(mysqldump):mysqldump --single-transaction --routines --events -u root -p --databases db1 db2 > /backup/db.sql
4.2 大数据量推荐物理备份:Percona XtraBackup 或 mariabackup,示例:xtrabackup --backup --target-dir=/backup/xbk
4.3 备份校验与加密:对sql或备份包生成sha256并可用gpg加密,示例:gpg --encrypt -r admin /backup/db.sql
5.1 Nginx/Apache 配置:拷贝 /etc/nginx/sites-available/ 与 /etc/nginx/conf.d/,记录自定义模块与路径。
5.2 SSL证书:拷贝私钥与证书文件(确保权限400),或在目标上使用ACME重新签发。
5.3 系统用户与定时任务:crontab -l > /backup/crontab_root.bak;复制 /etc/passwd 与 /etc/group 中必要用户条目。
6.1 初次全量传输(异地):rsync -azP --numeric-ids --delete -e "ssh -p 22" /var/www/ root@目标IP:/var/www/
6.2 大文件与断点续传:使用rsync或scp分片,或用rsync的--partial参数保持进度。
6.3 传输验证:传完后在目标计算 sha256sum 并与源端对比,确保一致。
7.1 将站点设为只读或进入维护模式,阻止写入(例如应用层maintenance开关)。
7.2 执行最后一次增量rsync:rsync -azP --delete --bwlimit=1000 -e "ssh" /var/www/ root@目标IP:/var/www/
7.3 数据库最后一致性:对高并发应用建议先锁表或使用事务快照,执行最后一次mysqldump并导入目标。
8.1 恢复文件:在目标解压并设置正确权限,chown -R www-data:www-data /var/www 或相应用户。
8.2 导入数据库:mysql -u root -p < /backup/db_final.sql,检查表结构与字符集是否正确。
8.3 启动服务并观察日志:systemctl restart nginx php-fpm mysql;tail -f /var/log/nginx/error.log 观察错误。
9.1 应用功能测试:登录、下单、上传、下载等关键路径需手工或自动化脚本验证。
9.2 性能与连接测试:用ab、wrk或siege在测试环境做压力测试,观察响应与错误率。
9.3 网络路由检查:从中国大陆段用traceroute或mtr确认访问路径是否走CN2并检查RTT。
10.1 将DNS TTL提前降低(已准备),在切换时更新域名A/AAAA记录至新IP并同步CDN设置。
10.2 分阶段切换:先将10%的流量导向新机(通过负载均衡或DNS流量分配),监控指标48小时。
10.3 完全切换:指标稳定后提升至100%,并保留旧机至少72小时以便回滚与比对。
11.1 回滚决策点:定义失败阈值(如错误率>5%且恢复时间>30分钟)由负责人触发回滚。
11.2 回滚方法A(DNS回退):将DNS恢复到旧IP并使用低TTL快速生效,同时撤销新机流量。
11.3 回滚方法B(数据恢复):若目标数据库已破坏,则在旧机上从最近备份恢复sql并启动服务。
12.1 回滚顺序:先阻断写入到目标->恢复旧机数据库快照->启动旧机服务->DNS回退->验证。
12.2 验证要点:确认旧站点事务完整、无数据丢失,检查交易ID/订单号连续性,并对比日志。
12.3 事后分析:回滚完成后立刻做故障根因分析,生成迁移复盘报告并更新流程文档。
Q: 迁移过程中如何防止用户写入导致数据不一致?
A: 在最终切换前将应用置为只读或维护模式,执行最后一次增量备份并在切换窗口内完成导入。若必须在线迁移,采用双写或变更数据捕获(CDC)->重放到目标,最终做一次一致性校验并回填差异。
Q: 如果DNS切换后新机异常,如何快速回退?
A: 事先将TTL降到较低值(例如300秒),回退时立即把A记录改回旧IP并通知CDN刷新缓存。并行启动旧机服务并监控,回退期间保留通信渠道给用户告警与进度更新。
Q: CN2线路对迁移有什么特殊要求或检测手段?
A: CN2通常对中国大陆的路由更优,迁移前用mtr/traceroute从多个大陆节点检测路由与丢包率。若目标运营商或数据中心提供BGP或CN2专线,确认公网出口IP与反向DNS,必要时与ISP协同优化路由。