1.
概述与迁移前准备
- 目标:在保证业务可用与数据一致的前提下,将服务迁入香港高防机房;提前确认业务RTO/RPO与可容忍停机窗。
- 准备清单:源/目标服务器IP、SSH账号(建议密钥登录)、防火墙规则、域名管理权限、备份存储位置、带宽估算(总数据量/可用时间)。
2.
清点与评估(盘点数据与带宽)
- 步骤1:统计文件总量与大小:du -sh /var/www && find /var/www -type f | wc -l。
- 步骤2:数据库大小:MySQL: SELECT table_schema AS db, SUM(data_length+index_length) FROM information_schema.tables GROUP BY table_schema;。
- 步骤3:按可用时窗计算所需平均带宽:总字节/秒,考虑压缩比与并发连接。
3.
- 网络与防护:确认高防厂商的清洗门限、回源IP白名单、端口策略,确保管理端口(SSH)可访问。
- 系统配置:同步时区、安装rsync/ssh/mysql-client/rclone/lsyncd、配置NTP、准备tmux/screen以保证长连接稳定。
4.
选择同步策略(全量/增量/实时)
- 小文件或一次性迁移:使用rsync做一次性全量+增量(先全量,最后做一次增量差异)。
- 实时或频繁变更:使用lsyncd或文件系统触发器结合rsync;对于对象存储使用rclone。
- 数据库:推荐主从复制(MySQL/MariaDB)或流式复制(Postgres)实现零停机切换。
5.
文件同步实操(rsync详细步骤)
- 第一步(首次全量):在目标执行:rsync -avz --progress --delete -e "ssh -p 22" user@源IP:/var/www/ /var/www/。
- 第二步(限制带宽):若须控制带宽,加参数 --bwlimit=KBPS(单位KB/s),例如 --bwlimit=10240 约10MB/s。
- 其他建议:加 --partial 保留中间部分,使用 screen/tmux 后台执行;可用 -h 或 --compress-level=0/1 调整压缩。
6.
实时同步与增量工具(lsyncd与rclone)
- lsyncd 快速配置示例:/etc/lsyncd/lsyncd.conf.lua 内容:settings {logfile="/var/log/lsyncd.log"}; sync{default.rsyncssh, source="/var/www", host="user@目标IP", targetdir="/var/www", rsync={archive=true, compress=true}}。
- rclone 用于云/对象存储:rclone sync /local/path remote:bucket/path --transfers=8 --checkers=16 --bwlimit 10M。
7.
数据库迁移与同步(MySQL示例)
- 方法A(短停机):导出并导入:mysqldump --single-transaction --routines --triggers --hex-blob -u root -p db > dump.sql,然后在目标导入 mysql -u root -p db < dump.sql。
- 方法B(零停机主从):在源开启binlog,创建备份并记录位置:FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; 然后用 mysqldump --master-data=2,导入后在目标执行 CHANGE MASTER TO MASTER_HOST='源IP', MASTER_USER='repl', MASTER_PASSWORD='pw', MASTER_LOG_FILE='file', MASTER_LOG_POS=pos; START SLAVE; 验证 SHOW SLAVE STATUS\\G。
8.
带宽优化与传输加速技巧
- 压缩:rsync -z 或使用 zstd/gzip 先压缩后传输(适合大文件),或使用 rclone 的 --fast-list 与 --transfers 并行传输。
- 并行分片:将大目录分割并行传输:使用 GNU parallel 或分多线程 rsync(按子目录并发),能显著缩短总体时间。
- 网络层面:调整 TCP 窗口(sysctl net.core.rmem_max, wmem_max, net.ipv4.tcp_rmem)和开启 SSH 多路复用减少握手开销。
9.
验证、切换与DNS策略
- 验证步骤:在目标做完整性校验:rsync --dry-run --checksum 或使用 md5sum/sha256sum 对比样本文件。
- 切换流量:把域名TTL提前降低(如60秒),完成最终增量同步后更新DNS指向目标/负载均衡;使用健康检查与灰度切换逐步导流。
- 回滚准备:保持源机至少在回滚窗口内不清理数据,保留快照。
10.
切换后校验与监控
- 业务校验:用脚本自动化检查页面响应、接口返回、数据库写入与读出一致性。
- 监控项:带宽使用、包丢失、磁盘IO、进程日志;配合报警(邮件/SMS/钉钉)以便发现异常快速回滚。
11.
常见问题与故障处理流程
- 同步中断:检查 /var/log/syslog、rsync/ssh 超时,若是网络问题用 --partial 续传或重试。
- 数据不一致:通过 binlog/GTID 或增量同步补数据,必要时停写、锁表导出再切换。
12.
安全与合规注意事项
- 传输加密:所有跨网传输走SSH或TLS通道;敏感数据尽量先在本地加密后再传。
- 日志与审计:记录谁在何时进行了迁移操作并保存迁移清单,满足合规要求(如香港个人资料隐私条例PDPO)。
13.
Q1:迁移过程中如何最小化业务停机时间?
- 答:首选方案是先用一次全量同步(rsync)把大体数据迁到目标,随后建立数据库主从复制并使用实时同步工具(lsyncd/rclone)同步增量,最后在低峰期短时切换DNS或VIP,停机窗口仅做最后一次增量和切换验证。
14.
Q2:带宽受限时有哪些实用优化手段?
- 答:可采取压缩传输(rsync -z 或先行打包压缩)、并行分片传输、限制单连接带宽(--bwlimit)并在非高峰时段传输;同时可使用CDN缓存静态内容减少源站同步量。
15.
Q3:数据库复制失败如何快速回滚并恢复服务?
- 答:若复制故障导致服务不可用,优先切回源库或只读回源流量;确认源库完整后停止目标写入并从源做最近一次备份恢复;事后分析复制错误(网络、权限、位点)并在小窗口内重建复制。
来源:迁移香港高防服务器时的数据同步与带宽优化最佳实践