将云服务器从 Ubuntu 20.04 LTS 升级到 22.04 LTS 是一项关键操作,需遵循“先备份、再测试、后执行”的原则。以下是经过验证的最佳实践步骤:
✅ 一、升级前准备(至关重要)
1. 完整备份
- 系统快照:在云控制台创建实例快照(推荐),确保可一键回滚。
- 数据备份:
- 数据库(如 MySQL/PostgreSQL):
mysqldump/pg_dump+ 远程存储(如 S3/OSS)。 - 配置文件:
/etc/下自定义配置(如 Nginx/Apache、SSH、防火墙规则)。 - 应用代码与依赖:Git 仓库或归档包。
- 用户家目录中的关键文件(如
.ssh/, 脚本等)。
- 数据库(如 MySQL/PostgreSQL):
2. 检查兼容性
# 查看当前已安装的软件及版本
dpkg -l | grep -E 'nginx|apache2|mysql|php|python'
# 检查第三方 PPA 源(可能不兼容 22.04)
cat /etc/apt/sources.list.d/*.list
# 确认关键服务是否支持 22.04
# 参考官方迁移指南:https://ubuntu.com/server/docs/migration-guide
⚠️ 注意:部分旧版软件(如 Python 2.x、MySQL 5.7)需提前升级或替换;某些 PPA 可能未适配 22.04,需移除或更换为官方源。
3. 更新现有系统
sudo apt update && sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo reboot # 重启确保内核和基础库最新
4. 安装升级工具
sudo apt install do-release-upgrade -y
✅ 二、执行升级(生产环境建议分步操作)
▶ 方案 A:保守模式(推荐首次升级或关键业务)
-
本地/测试机预演
克隆一台相同配置的测试机,执行完整升级流程,验证所有服务正常后再上生产。 -
生产环境升级步骤:
# 1. 强制允许发行版升级(首次运行需手动确认) sudo do-release-upgrade # 若提示 "No new release found",添加以下配置: echo "Prompt=normal" | sudo tee /etc/update-manager/release-upgrades sudo do-release-upgrade -d # 仅用于测试;生产环境通常无需 -d # 2. 按向导完成升级(期间会询问是否保留/替换配置文件 —— 务必选择 Review 并对比差异!)🔍 升级过程中:
- 保持 SSH 会话活跃(避免中断导致半升级状态)。
- 监控磁盘空间:
df -h(升级过程可能需额外 2–4 GB)。 - 如遇冲突,暂停并手动解决(常见于
/etc/nginx/nginx.conf等)。
▶ 方案 B:自动化脚本(仅限高可用团队)
使用 Ansible 或 Shell 脚本批量处理,但必须包含:
- 升级前自动备份逻辑
- 失败时自动触发快照回滚
- 升级后健康检查(端口监听、服务状态、日志无报错)
✅ 三、升级后验证清单
| 类别 | 检查项 |
|---|---|
| 系统层 | lsb_release -a → 显示 Ubuntu 22.04 LTSuname -r → 新内核版本apt list --installed 无降级警告 |
| 服务层 | systemctl status nginx apache2 mysql php-fpm ssh → 全部 active (running)访问 Web 站点、登录数据库、调用 API 接口 |
| 安全层 | ufw status 规则正确sshd_config 未意外修改防火墙策略一致 |
| 日志层 | journalctl -xe 无升级相关错误/var/log/upgrader.log 结尾正常 |
| 性能层 | 基准测试(如 stress-ng, ab)无显著退化 |
🛡️ 四、常见问题与应对
| 问题 | 解决方案 |
|---|---|
do-release-upgrade 卡住 |
检查网络(ping ubuntu.com)、磁盘空间、锁文件 /var/lib/dpkg/lock-frontend |
| 服务启动失败 | 查看对应 service 日志(journalctl -u xxx),临时回退到 20.04 快照修复 |
Python 脚本报错 ModuleNotFoundError |
22.04 默认 Python 3.10,需调整 #!/usr/bin/env python3 路径或重新 pip install |
| Docker 镜像构建失败 | 基础镜像(如 ubuntu:20.04)需改为 ubuntu:22.04 或改用 Debian 基座 |
📌 五、最佳实践总结
- ✅ 永远先做快照:这是最后防线。
- ✅ 非高峰时段操作:避开业务高峰期,预留至少 2 小时窗口。
- ✅ 灰度发布:多节点集群中,逐台升级并观察指标。
- ✅ 文档记录:记录变更点(如配置覆盖情况、服务重启顺序)。
- ✅ 监控告警联动:升级后立即启用更严格的监控(CPU、内存、错误率突增阈值降低)。
如需进一步协助(例如特定服务迁移指南、Ansible playbook 模板、或回滚脚本),欢迎提供你的架构细节,我可定制方案。
PHPWP博客