加油
努力

CentOS 7.6 升级到 8.3 有哪些需要注意的地方?

CentOS 7.6 不能直接升级(in-place upgrade)到 CentOS 8.3 —— 这是官方明确不支持、且技术上高风险、极易失败的操作。Red Hat 和 CentOS 官方从未提供从 CentOS 7 到 CentOS 8 的原地升级路径(yum updatednf system-upgrade 不适用),原因如下:

⚠️ 核心事实:无官方支持的升级路径

  • CentOS 7 基于 RHEL 7(使用 systemd v219、glibc 2.17、kernel 3.10.x,init 系统为 systemd 但兼容性层较重)
  • CentOS 8 基于 RHEL 8(systemd v239+、glibc 2.28、kernel 4.18+、模块化仓库、dnf 替代 yum、废弃 iptables(默认用 nftables)、NetworkManager 成为网络配置唯一推荐方式等)
  • 底层 ABI、库版本、服务管理、安全框架(SELinux 策略)、文件系统布局(如 /usr/libexec/ 结构变化)存在重大不兼容,导致原地升级极可能引发系统崩溃、服务不可用、内核 panic 或无法启动。

✅ 正确做法:迁移(Migration),而非升级

应采用全新安装 + 数据/配置迁移的方式。以下是关键注意事项与步骤建议:


🔍 一、升级前必须做的准备工作

项目 说明
✅ 1. 全面备份 • 使用 rsync / borgbackup / 商业备份工具完整备份 /etc, /home, /var/www, /var/lib/mysql(或对应数据库目录)、应用配置、SSL 证书等
验证备份可恢复性(在测试环境还原一次)
✅ 2. 应用兼容性评估 • 检查所有自定义软件、脚本、第三方 RPM(如 nginx、redis、python 应用)是否提供 CentOS 8 兼容版本
• Python 2 已被移除 → 所有依赖 Python 2 的脚本需迁移至 Python 3(默认 python36python38
• Java 应用:检查 JDK 版本兼容性(RHEL 8 默认 OpenJDK 11)
✅ 3. 内核与硬件兼容性 • CentOS 8 最低要求:x86_64 CPU 支持 PAE,建议 BIOS/UEFI 固件更新
• 检查驱动:NVIDIA/AMD GPU、特定网卡(如某些 Broadcom BCM57xx)、RAID 卡驱动是否提供 RHEL 8/CentOS 8 支持包
✅ 4. 服务重构检查 iptables → 建议迁移到 nftables(或保留 iptables-nft 兼容层,但长期不推荐)
firewalld 配置需适配新规则语法(zone、rich rules 变化)
postfix/sendmailhttpd(Apache 2.4.37+)、mariadb(10.3+)配置语法微调

🛠️ 二、迁移实施步骤(推荐流程)

  1. 搭建新 CentOS 8.3 环境

    • 下载 CentOS 8.3 ISO(注意:CentOS 8 已于 2021-12-31 EOL,强烈建议跳过 CentOS 8,直接选用 CentOS Stream 8/9 或 Rocky Linux/AlmaLinux 8/9
    • 新建虚拟机或物理机安装 CentOS 8.3(最小化安装)
  2. 逐项迁移配置与数据

    • /etc: 复制关键配置(/etc/hosts, /etc/resolv.conf, /etc/ssh/sshd_config, firewalld/, chrony.conf 等),切勿全量覆盖(避免冲突)
    • 用户与权限:导出 /etc/passwd, /etc/group, /etc/shadow(脱敏后)→ 用 useradd/groupadd 重建
    • 数据库:mysqldump + mysql 导入(注意字符集、SQL mode 兼容性);PostgreSQL 使用 pg_dump
    • Web 应用:同步代码、静态资源、SSL 证书(路径通常为 /etc/pki/tls/
  3. 验证与切换

    • 在新系统上启动服务并测试(端口、日志、功能、性能)
    • 使用 ss -tlnp, journalctl -u httpd, dnf list installed | grep <pkg> 确认状态
    • DNS/负载均衡器切换流量(灰度发布)
    • 旧系统保留至少 7 天,确保回滚能力

⚠️ 三、特别注意的“坑”

风险点 说明 应对方案
yumdnf dnf 是默认包管理器,命令语法相似但行为不同(如 dnf distro-syncyum update 学习 dnf 基础命令;禁用 yumrm /usr/bin/yum)避免误操作
模块化(Modular)仓库 httpd, nginx, postgresql 等提供多个流(stream),如 httpd:2.8 vs httpd:2.6 使用 dnf module list 查看,dnf module enable httpd:2.8 显式启用所需流
SELinux 策略变更 RHEL 8 SELinux 策略更严格,常见报错如 avc: denied { name_connect } 启用 setroubleshoot-server,用 ausearch -m avc -ts recent 分析,必要时临时设 permissive 测试,再用 semanage port -a 修复
时间同步 chronyd 成为唯一支持服务(ntpd 已弃用) 迁移 chrony.conf,确认 poolserver 配置有效
容器运行时 Docker CE 不再官方支持(RHEL 8 推荐 podman/buildah 如需 Docker,须手动添加 Docker CE repo,注意内核兼容性

🚫 四、绝对不要尝试的操作

  • ❌ 运行 yum updatednf system-upgrade 从 CentOS 7 升级到 8(会失败并破坏系统)
  • ❌ 直接修改 /etc/redhat-releaserpm -Uvh 强刷核心包(必然导致系统无法启动)
  • ❌ 忽略 EOL 状态:CentOS 8 已于 2021-12-31 终止维护,无安全更新!继续使用存在严重安全风险。

✅ 更优替代方案(强烈推荐)

方案 优势 说明
➡️ 迁移到 Rocky Linux 8 / AlmaLinux 8 100% 二进制兼容 RHEL 8,长期维护(至 2029),免费开源 安装后迁移流程相同,但获得持续安全更新
➡️ 升级到 CentOS Stream 9 或 Rocky Linux 9 基于更新内核(5.14+)、现代工具链、LTS 支持至 2032 更面向未来,适合新部署(注意应用兼容性需二次验证)
➡️ 容器化迁移(Docker/Podman) 隔离环境、简化依赖、便于跨平台 将应用打包为容器,在新 OS 上运行,降低系统耦合度

📌 总结建议

不要升级,而是迁移;不要选 CentOS 8,而应选 Rocky/AlmaLinux 8 或直接上 9;所有操作前必须备份 + 测试;生产环境务必制定回滚预案。
若当前系统稳定且无迫切需求,可暂缓迁移,但需评估 CentOS 7 EOL(2024-06-30)后的安全风险,并制定明确下线计划。

如需,我可为你提供:

  • CentOS 7 → Rocky Linux 8 迁移检查清单(Excel 表格版)
  • 自动化配置同步脚本(Ansible Playbook 示例)
  • 常见服务(Nginx + PHP-FPM + MariaDB)迁移配置对比
    欢迎随时提出具体场景(如 Web 服务器 / 数据库服务器 / Jenkins 主机),我可定制化指导。

最后提醒:安全第一,备份先行,测试为王。

云服务器