从 CentOS 7.6 迁移到 AlmaLinux 或 Rocky Linux 是一个涉及底层系统架构、软件生态和运维习惯的重大变更。虽然这两者都是 RHEL(Red Hat Enterprise Linux)的 1:1 二进制兼容替代品,但CentOS 7 与 Alma/Rocky 9(当前主流版本)之间存在巨大的代际差异。
以下是必须注意的核心问题,按优先级排序:
1. 核心架构差异:EL7 vs EL9
这是最大的风险点。不要直接尝试将 CentOS 7 文件原地升级/替换为 Alma/Rocky。它们属于不同的主版本(Major Version),内核、库文件和系统服务完全不同。
- 推荐做法:全新安装 AlmaLinux 9 或 Rocky Linux 9,然后迁移数据和配置。
- 如果必须保留数据:使用
rsync、tar或备份工具将/var/www,/home,/etc(部分配置)、数据库文件等迁移到新服务器,而非直接覆盖系统文件。
2. 系统初始化系统:SysVinit → systemd
- CentOS 7:仍大量使用 SysVinit 脚本和
chkconfig。 - Alma/Rocky 9:完全基于
systemd。 - 影响:
- 所有启动脚本需改为
.service单元文件。 - 命令变化:
service xxx start→systemctl start xxx;chkconfig --list→systemctl list-unit-files。 - 自定义守护进程:如果你有大量自定义的 init.d 脚本,需要重写为 systemd unit 文件,否则无法自动管理。
- 所有启动脚本需改为
3. 软件包管理器与依赖关系
- Yum vs DNF:
- CentOS 7 使用
yum。 - Alma/Rocky 9 默认使用
dnf(兼容 yum 命令,但底层不同)。 - 注意:某些第三方仓库(如旧版 EPEL、Nginx 官方源)可能尚未提供 EL9 支持,需确认兼容性。
- CentOS 7 使用
- EPEL 版本:
- CentOS 7 对应
epel-release版本 7。 - Alma/Rocky 9 需要安装
epel-release版本 9。 - 关键:不要混用 EPEL 7 和 EPEL 9 的包,会导致依赖冲突。
- CentOS 7 对应
4. 内核与硬件驱动
- 内核版本:
- CentOS 7:内核 ~3.10(长期维护分支)。
- Alma/Rocky 9:内核 ~5.14+。
- 影响:
- 专有驱动:如 NVIDIA GPU 驱动、某些 RAID 卡驱动、Wi-Fi 模块等,可能需要重新编译或下载新版本。
- 虚拟化:KVM/QEMU 配置基本兼容,但需注意 virtio 驱动更新。
- 容器化:Docker 在 EL9 上支持良好,但建议使用 Podman(RHEL 系默认)或最新 Docker CE。
5. 语言运行时环境
Python
- CentOS 7:Python 2.7 是默认系统 Python(已停止维护)。
- Alma/Rocky 9:Python 3.9 是默认系统 Python,无 Python 2。
- 行动项:
- 检查所有 Python 脚本是否兼容 Python 3。
- 若项目强依赖 Python 2,需在应用层使用虚拟环境(venv)或容器隔离,不要试图在系统中恢复 Python 2。
PHP
- CentOS 7:PHP 5.4/7.0(取决于仓库)。
- Alma/Rocky 9:PHP 8.0/8.1/8.2(通过 AppStream 或 Remi 仓库)。
- 行动项:
- 大量旧代码可能因 PHP 8 的废弃函数、类型严格性而报错。
- 需全面测试 Web 应用,特别是使用扩展(如 mysqlnd, pdo_mysql)的部分。
Java
- CentOS 7:OpenJDK 7/8。
- Alma/Rocky 9:OpenJDK 11/17。
- 行动项:确保应用程序兼容 JDK 11+。
6. 网络与防火墙
- iptables → nftables/firewalld:
- CentOS 7 默认使用
iptables。 - Alma/Rocky 9 默认使用
firewalld+nftables后端。 - 注意:
- 旧的 iptables 规则不会自动迁移。
- 需重新配置
firewall-cmd规则,或使用iptables-services包模拟旧行为(不推荐长期)。 - SELinux 策略更严格,可能需要调整上下文(context)。
- CentOS 7 默认使用
7. 数据库迁移
- MySQL/MariaDB:
- CentOS 7:MariaDB 5.5/10.3。
- Alma/Rocky 9:MariaDB 10.5+ 或 MySQL 8.0+。
- 行动项:
- 先导出全量数据(mysqldump)。
- 在新服务器安装新版数据库。
- 导入数据。
- 注意字符集、时区、密码认证插件(caching_sha2_password)的变化。
8. 安全与合规
-
SELinux:
- CentOS 7:通常设置为 Permissive 或 Enforcing(宽松)。
- Alma/Rocky 9:强制 Enforcing,且策略更细致。
- 行动项:
- 部署前务必记录 SELinux 日志(
audit.log)。 - 使用
semanage fcontext和restorecon修复权限问题。 - 建议先在 Permissive 模式下运行一段时间,再切换至 Enforcing。
- 部署前务必记录 SELinux 日志(
-
SSH 协议:
- CentOS 7:支持 SSHv1/v2。
- Alma/Rocky 9:默认禁用 SSHv1,强化密钥算法。
- 行动项:确保客户端支持现代加密套件。
9. 迁移步骤建议(最佳实践)
| 阶段 | 操作 |
|---|---|
| 1. 评估 | 列出所有安装的 RPM 包、自定义脚本、定时任务(cron)、系统服务。 |
| 2. 备份 | 完整备份 /etc, /var, /home, 数据库,以及配置文件。 |
| 3. 新服务器搭建 | 全新安装 AlmaLinux 9 或 Rocky Linux 9,最小化安装。 |
| 4. 基础配置 | 配置 YUM/DNF 源(含 EPEL 9)、设置主机名、时间同步(chrony)、防火墙。 |
| 5. 软件安装 | 安装新版 Web 服务器(Nginx/Apache)、数据库、运行时环境。 |
| 6. 数据迁移 | 使用 rsync 迁移静态文件,数据库使用 dump/restore。 |
| 7. 配置适配 | 修改配置文件以符合新路径、新语法(如 systemd service 文件)。 |
| 8. 测试 | 在隔离环境中充分测试功能、性能、安全性。 |
| 9. 切换 | DNS 切换、CNAME 指向新 IP,监控告警。 |
| 10. 退役 | 旧服务器保留至少 30 天作为回滚备用。 |
10. 特别提示:关于 AlmaLinux/Rocky 的选择
- AlmaLinux:由 CloudLinux 团队支持,社区活跃,有商业背景。
- Rocky Linux:由 CentOS 创始人 Gregory Kurtzer 发起,社区驱动,强调“中立”。
- 技术层面两者几乎无差别,可根据团队偏好选择。两者均提供官方迁移工具(
almalinux-deploy.sh/rocky-migrate.sh),但这些工具主要用于从其他 EL7/8 系统平滑过渡,对于从 CentOS 7 到 EL9 的大跨越,官方也不推荐全自动迁移,强烈建议手动规划。
总结
核心原则:不要原地升级,要全新安装 + 数据迁移。
重点关注 Python 2→3、PHP 5/7→8、iptables→firewalld/nftables、systemd 服务重构 四大痛点。
如需进一步帮助,可提供你的具体应用场景(如 Web 服务器、数据库、大数据节点等),我可给出更针对性的迁移方案。
云服务器