1. 服务端Ubuntu 20.04 LTS升级全景指南
作为长期维护生产环境的运维工程师,我经历过无数次Ubuntu LTS版本升级。每次升级都像给飞行中的飞机更换引擎——必须确保万无一失。本文将详细记录从Ubuntu 18.04 LTS升级到20.04 LTS的全过程,重点分享服务端环境下的特殊处理经验。
Ubuntu 20.04 LTS(Focal Fossa)作为长期支持版本,提供了5年的标准维护周期。对于服务端环境而言,这次升级带来了诸多关键改进:默认搭载的Linux 5.4内核优化了IO性能,APT包管理器支持增量更新,新增的Cloud-init 20.1版本简化了云环境配置。但同时也需要注意,Python 2已被彻底移除,部分旧版软件需要提前适配。
2. 升级前的深度准备
2.1 环境检查与兼容性验证
在控制台执行以下命令获取当前系统信息:
lsb_release -a uname -a df -h特别需要检查:
- 根分区剩余空间(建议至少保留10GB)
- 当前内核版本与驱动兼容性
- 正在运行的Python 2服务(可通过
ps aux | grep python排查)
关键提示:生产环境务必在非业务高峰时段操作,建议先在测试环境验证所有服务兼容性。我曾遇到过一个案例:某金融系统因未测试Python 2到3的迁移,导致升级后支付接口全部失效。
2.2 备份策略实施
采用分层备份方案:
- 系统级备份:使用
tar -cvpzf /backup/system_backup.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/backup --exclude=/mnt --exclude=/sys / - 数据备份:针对MySQL/MongoDB等数据库执行完整dump
- 配置备份:
etckeeper commit -m "Pre-upgrade backup"保存/etc目录变更历史
验证备份完整性的快速方法:
# 随机抽查关键配置文件 tar -tvf /backup/system_backup.tar.gz | grep 'etc/nginx/nginx.conf' # 检查数据库备份可读性 head -n 20 /backup/mysql_dump.sql3. 分阶段升级实操
3.1 基础环境更新
首先确保现有系统处于最新状态:
sudo apt update sudo apt dist-upgrade -o APT::Get::Always-Include-Phased-Updates=true sudo apt autoremove遇到常见的Phased Updates问题时,可以通过以下命令强制包含所有更新:
sudo apt -o APT::Get::Always-Include-Phased-Updates=true upgrade3.2 正式升级执行
启动升级进程:
sudo do-release-upgrade -d注意:-d参数仅在20.04.1发布前需要,正式版发布后可省略。升级过程中会多次询问配置文件的处理方式,对于关键服务(如SSH、Nginx)建议选择"D"先查看差异。
典型配置文件冲突处理流程:
- 对比新旧配置差异:
diff /etc/nginx/nginx.conf /etc/nginx/nginx.conf.dpkg-old - 合并关键参数(如worker_processes、keepalive_timeout等)
- 保留自定义配置(如server块定义)
3.3 升级后必做检查项
- 服务状态验证:
systemctl list-units --failed journalctl -p 3 -xb- 关键组件版本确认:
# 检查OpenSSL版本(需≥1.1.1) openssl version # 验证Python环境 python3 --version pip3 list- 网络连通性测试:
# 检查监听端口 ss -tulnp # 模拟外部访问 curl -I http://localhost4. 疑难问题解决方案
4.1 常见报错处理
案例1:MySQL服务启动失败症状:升级后MySQL无法启动,日志显示"Unknown storage engine 'InnoDB'" 解决方案:
sudo mv /var/lib/mysql /var/lib/mysql.bak sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql sudo systemctl start mysql案例2:Nginx配置语法错误症状:nginx -t报错"invalid parameter" 处理步骤:
- 备份现有配置:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak - 使用
nginx -T输出完整配置 - 逐步注释新版本不兼容的指令(如
listen 80 default_server需改为listen 80)
4.2 性能调优建议
升级后建议调整以下参数:
- 内核参数优化(/etc/sysctl.conf):
net.core.somaxconn = 4096 vm.swappiness = 10- 文件描述符限制(/etc/security/limits.conf):
* soft nofile 65535 * hard nofile 65535- 针对PHP-FPM的特别调整(/etc/php/7.4/fpm/php.ini):
opcache.enable=1 opcache.memory_consumption=1285. 升级后的持续维护
建立版本监控看板:
# 每日检查可更新包 apt list --upgradable # 监控安全公告 ubuntu-security-status配置自动化更新策略(/etc/apt/apt.conf.d/50unattended-upgrades):
Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}"; "${distro_id}:${distro_codename}-security"; "${distro_id}ESM:${distro_codename}"; };对于关键业务服务器,建议建立灰度更新机制:先更新1-2台非核心节点,观察24小时无异常后再批量更新。同时保留快速回滚方案,如通过备份的rootfs快速重建实例。