1. 本文目标:在香港VPS上配置新环境并无缝迁移现有服务,最小化停机时间。
小分段:环境假设为Linux(Ubuntu/CentOS),有SSH访问权限、域名管理权限、并能短暂降低DNS TTL。
2. 选购要点:选择可靠的机房(CN2/GIA视情况),带宽要满足峰值流量,确认是否有固定公网IP与反向DNS需求。
小分段:开通时选择合适系统镜像(Ubuntu LTS或CentOS),记录root密码与控制面板。
3. 备份:对源端全部文件、数据库、配置做完整备份(tar、mysqldump)。
小分段:将DNS记录TTL降至60-300秒(至少提前24小时),准备好回滚联系人与时间窗口。
4. 更新与用户:apt update && apt upgrade -y(或yum update -y);添加非root用户并设置sudo。
小分段:示例命令:adduser deploy && usermod -aG sudo deploy;配置SSHKey:ssh-copy-id deploy@new_ip。
5. 安全基础:关闭密码登录(/etc/ssh/sshd_config),仅允许必要端口(22、80、443、数据库端口仅内网)。
小分段:使用ufw或firewalld开放端口:ufw allow 22/tcp; ufw allow 80/tcp; ufw allow 443/tcp; ufw enable。
6. 推荐工具:rsync,支持断点续传与增量同步。
小分段:示例命令:rsync -azP --delete --exclude='cache/' user@old_ip:/var/www/ /var/www/ ;解释:-a归档,-z压缩,-P显示进度并支持断点,--delete保持一致,--exclude排除缓存。
7. 冷备方式(停写窗口短):在低流量时执行:mysqldump --single-transaction --quick --lock-tables=false -u root -p dbname > db.sql。
小分段:在新服务器导入:mysql -u root -p dbname < db.sql;若要最小化停机,可使用主从或binlog增量同步。
8. 安装并迁移配置:apt install nginx php-fpm(或相应包),将源端的nginx/conf.d/*.conf复制过来,检查路径与用户权限。
小分段:重载配置:nginx -t && systemctl reload nginx;注意ssl证书可先使用临时自签或ACME在切换后批量申请。
9. 推荐做法:先使用Let's Encrypt在新机上获取证书(在DNS切换前可通过hosts指向做验证)。
小分段:certbot certonly --webroot -w /var/www/html -d example.com;若使用通配符证书请用DNS验证并提前准备API权限。
10. 本地测试:在你的客户端机器上编辑hosts,先把域名指向新VPS IP,验证页面、接口与数据库交互。
小分段:使用curl -I https://example.com 检查头部,使用日志tail -f /var/log/nginx/access.log观察请求。
11. 切换步骤:在确认新环境测试通过后,将域名解析从旧IP切换到新IP;若低TTL已生效,解析几分钟内会刷新。
小分段:操作要点:先切A记录,再检查CDN或代理(如Cloudflare)设置是否需要变更,保留旧服务器至少1-2个TTL周期作为保险。
12. 双向同步:在切换窗口开启短时双写(应用层或队列)并使用rsync或inotify实时同步临时文件。
小分段:亦可采用负载均衡器(HAProxy/Nginx upstream)做流量分阶段切换,将一部分流量导向新机验证稳定后再全部切换。
13. 回滚策略:保留旧服务器开启一定时间,若新环境异常快速将DNS回退并恢复写通道。
小分段:监控要点:部署APM/日志集中化(Prometheus/Grafana、ELK),并设置报警阈值,迁移后24-72小时为关键观测期。
14. 问:迁移需要完全停机多长时间?
答:实践中若按上述流程并降低TTL,可做到几分钟到几十分钟的感知停机;完全无停机需实现双写或主从切换,复杂度与风险都会增加。
15. 问:如何保证数据库在切换时不丢数据?
答:推荐使用主从复制或binlog增量同步,先把新库做为从库实时追随,切换时短暂停写并提升从为主;若无法复制,做好事务导出与短时写锁也是可行方案。
16. 问:迁移完成后我应该做哪些验证?
答:逐项验证:页面访问、API接口、登录流程、文件上传、数据库写读、第三方回调。使用脚本化健康检查并对照旧机日志,确认响应码、延迟、错误率在可接受范围内。