将云服务器从 CentOS 升级到 AlmaLinux 是一个常见的迁移操作,因为 CentOS Stream 的定位变化使得许多用户转向了与 RHEL 二进制兼容的发行版。虽然两者基于相同的代码库,但直接升级(In-place Upgrade)存在风险,通常建议采用“备份 + 重装”或“谨慎的迁移工具”方案。
以下是进行此次升级时必须注意的关键事项:
1. 核心策略选择:重装 vs. 原地升级
这是最重要的一点决策。
- 推荐方案(新建实例迁移):由于 CentOS 7/8 到 AlmaLinux 的底层包依赖关系复杂,直接运行
dnf或yum进行系统级升级极易导致依赖地狱、服务崩溃或引导失败。最稳妥的方式是在阿里云/腾讯云/AWS 等云厂商处创建一个新的 AlmaLinux 实例,通过数据同步(如 rsync, scp)或快照恢复将数据和配置迁移过去,最后切换 DNS/IP。 - 不推荐方案(原地升级):如果必须原地升级,请务必使用官方提供的迁移脚本(如
migrate2almalinux),且必须在操作前进行完整快照备份。即使如此,仍需做好回滚准备。
2. 软件源(Repository)变更
CentOS 的软件源地址与 AlmaLinux 不同,且命名规则有所调整。
- 源地址更新:CentOS 的
baseos、appstream等仓库名称和 URL 在 AlmaLinux 中可能发生变化。如果使用原地升级,必须确保/etc/yum.repos.d/下的配置文件被正确替换为 AlmaLinux 的源。 - 第三方源兼容性:检查你安装的第三方软件源(如 Nginx, PostgreSQL, Docker 官方源等)。部分旧源的域名或路径可能不再支持 AlmaLinux,需要手动修改
.repo文件中的 URL 以指向 AlmaLinux 对应的镜像站。
3. 关键软件包与依赖检查
- Python 环境:CentOS 7 默认 Python 2,CentOS 8 及 AlmaLinux 默认 Python 3。如果你的业务强依赖 Python 2 环境,需要在 AlmaLinux 上单独配置虚拟环境或容器,否则可能导致系统命令失效。
- SELinux 策略:AlmaLinux 默认开启 SELinux,且策略版本可能与 CentOS 略有差异。如果之前关闭了 SELinux (
setenforce 0),升级后需确认是否重新启用并测试应用兼容性,避免因权限问题导致服务启动失败。 - 内核模块:某些自定义的内核模块(如特定的网卡驱动、存储驱动)可能无法在 AlmaLinux 的新内核上编译或加载,需提前验证驱动兼容性。
4. 数据与配置迁移细节
如果是采用“新实例迁移”方案,需注意以下细节:
- 用户与权限:CentOS 的用户 UID/GID 分配逻辑可能与 AlmaLinux 不同。迁移时务必保留原有的 UID/GID,避免权限错乱(例如
www-data或nginx用户权限丢失导致 Web 服务无法写入日志)。 - 定时任务(Cron):CentOS 的 crontab 格式在 AlmaLinux 中基本兼容,但需检查是否有针对特定路径的绝对路径引用,确保在新系统中路径依然有效。
- 网络配置:
- CentOS 7:使用 NetworkManager 或传统的
ifcfg-eth0文件。 - AlmaLinux 8/9:更倾向于使用 NetworkManager 的 keyfile 格式或 Netplan(取决于具体版本和配置习惯)。
- 注意:云服务器的元数据接口(Metadata Service)IP 通常是固定的,但重启后网卡命名(如
ens33vseth0)可能会因云厂商虚拟化层变化而改变,需提前规划静态 IP 绑定。
- CentOS 7:使用 NetworkManager 或传统的
5. 安全组与防火墙
- Firewalld vs. Iptables:CentOS 7 默认使用
iptables,而 CentOS 8/AlmaLinux 默认切换到firewalld。如果之前配置的是 iptables 规则,升级后可能需要转换规则或重新配置 firewalld,否则会导致 SSH 端口被阻断,造成服务器失联。 - 云厂商安全组:无论系统如何升级,云控制台的安全组(Security Group)规则通常独立于操作系统。但在切换新实例后,记得将安全组规则应用到新实例上。
6. 回滚计划(Rollback Plan)
在进行任何操作前,必须制定回滚方案:
- 快照:对原 CentOS 实例创建完整的磁盘快照。
- 数据备份:将数据库、配置文件打包下载至本地或其他存储桶。
- 停机窗口:尽量选择在业务低峰期操作,并预留足够的时间处理突发状况。
总结建议
对于生产环境的云服务器,“新建 AlmaLinux 实例 -> 迁移数据/配置 -> 验证 -> 切换流量” 是最安全、风险最低的路径。尽量避免直接在运行中的 CentOS 服务器上执行大规模的系统包升级操作,除非你对 Linux 系统维护有极深的经验,并且已经做好了随时回滚的准备。
PHPWP博客