加油
努力

从 CentOS 7 迁移到 CentOS 9 有哪些需要注意的地方?

从 CentOS 7 迁移到 CentOS 9 并不是官方支持的直接升级路径,且存在重大架构与生态变化。需要特别注意以下关键事项(按优先级和影响程度梳理):


⚠️ 一、核心前提:不存在“就地升级”(In-place Upgrade)

  • CentOS 7 → CentOS 9 不支持 dnf system-upgradeyum update 升级
    Red Hat / CentOS 官方明确不支持跨大版本(如 7→8→9)的原地升级,尤其跳过 CentOS 8(已 EOL)。
    ✅ 正确做法:全新安装 + 数据/配置迁移(推荐),或先迁至 CentOS Stream 8/9(若需滚动更新模型)。

💡 注:CentOS Linux 7 已于 2024-06-30 终止维护(EOL),CentOS Linux 8 早在 2021-12-31 EOL;当前唯一受支持的 CentOS 是 CentOS Stream 8/9(滚动发布的上游开发流),而非传统稳定版。


🔧 二、关键技术变更与兼容性风险

类别 CentOS 7 (RHEL 7) CentOS 9 (RHEL 9 / CentOS Stream 9) 迁移注意事项
内核 3.10.x 5.14+(默认启用 eBPF、cgroup v2 默认启用) 检查自定义内核模块、eBPF 程序兼容性;cgroup v2 可能影响容器(Docker 需 ≥20.10,Podman 更友好)
systemd 219 250+ systemd-resolved 成为默认 DNS 解析器;/etc/resolv.conf 可能被覆盖;检查服务单元文件语法(如 RestartSec= 等新字段)
默认文件系统 XFS(但 ext4 仍广泛使用) XFS(默认,支持 reflink & DAX) 若用 ext4,确认无依赖旧特性;XFS 需 xfs_info 验证功能支持
网络栈 iptables(legacy) nftables 默认后端(iptables 命令为 nft 的 wrapper) iptables-save 输出格式变化;防火墙规则需重写或用 iptables-legacy(临时方案,不推荐);firewalld 规则基本兼容
Python Python 2.7(默认)、Python 3.6(可选) Python 3.9(唯一默认)Python 2 已彻底移除 所有 Python 脚本必须迁移到 Python 3;检查 #!/usr/bin/python → 改为 #!/usr/bin/python3;pip、venv、setuptools 全面更新
GCC / 开发工具 GCC 4.8.5 GCC 11+(默认) 编译旧 C/C++ 代码可能触发新警告/错误(如 -Werror=stringop-truncation);需测试构建与 ABI 兼容性
Crypto & TLS OpenSSL 1.0.2(弱算法默认启用) OpenSSL 3.0(FIPS 140-3 模式默认启用,禁用 SSLv3/TLS 1.0/1.1) 应用若依赖 TLS 1.0/1.1 将失败;需升级客户端/服务端;检查 openssl.cnf 配置迁移
数据库 MariaDB 5.5 / PostgreSQL 9.2 MariaDB 10.3 / PostgreSQL 13+(Stream 9) 主版本升级需 dump/restore(如 pg_dump → pg_restore);检查 SQL 兼容性(如 ONLY_FULL_GROUP_BY 默认开启)

🐳 三、容器与虚拟化生态

  • Docker CE:RHEL/CentOS 9 不再提供官方 Docker 包(因与 Podman 冲突);推荐改用 Podman(rootless 默认,兼容 Docker CLI) 或手动安装 Docker CE(需添加第三方 repo,不推荐生产环境)。
  • Kubernetes:RHEL 9/CentOS Stream 9 是 OpenShift 4.12+ 的基线;kubelet 默认使用 cgroup v2 + systemd cgroup driver(需在 /var/lib/kubelet/config.yaml 中确认)。
  • QEMU/KVM:libvirt 8.0+,支持 UEFI Secure Boot、TPM 2.0 虚拟设备 —— 若旧 VM 使用 BIOS + legacy boot,需转换固件类型。

🛠 四、迁移实操建议(最小化风险)

  1. 评估与规划

    • 使用 leapp 工具(Red Hat Leapp)进行预检(虽非官方支持 7→9,但可识别部分兼容性问题):
      # 在 CentOS 7 上运行(需启用 leapp repo)
      yum install leapp-upgrade
      leapp preupgrade --debug
    • 生成报告,重点审查 inhibitors(阻断项)和 reports(建议项)。
  2. 备份与验证

    • 完整备份:/etc, /var/log, /home, 数据库 dump, 自定义服务配置。
    • 在测试环境部署 CentOS 9,逐项验证:
      • 应用依赖(如 Java 版本、Node.js、.NET Core runtime)
      • 监控X_X(Zabbix Agent 5+, Prometheus node_exporter ≥1.3)
      • 日志收集(rsyslog → journald 集成,或 Fluentd/Vector 配置更新)
  3. 配置迁移要点

    • /etc/fstab: 检查 XFS mount options(如 inode64, noatime 仍有效,但 allocsize 等已废弃)
    • /etc/sysctl.conf: 移除废弃参数(如 net.ipv4.tcp_fin_timeout 在新内核中行为变更)
    • SELinux: RHEL 9 强化策略(如 container_manage_cgroup 布尔值默认 off),需 ausearch -m avc -ts recent 排查拒绝日志
  4. 替代方案考虑

    • 首选:迁移到 Rocky Linux 9AlmaLinux 9(100% RHEL 9 二进制兼容,长期稳定支持)。
    • 开发/CI 场景:采用 CentOS Stream 9(滚动更新,接近 RHEL 9 下一版本)。
    • ❌ 避免:CentOS Linux 9(从未存在,CentOS 项目已于 2020 年终止该分支)。

📌 总结:迁移决策树

graph LR
A[当前 CentOS 7] --> B{是否需长期稳定?}
B -->|是| C[迁至 Rocky/AlmaLinux 9<br>(全新安装 + 配置迁移)]
B -->|否,需最新特性| D[迁至 CentOS Stream 9<br>(滚动更新,适合开发/测试)]
C --> E[验证应用兼容性<br>• Python 3.9<br>• OpenSSL 3.0<br>• nftables/firewalld<br>• cgroup v2]
D --> E
E --> F[自动化部署<br>Ansible/Terraform 重写 Playbook]

最后提醒

  • CentOS 7 EOL 后无安全更新,务必在 2024 年底前完成迁移
  • 生产环境强烈建议先在隔离环境完整验证,勿跳过兼容性测试。
  • 参考权威文档:
    • RHEL 9 Migration Planning Guide
    • CentOS Stream vs RHEL vs Community Distros

如需具体场景(如 LAMP 栈、Java 应用、K8s 集群)的迁移 checklist,可告知,我可为您定制详细步骤。

云服务器