从 CentOS 7.3 → 7.6 → 8.2 的升级路径涉及 两大核心跨越:
- CentOS 7 内部小版本升级(7.3→7.6):相对平滑,主要是安全补丁、内核更新和 minor 包变更。
- CentOS 7 → CentOS 8 的大版本跃迁:架构性变化最大,需重点注意以下关键差异与风险点。
🔑 一、CentOS 7.3 → 7.6(推荐先完成此步)
✅ 建议通过
yum update逐步升级,避免跨大版本直接跳级。
| 类别 | 注意事项 |
|---|---|
| 内核版本 | 7.3: 3.10.0-514;7.6: 3.10.0-957(含更多硬件驱动、CVE 修复)。部分旧驱动可能不兼容新内核。 |
| YUM/DNF | 仍使用 yum,但底层依赖库(如 libxml2, openssl)有小幅更新。检查自定义 .repo 文件是否兼容。 |
| SELinux | 策略更严格,默认模式仍为 enforcing,但审计日志更详细。测试前建议用 setenforce 0 验证兼容性。 |
| 系统服务 | systemd 配置基本一致,但部分 unit 文件增强(如 network.service 被弃用,改用 NetworkManager)。⚠️ 若曾禁用 network 或自定义网络脚本,需迁移至 NM 或 ifcfg-* + nmcli。 |
| 时间同步 | chronyd 已取代 ntpd 作为默认 NTP 实现(7.4+),确保 chronyd 运行正常。 |
✅ 操作建议:
# 备份当前状态
tar -czf /backup/centos7-7.3-backup.tar.gz /etc /var/log/yum.log
# 清理并升级
yum clean all && yum update --releasever=7.6
# 重启后验证
uname -r && systemctl status chronyd
🚨 二、CentOS 7 → CentOS 8(关键!非连续升级,需重新安装或迁移)
⚠️ 重要事实:CentOS 官方不支持直接从 7.x 升级到 8.x(无
yum upgrade到 8 的路径)。
正确方式是:
- 方案 A(推荐):全新安装 CentOS 8.2,再迁移数据/配置(最稳妥)
- 方案 B(高风险):使用
leapp工具尝试升级(仅适用于特定场景,成功率有限,官方已不再积极维护)
🔁 若使用 leapp 升级(谨慎!)
# 在 CentOS 7.6 上安装 leapp
yum install leapp leapp-repository
# 预检(必须执行!会列出所有阻碍项)
leapp preupgrade
# 查看报告:/var/log/leapp/leapp-report.txt
# 修复问题后重试
leapp upgrade
❗常见失败原因:
- 自定义 YUM repo 未适配 RHEL/CentOS 8 源结构
- 使用了已移除的软件包(如
python2,mysql社区版) - SELinux 策略冲突
- 第三方驱动/模块(如 NVIDIA、VMware Tools)不兼容
📦 三、CentOS 7 → 8 的核心变化清单(影响生产环境)
| 领域 | CentOS 7 | CentOS 8 | 影响与建议 |
|---|---|---|---|
| 包管理器 | yum(基于 RPM + libdnf 1.x) |
dnf(RPM + libdnf 2.x+) |
yum 是 dnf 的软链接;命令行为高度兼容,但部分插件(如 yum-plugin-fastestmirror)行为微调。 |
| Python | Python 2.7 默认 | Python 3.6+ 默认,Python 2 被移除 | ❌ 所有 Python 2 脚本将失效!需重写为 Py3 或用 python2 EPEL 临时支持(不推荐长期)。 |
| 数据库 | MySQL 5.7, MariaDB 10.1 | MariaDB 10.3+, PostgreSQL 11, Redis 5 | 社区版 MySQL 被移除,需用 MariaDB 或 Percona。 |
| Web 服务 | Apache 2.4, PHP 7.0/7.2 | Apache 2.4, PHP 7.2+/7.4 (via AppStream) | PHP 版本需显式启用 Stream 或 COPR 仓库。 |
| 容器支持 | Docker 需手动安装 | Podman + Buildah + Skopeo 默认集成 | Docker 仍在 EPEL/AppStream,但 Red Hat 主推 Podman(无 daemon,rootless 支持更好)。 |
| 网络栈 | network-scripts (ifcfg-eth0) |
默认禁用 network-scripts,强制 NetworkManager + nmcli |
旧 /etc/sysconfig/network-scripts/ 配置将失效!需迁移至 NM 或使用 firewalld 替代 iptables 持久化规则。 |
| 防火墙 | iptables 为主 |
firewalld 默认启用,iptables 需手动安装 |
规则需转换:iptables-save > rules.v4 → firewall-cmd --permanent --add-rich-rule=... |
| 加密算法 | OpenSSL 1.0.2 | OpenSSL 1.1.1+(TLS 1.3 默认) | 老旧客户端可能无法连接;检查应用 TLS 兼容性。 |
| 软件源结构 | base, updates, extras |
AppStream + BaseOS 双流模型 | 传统 centos-release 被替换;需启用 --enablerepo=crb 获取额外包(如 gcc-toolset)。 |
✅ 推荐实践步骤(生产环境)
-
评估阶段
- 用
leapp做预检(即使计划重装,也可识别依赖问题) - 扫描代码中的
#!/usr/bin/python→ 改为#!/usr/bin/python3或虚拟环境 - 导出所有自定义配置:
rpm -qa > packages.list,diff -r /etc old/new
- 用
-
迁移策略
graph LR A[CentOS 7.6] --> B{选择方案} B -->|低风险 | C[新装 CentOS 8.2 VM] B -->|中风险 | D[Leapp 升级 + 充分测试] C --> E[迁移数据/配置/脚本] D --> F[回归测试网络/DB/安全] E & F --> G[灰度上线] -
关键检查项(上线前)
- ✅ 所有服务能否启动?
systemctl list-units --failed - ✅ 防火墙规则是否生效?
firewall-cmd --list-all - ✅ Python 应用是否兼容 Py3?
python3 --version+ 功能测试 - ✅ 定时任务、cron 表达式是否保留?
- ✅ 监控X_X(Zabbix/Nagios)是否适配新内核/端口?
- ✅ 所有服务能否启动?
📌 最后提醒
- CentOS 8 已于 2024-12-31 结束生命周期(EOL),后续应转向:
- Rocky Linux 8/9 或 AlmaLinux 8/9(1:1 二进制兼容)
- 或直接规划迁移至 CentOS Stream 8/9(滚动预览版,适合开发)
- 若业务稳定且无需新功能,保持 CentOS 7.9(EOL: 2024-06-30) 并打满补丁,比冒险升 8 更安全。
需要我提供:
leapp预检报告解读示例?- 从
iptables转firewalld的具体命令模板? - Python 2 → 3 自动迁移脚本建议?
欢迎告诉我你的具体应用场景(如 Web 服务器/数据库/CI/CD),我可定制迁移 checklist。
云小栈