1.
列出所有服务与域名并记录端口(如 80/443/3306)。
确认数据量,例如 /var/www = 150GB,数据库 25GB,日志 30GB。
对关键服务做完整快照并导出:mysqldump --single-transaction -A > all.sql。
评估带宽:香港VPS上行 500Mbps,美国VPS下行 1Gbps,估算同步时间。
将DNS TTL先降为 300 秒以便快速切换。
准备回滚计划并验证备份可恢复。
2.
在两端开放必要端口:SSH 22(或改端口)、HTTP/HTTPS、MySQL 内网端口。
使用 iptables/nftables 或 cloud 防火墙,仅允许双方 VPS 的对端 IP 访问同步端口。
设置 NTP/chrony 保持时钟一致,避免 binlog 时间错位。
部署 DDoS 防护策略:Cloudflare 或运营商高防;对关键端口做速率限制。
对 SSH 使用密钥认证并限制登录来源。
在防火墙规则中加入日志以便故障排查。
3.
文件同步推荐 rsync:rsync -azP --delete --bwlimit=200000 /var/www/ root@198.51.100.20:/var/www/。
参数说明:-a 归档,-z 压缩,-P 显示进度,--bwlimit 单位 KB/s(200000KB/s ≈ 1.6Gbps)。
实时同步可用 lsyncd 或 unison,适合频繁变更的站点文件。
数据库采用 MySQL 主从或半同步:在 HK(master)启动 binlog 并记录位置 mysql-bin.000012:154。
示例 change master 命令:CHANGE MASTER TO MASTER_HOST='203.0.113.10', MASTER_USER='repl', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=154;
完成后 START SLAVE; 并 SHOW SLAVE STATUS\G 检查 Seconds_Behind_Master。
4.
案例:某电商平台从香港机房切换到美国机房,站点流量峰值 3200 RPS,静态资源 150GB。
| 项目 | 香港 VPS(源) | 美国 VPS(目的) |
| CPU / 内存 | 4 vCPU / 8GB | 8 vCPU / 16GB |
| 磁盘 | 200GB NVMe | 500GB NVMe |
| 带宽 | 1Gbps(上行 500Mbps) | 1Gbps(下行更优) |
实际切换步骤:1)全量 rsync;2)启动数据库复制并等待同步延迟 < 5s;3)短暂停止写入做最终增量同步;4)切换 DNS。
切换窗口通常选择低峰 5-10 分钟维护窗。
5.
切换前 24 小时把 TTL 调低至 300 秒或更低(60-120 秒最佳)。
在 DNS 提供商(例如 Cloudflare/GoDaddy)修改 A 记录指向新 IP,并同时更新 CDN 后端。
监控 0-2 分钟内是否有流量成功切换,常见完全生效时间取决于缓存但通常 < 5 分钟。
如出现问题,立即恢复旧 A 记录并回滚应用流量,利用 CDN 回源策略减少损失。
保留旧机房至少 24-48 小时作为热备,直至确认无问题再释放资源。
记录切换时间点、快照与日志便于事后审计。
6.
验证点:页面加载、API 响应、数据库写入与定时任务是否正常。
使用 ping/traceroute 检查网络路径,使用 curl -I 检查 HTTP 头是否来自新机。
开启 CDN 缓存策略并配置地理路由以降低跨洋延迟。
启用 WAF、限流与黑名单规则来应对突发 DDoS。
清理旧机房数据,保留备份并关闭不再使用的公网 IP 与防火墙规则。
最后记录整体迁移耗时、数据量与问题清单,作为后续优化依据。