1.
迁移前的评估与准备
- 识别资产:列出所有主机、IP、域名、端口、依赖服务(DB/缓存/队列/存储)。
- 硬件规格对比:目标香港机房的CPU、内存、磁盘IO、网络带宽需等于或高于现有配置;记录磁盘分区与文件系统。
- 制定迁移窗口:尽量在流量低峰,若需零停机采用分阶段或双活策略。
- 准备凭证与权限:确保对源/目标服务器有root或管理员权限,准备SSH密钥和防火墙白名单。
2.
网络与DNS策略(关键)
- 先将域名TTL降低到60秒或更低(至少提前48小时)。示例:在DNS控制台将TTL从3600降为60。
- 申请目标IP或浮动IP(如果机房支持),并准备备用A记录。
- 规划负载均衡器或反向代理(如Nginx/HAProxy)以便在切换时实现流量转发。
3.
文件数据同步方案
- 初始全量同步:使用rsync做第一次全量拷贝(保留权限、时间戳、软硬链接)。示例命令:rsync -azP --delete -e "ssh -i /root/id_rsa" /var/www/ user@target:/var/www/。
- 增量实时同步:部署lsyncd监控文件变更并同步到目标;或使用unison实现双向同步。lsyncd配置示例:monitor文件夹 -> 调用rsync。
- 验证一致性:对比文件数量与校验和(find + md5sum)确保无遗漏。
4.
数据库迁移与同步(以MySQL为例)
- 方案A(低停机):设置目标为从库,开启主库二进制日志(binlog)。在主库上创建复制账号:GRANT REPLICATION SLAVE ON *.* TO 'repl'@'目标IP' IDENTIFIED BY 'pwd';
- 导出快照:在主库创建一致性快照(若使用InnoDB,先FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; 使用mysqldump --single-transaction --routines --triggers)。
- 在目标导入并启动复制:CHANGE MASTER TO MASTER_HOST='主IP', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='file', MASTER_LOG_POS=pos; START SLAVE; 确认Slave_IO_Running和Slave_SQL_Running均为Yes。
- 方案B(零停机/双活):采用MySQL Group Replication或Galera Cluster构建多主同步(复杂需验证应用兼容)。
5.
缓存与会话处理
- Redis:启用主从复制或Redis Cluster,确保目标可接替;如果使用持久化(RDB/AOF),先传输持久化文件并启动从节点。
- 会话迁移:将会话从本地内存迁移到共享存储(Redis/Memcached)或使用数据库存储,以保证切换时用户无需重新登录。
- 验证:在切换前后用脚本模拟登录并验证会话一致性。
6.
应用配置与依赖同步
- 环境变量与配置管理:将配置文件(DB连接、缓存地址、第三方服务)模板化,并使用Ansible/Chef/Puppet推送到目标。
- 第三方服务授权:确认白名单、回调URL已添加目标IP或域名。
- SSL证书:提前在目标部署证书或使用通配证书,确保证书链与私钥正确。
7.
切换策略:蓝绿/灰度/渐进切换
- 蓝绿部署:保持旧环境(蓝)与新环境(绿)并行,流量通过LB切换到绿环境,回滚只需切回蓝。
- 渐进灰度:先把5%-20%流量导入目标,监测错误率、延迟与日志,确认后逐步提升比例。
- 切换步骤示例:1) 将LB加入新节点 2) 健康检查通过 3) 将流量切向新节点 4) 持续监控30分钟再完全切换。
8.
切换当天详细操作步骤(实际操作清单)
- T-48小时:降低DNS TTL;确认备份和监控正常。
- T-4小时:做一次完整数据同步(rsync + DB快照),启动增量复制/同步。
- T-30分钟:暂停非关键批处理,通知用户可能有短时间会话刷新;切换写流量策略(若使用主从切换需在某节点上做promote)。
- 切换时刻:将LB切到新IP或修改DNS(TTL低时几分钟内生效),观察业务指标与错误日志。
- 切换后1小时:回流量全量到新环境,并保留旧环境至少24-72小时作为回滚池。
9.
监控、验证与回滚
- 监控项:响应时间、错误率、数据库主从延迟(Seconds_Behind_Master)、磁盘IO、网络带宽、应用日志异常。
- 验证用例:首页加载、登录、下单、支付、文件上传下载等核心路径需自动化脚本测试。
- 回滚条件与步骤:若关键指标异常超过阈值(如错误率>1%且持续10分钟),立即将流量回切到旧环境并分析日志,保留数据库binlog用于追溯。
10.
迁移完成后的收尾工作
- 将DNS TTL恢复到原设置并记录变更。
- 清理临时同步工具(如lsyncd临时规则),更新运维文档与IP清单。
- 做一次完整备份并归档迁移日志,进行复盘会议记录问题与改进项。
11.
问:如果数据库主从延迟较大,如何在迁移时保证数据一致性?
答:先暂停写入或将写请求引导到单一Master;在主库创建一致性快照并记录binlog位置,导入目标后启动从库并等待Slave_IO和Slave_SQL均为Yes且延迟为0;或者在切换瞬间短暂停写(几秒到几分钟)完成最后一次增量同步,若无法停写则考虑使用GTID或双主同步方案并在应用层做冲突处理。
12.
问:如何保证文件同步在高并发情况下不丢失或重复?
答:采用先全量同步再增量同步的方式,增量使用lsyncd或inotify触发rsync,保证文件改动几乎实时同步;对重要上传操作使用临时目录+原子重命名(先写.tmp再mv),并在应用层采用去重或唯一命名策略,切换时暂停批量文件任务以避免冲突。
13.
问:切换后发现部分第三方接口返回异常,如何快速定位并恢复?
答:首先查看应用日志与监控链路(错误率、超时、DNS解析、IP白名单拒绝);如果是IP未白名单,快速回滚到旧IP或联系第三方开通目标IP;若是环境变量或证书问题,回退到旧配置并修正后再做灰度尝试;整个过程记录每一步并保持通信渠道对内对外通告。
来源:香港租服务器托管迁移方案与数据同步保障业务不中断方法