在开始任何升级之前,最重要的是制定完整的备份计划。首先列出所有需要保护的对象:应用代码、数据库、配置文件、SSL证书以及用户上传文件等。明确备份目标(RPO/RTO)并记录当前系统环境(操作系统、内核版本、软件版本、挂载点)。
准备阶段应包含:1)执行全量数据备份并保留多份;2)创建配置快照或导出配置清单;3)在异地或云端保存至少一份备份;4)验证备份可用性(恢复演练)。这些步骤能降低升级失败带来的风险。
数据库:使用 mysqldump 或逻辑备份工具导出;文件系统:使用 rsync 或打包(tar)并上传到安全存储;配置:导出 /etc、nginx、php-fpm 等目录及 crontab;证书:导出证书和私钥。
mysqldump --single-transaction -u root -p database > /backup/db.sql
rsync -avz /var/www/ user@backup-server:/backup/www/
保证备份的一致性,数据库在热备时使用事务或锁,重要数据做到冷备或快照。备份文件要加密,并记录备份创建时间与校验和。
选择备份方式时要根据数据规模和业务可用性要求决定:小规模可用逻辑备份(mysqldump、pg_dump),大规模数据库建议物理备份或增量备份(xtrabackup、pg_basebackup)。文件层面可以选择 rsync、borg、restic 等具备去重和加密能力的工具。
选择要点包括:备份速度、恢复速度、存储成本与安全性。对于跨国迁移(比如到越南机房或从越南迁出),网络带宽限制会影响选择,建议先做本地冷备再传输增量。
要降低停机时间,采用分阶段升级和蓝绿/金丝雀部署策略。先在新环境上部署并同步数据,短暂停机窗口切换流量。对于数据库,可采用主从复制或双写策略,升级切换时将从库提升为主库。
增量同步是关键:初次做全量数据同步,然后持续复制差异(rsync --link-dest 或数据库复制)。切换时将流量指向新节点并在短时间内同步最后的事务,保证 RPO 最小化。
1)做好维护页和监控告警暂停;2)将写流量暂停或缓冲;3)做最后一次数据快照并应用到新环境;4)切换 DNS/负载均衡并观察。
rsync -av --delete --exclude='cache/' /var/www/ new-server:/var/www/
迁移验证应分层进行:基础设施层(网络、磁盘、权限)、应用层(服务进程、依赖)、数据层(完整性、一致性)。使用校验和(md5sum、sha256sum)对比源与目标文件,数据库可执行记录计数和一致性校验(select count(*),校验关键表的 checksum)。
同时运行自动化健康检查脚本,验证业务关键路径(登录、下单、支付、文件上传等)。监控指标(CPU、内存、延迟、错误率)在迁移前后对比,若出现异常立即回滚或进入故障处理流程。
在灰度流量下进行 24-72 小时观察,收集日志并用日志分析工具比对异常。对数据库强一致性场景,建议做事务级比对或使用 binlog 校验工具。
回滚前要确保已有可用的备份和快照。回滚流程包括:停止新环境写入、将旧环境恢复到最近的备份点、切换流量回旧环境并验证服务恢复。对数据库,若使用逻辑备份可直接导入;若使用物理快照,按快照恢复流程挂载数据盘。
如采用虚拟机或云镜像部署,事先保留升级前的镜像可以快速回滚。回滚操作要有详细步骤脚本化,减少人工操作和人为失误。
1)确认回滚触发条件;2)停止新环境服务写入;3)恢复数据库/文件系统;4)更新负载均衡或 DNS;5)验证并解除维护。