1) 列表你的现有环境:域名、A/AAAA/CNAME记录、当前公网IP、服务器操作系统、Web 服务(Nginx/Apache)、数据库(MySQL/Postgres)、应用依赖版本、SSL证书类型。
2) 备份清单:全量代码、静态资源、数据库导出、cron 任务清单、系统配置(/etc/nginx、/etc/php、/etc/systemd)。
3) 时间窗口:选低峰时段并提前告知用户;准备回滚联系人与时间表。
1) 确认提供商是否支持“免备案”托管,带宽峰值与流量计费方式。
2) 选机型:若流量高建议按带宽(Mbps)或专线,数据库重负载选 SSD + 高内存。
3) 获取新服务器的公网IP、SSH登录凭证;若需固定IP或多个IP段提前申请。
1) 登录并更新系统:ssh root@NEW_IP && apt update && apt upgrade -y。
2) 安装Web与数据库:apt install nginx mysql-server -y(或使用docker部署)。
3) 同步系统时间、设置时区与基本安全:apt install fail2ban ufw;ufw allow 22,80,443;启用SSH密钥登录并禁用密码。
1) 先在新机建立站点目录并设置权限:mkdir -p /var/www/site && chown www-data:www-data /var/www/site。
2) 使用rsync增量复制(示例):rsync -avzP --delete -e "ssh -p22" /var/www/site/ root@NEW_IP:/var/www/site/。
3) 对大目录可先全量同步一次,切换前在低峰再做一次增量同步以覆盖差异(确保两边文件一致)。
1) 离线导出(可短时停服):mysqldump -u root -p --single-transaction --quick --lock-tables=false dbname > db.sql;scp db.sql root@NEW_IP:/root/;在新机导入:mysql -u root -p dbname < db.sql。
2) 零停机方案(推荐流量大站):配置主从复制或使用MySQL GTID。步骤:在旧库开启binlog、创建复制用户、在新库CHANGE MASTER TO master_host='OLD_IP',master_user='repl',master_password='pwd',master_log_file='mysql-bin.0000X',master_log_pos=YYYY; START SLAVE; 等同步完成后切换应用数据库连接到新库并停止旧库写入。
1) 修改配置中的数据库HOST、缓存(Redis/Memcached)IP与外部服务地址。
2) 保持相同域名环境变量,若使用IP白名单需添加新IP;若使用第三方支付回调,提前在后台改回调地址或增加白名单。
3) 测试:在本地hosts文件(例如 /etc/hosts)将域名指向NEW_IP,验证页面与功能完整性再进行DNS切换。
1) 若使用Let's Encrypt:在新服务器上安装certbot,并使用certbot --nginx -d example.com获取证书(注意:DNS生效后才能用HTTP校验,或用DNS校验提前申请)。
2) 导出旧证书(若使用商业证书)并在新机安装,确保证书链与私钥权限正确。
3) 配置防火墙、限速、防DDOS策略;开启HTTP->HTTPS强制重定向,启用HSTS(慎用,了解影响)。
1) 提前48小时将域名的A记录TTL降低到如60或120秒,以缩短切换传播时间(在DNS服务面板修改)。
2) 在新服务器上完成所有验证后,准备同时保持旧服务器可读写(或保证写操作双写/同步),以防切换期间数据丢失。
3) 使用hosts验证:在本地/测试机通过hosts将域名指向NEW_IP做最终验收。
1) 切换时间点:在低峰,通知团队。
2) 在DNS控制台把域名的A记录指向NEW_IP并保存(已预设低TTL,则生效快)。若使用CDN/代理(如Cloudflare),可先将域名设置为“代理关闭”测试直连,再开启代理。
3) 立即在旧服务器保留服务30-60分钟,监控访问日志与错误。用dig +short example.com 和 dig +trace 检查解析是否到达新IP。
1) 验证项:页面访问、登录、下单/支付回调、静态资源、SSL、API响应时延与错误率、数据库写入一致性。
2) 监控:开启应用性能监控(APM)、日志聚合(ELK/Graylog)并查看错误数。
3) 回滚:若出现严重问题,快速将DNS指回旧IP(TTL短可快回),或切换应用配置恢复写入旧库,然后分析问题并再做迁移。
1) 会话丢失:使用共享Session存储(Redis)或处理Cookie域名/路径一致;切换时保证Session能在两端读写。
2) 文件上传:若用户上传分散在服务器上,使用对象存储(OSS/S3)或NFS共享以避免不同步。
3) 第三方回调与IP白名单:提前在对方管理后台加入新IP,或临时允许旧IP与新IP并行。
答:采用主从复制或主主双写是常用方案。先在旧库开启binlog并配置新库为从库,等主从同步到无延迟后切换应用数据库连接到新库再停止旧库写操作。核心是:开启binlog、创建复制用户、记录当前binlog文件名和位置、在新库执行CHANGE MASTER TO并START SLAVE,确认 Seconds_Behind_Master 为0,切换时确保短时间内暂停写入或使用双写策略。
答:预先将TTL降到60-120秒、在切换前完成hosts验证并在切换后保持旧服一段时间是常用做法。若需要更无缝,可以使用负载均衡或DNS Anycast/GeoDNS,或使用云提供商的流量管理(如健康检测+故障转移),这样可实现流量在两端平滑迁移。
答:使用dig/nslookup查看A记录解析到的IP;用curl -I --resolve 'example.com:443:NEW_IP' 或直接访问并查看响应头中自定义标识(例如在Nginx添加X-Server-ID)。同时检查新旧服务器访问日志,确认新机已收到请求并且错误率正常;配合监控报警确保指标稳定。
