云服务器从Ubuntu 20.04升级到22.04的最佳实践是什么?

将云服务器从 Ubuntu 20.04 LTS 升级到 22.04 LTS 是一项关键操作,需遵循“先备份、再测试、后执行”的原则。以下是经过验证的最佳实践步骤:


✅ 一、升级前准备(至关重要)

1. 完整备份

  • 系统快照:在云控制台创建实例快照(推荐),确保可一键回滚。
  • 数据备份:
    • 数据库(如 MySQL/PostgreSQL):mysqldump / pg_dump + 远程存储(如 S3/OSS)。
    • 配置文件:/etc/ 下自定义配置(如 Nginx/Apache、SSH、防火墙规则)。
    • 应用代码与依赖:Git 仓库或归档包。
    • 用户家目录中的关键文件(如 .ssh/, 脚本等)。

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. 本地/测试机预演
    克隆一台相同配置的测试机,执行完整升级流程,验证所有服务正常后再上生产。

  2. 生产环境升级步骤:

    # 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 LTS
uname -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 模板、或回滚脚本),欢迎提供你的架构细节,我可定制方案。