1. 本文目标:把已有站群(多IP,多域名)从现有机房迁移到台湾机房并实现跨机房无缝切换,最小化停服与SEO影响,包含操作命令与回滚方案。
2. 清单:域名列表与各自A记录、所有服务器快照、SSH密钥、当前IP池、数据库账号、SSL证书备份、监控/告警配置、低TTL计划(如300秒)、回滚联系人。
3. 选择机房:优先考虑带宽、BGP/MPLS、IP段可用性。为站群申请多个公网IP(/29或更多),记录IP对应域名映射表并在迁移前在本地hosts做模拟。
4. 在台湾机房上购买相同或更好配置的服务器,先做网络延迟和带宽测试:使用 ping、mtr、iperf3,确认平均RTT与丢包率在可接受范围内。
5. 推荐用rsync增量同步:在目标机创建接收目录,命令示例:rsync -azP --delete --numeric-ids --exclude='cache/' user@源服务器:/var/www/ /var/www/,先做一次全量同步,再定时增量(如每5分钟)。
6. 方法1(推荐短期):使用主从复制,步骤:在源库创建复制账号:GRANT REPLICATION SLAVE ON *.* TO 'repl'@'台湾IP' IDENTIFIED BY 'pwd'; SHOW MASTER STATUS; 在目标配置my.cnf并启动slave,CHANGE MASTER TO MASTER_HOST='源IP', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='xxx', MASTER_LOG_POS=nnn; START SLAVE; 方法2(短时停机):mysqldump + 导入。
7. 把Nginx配置、虚拟主机文件、rewrite规则同步到新机,检查listen与server_name,保留相同的根目录结构和权限。推荐使用配置管理(Ansible/Chef)保证多台一致。
8. 若使用Let’s Encrypt,可在新机上用certbot --nginx申请证书;若是商业证书,拷贝私钥与证书到新机并设置权限(600)。证书有效期内迁移避免重新验证造成的问题。
9. 若站群使用session(PHP/Redis/memcached),需要跨机房共享或把会话持久化到中心化存储(如Redis互联或托管Redis),或采用无状态设计避免切换时丢失用户会话。
10. 步骤:A) 提前将TTL降到300s并等待TTL生效;B) 做小批量域名测试(比如10%域名先切换到台湾IP),观察日志/错误;C) 全量切换DNS A记录到新IP;D) 保持双向同步(源->目标)24-48小时,确认旧客户端减少后再退役旧机。
11. 可选方案:A)DNS轮询+健康检查;B)使用Anycast/BGP或全球负载均衡器(如Cloudflare/GSLB);C)Keepalived+VRRP用于同机房内高可用。重要的是先用低风险DNS分批验证。
12. 切换当天:1) 再次full rsync并锁表或短暂停库;2) 在目标启动应用并做自检;3) 修改DNS A记录并在TTL生效期内观察;4) 保持双写或同步;5) 监控错误率、响应时间与搜索引擎抓取日志;6) 24-72小时后逐步退役源机。
13. 回滚要点:保留旧服务器与IP至少48小时;若发现严重问题:将DNS恢复到旧IP(TTL短可快速回退),或把流量导回源机。确保在回滚前数据库写入能回溯或暂停写入避免数据丢失。
14. Q: 迁移到台湾会影响搜索排名吗?
14. A: 可能短期波动,控制方法:保持原URL、使用相同内容、设置正确的Canonical与hreflang、监控抓取率、在Google Search Console更新地理定位(若必要),并尽量实现零死链与快速响应。
15. Q: 如何保证SSL在切换时不中断?
15. A: 预先在目标机生成/拷贝证书并测试,若使用Let’s Encrypt可先通过HTTP验证并在切换前完成证书签发,确保私钥与链文件一致并在Nginx中热加载。
16. Q: 切换后如何监控是否真正无缝?
16. A: 建立监控项:外部合成监控(UptimeRobot/自建curl脚本)、日志比对(访问量、404/5xx)、性能指标(TTFB、P95)、搜索引擎抓取日志;设置告警并保持人工巡检窗口48小时。