在阿里云 ECS 实例上,将 CentOS Linux(特别是已停止维护的 CentOS 7/8)迁移至 AlmaLinux 或 Rocky Linux,核心挑战在于“平滑”与“数据一致性”。由于这两个发行版是 CentOS 的 1:1 二进制兼容替代品(RHEL clone),理论上可以直接替换内核和基础包,但直接原地升级风险极高,极易导致系统无法启动或服务中断。
作为云原生环境下的运维专家,我推荐以下两种主流且稳妥的方案。强烈建议优先使用方案一(快照+重装/新建),因为这是云环境下最安全、回滚成本最低的方式。
⚠️ 前置关键步骤:备份与评估
无论选择哪种方案,必须执行以下步骤:
- 创建系统盘快照:在阿里云控制台对 ECS 系统盘打快照。这是你的“后悔药”。
- 备份数据盘:如果有独立数据盘,确保挂载点数据已同步备份。
- 导出配置清单:记录当前安装的软件包列表、自定义配置文件路径、 crontab 任务等。
# 保存已安装包的列表(用于后续验证)
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n' > installed_packages.txt
方案一:【推荐】基于快照的新建实例迁移法(最安全)
原理:利用阿里云快照功能,快速克隆一个原实例,然后在克隆出的新实例中完成系统替换,最后切换 IP 或 DNS。此方法避免了原地操作导致的系统崩溃风险。
步骤详解:
-
创建系统盘快照
- 登录阿里云控制台 → ECS → 实例 → 更多 → 磁盘和镜像 → 创建快照。
-
从快照创建新实例
- 使用上述快照,通过“自定义镜像”或“批量创建实例”功能,创建一个与原配置相同的新 ECS 实例(建议先不分配公网 IP,避免冲突)。
-
在新实例中执行系统替换
- 登录新实例,进入单用户模式或使用 LiveCD 方式更安全,但对于 RHEL clone 之间的迁移,通常可以在运行状态下进行,但需停止所有非核心服务。
# 1. 停止所有业务服务 systemctl stop nginx mysql php-fpm ... # 2. 安装 EPEL 仓库和工具 yum install epel-release -y yum install dnf -y # CentOS 7 默认是 yum,建议升级到 dnf 以支持更复杂的依赖解析 # 3. 添加 AlmaLinux/Rocky 仓库 # 以 AlmaLinux 9 为例(假设你从 CentOS 8 迁移,或 CentOS 7 迁移到 AlmaLinux 8) # 注意:版本对应关系很重要!CentOS 7 -> AlmaLinux 8; CentOS 8/Stream -> AlmaLinux 9 # 下载 AlmaLinux release 包 wget https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh chmod +x almalinux-deploy.sh sudo ./almalinux-deploy.sh --yes注:Rocky Linux 也有类似的
rocky-deploy脚本,逻辑相同。 -
清理旧内核并重启
- 替换完成后,清理旧的 CentOS 内核包,保留新系统的内核。
- 重启实例,检查是否能正常进入系统。
-
恢复配置与服务
- 重新安装业务所需的 RPM 包(参考之前保存的
installed_packages.txt)。 - 恢复
/etc/nginx,/etc/mysql等配置文件(如果它们被覆盖,需从旧实例 SCP 过来)。 - 启动所有业务服务,验证功能。
- 重新安装业务所需的 RPM 包(参考之前保存的
-
流量切换
- 测试新实例无误后,在阿里云控制台解绑旧实例的弹性公网 IP(EIP),绑定到新实例。
- 或更新 DNS 解析指向新实例 IP。
方案二:原地升级(高风险,仅限经验丰富的工程师)
原理:直接在现有系统中替换 YUM/DNF 源,然后执行系统级包替换。警告:此方法可能导致 GRUB 引导失败、驱动丢失或服务异常,务必确保有快照!
步骤详解(以 CentOS 7 → AlmaLinux 8 为例):
注意:CentOS 7 和 AlmaLinux 8 之间跨越了 major version,不能直接
yum distro-sync。需要借助中间步骤或使用官方迁移工具。
-
准备阶段
# 更新当前系统 yum update -y reboot # 确保重启到最新内核 # 安装必要的工具 yum install dnf yum-utils -y -
添加目标发行版仓库
# 以 AlmaLinux 8 为例 curl -o /etc/yum.repos.d/almalinux.repo https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux.repo -
执行分布式同步(Distro Sync)
# 这会尝试将所有包替换为 AlmaLinux 8 的版本 # 注意:这可能会删除一些不在新仓库中的包,或引入冲突 dnf distro-sync --releasever=8 -
处理内核和引导加载程序
# 安装新的内核 dnf install kernel-core -y # 重建 GRUB 配置 grub2-mkconfig -o /boot/grub2/grub.cfg # BIOS 系统 # 或对于 UEFI 系统: grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg -
重启并验证
reboot # 登录后检查版本 cat /etc/os-release -
修复潜在问题
- 检查
/var/log/messages和/var/log/dmesg是否有错误。 - 重新编译内核模块(如 DKMS 管理的驱动,例如 NVIDIA 驱动、VirtualBox 内核模块等)。
- 重新安装缺失的业务依赖。
- 检查
📌 阿里云特定注意事项
-
云助手(Cloud Assistant)
- 如果使用阿里云云助手执行命令,建议在迁移前确认云助手客户端是否与新系统兼容。AlmaLinux/Rocky 通常兼容较新的云助手客户端。
-
弹性网卡(ENI)
- 如果使用 ENI,迁移后需确保主网卡和辅助网卡的绑定关系正确。在方案一中,新建实例时可选择“继承原实例的网络配置”。
-
安全组规则
- 新建实例后,务必检查安全组规则是否与原实例一致,否则可能导致 SSH 或业务端口不可访问。
-
监控与告警
- 迁移完成后,记得在云监控中添加新实例的监控项,或调整告警策略中的实例 ID。
-
合规性提示
- 确保所使用的 AlmaLinux/Rocky Linux 版本符合你的业务许可证要求。虽然它们是开源的,但某些商业软件可能对底层 OS 有特定认证要求。
✅ 最终建议
- 生产环境:坚决使用方案一。时间成本远低于故障恢复成本。
- 测试环境:可以尝试方案二,以学习内部机制。
- 版本映射参考:
- CentOS 7 → AlmaLinux 8 / Rocky Linux 8
- CentOS 8 / Stream → AlmaLinux 9 / Rocky Linux 9
迁移完成后,建议进行一次完整的业务压测,确保所有组件(包括数据库连接池、缓存服务等)在新内核下表现稳定。
CLOUD云枢