在阿里云环境下,CentOS停用后如何平滑迁移至AlmaLinux或Rocky Linux?

在阿里云 ECS 实例上,将 CentOS Linux(特别是已停止维护的 CentOS 7/8)迁移至 AlmaLinux 或 Rocky Linux,核心挑战在于“平滑”与“数据一致性”。由于这两个发行版是 CentOS 的 1:1 二进制兼容替代品(RHEL clone),理论上可以直接替换内核和基础包,但直接原地升级风险极高,极易导致系统无法启动或服务中断。

作为云原生环境下的运维专家,我推荐以下两种主流且稳妥的方案。强烈建议优先使用方案一(快照+重装/新建),因为这是云环境下最安全、回滚成本最低的方式。


⚠️ 前置关键步骤:备份与评估

无论选择哪种方案,必须执行以下步骤:

  1. 创建系统盘快照:在阿里云控制台对 ECS 系统盘打快照。这是你的“后悔药”。
  2. 备份数据盘:如果有独立数据盘,确保挂载点数据已同步备份。
  3. 导出配置清单:记录当前安装的软件包列表、自定义配置文件路径、 crontab 任务等。
# 保存已安装包的列表(用于后续验证)
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n' > installed_packages.txt

方案一:【推荐】基于快照的新建实例迁移法(最安全)

原理:利用阿里云快照功能,快速克隆一个原实例,然后在克隆出的新实例中完成系统替换,最后切换 IP 或 DNS。此方法避免了原地操作导致的系统崩溃风险。

步骤详解:

  1. 创建系统盘快照

    • 登录阿里云控制台 → ECS → 实例 → 更多 → 磁盘和镜像 → 创建快照。
  2. 从快照创建新实例

    • 使用上述快照,通过“自定义镜像”或“批量创建实例”功能,创建一个与原配置相同的新 ECS 实例(建议先不分配公网 IP,避免冲突)。
  3. 在新实例中执行系统替换

    • 登录新实例,进入单用户模式或使用 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 脚本,逻辑相同。

  4. 清理旧内核并重启

    • 替换完成后,清理旧的 CentOS 内核包,保留新系统的内核。
    • 重启实例,检查是否能正常进入系统。
  5. 恢复配置与服务

    • 重新安装业务所需的 RPM 包(参考之前保存的 installed_packages.txt)。
    • 恢复 /etc/nginx, /etc/mysql 等配置文件(如果它们被覆盖,需从旧实例 SCP 过来)。
    • 启动所有业务服务,验证功能。
  6. 流量切换

    • 测试新实例无误后,在阿里云控制台解绑旧实例的弹性公网 IP(EIP),绑定到新实例。
    • 或更新 DNS 解析指向新实例 IP。

方案二:原地升级(高风险,仅限经验丰富的工程师)

原理:直接在现有系统中替换 YUM/DNF 源,然后执行系统级包替换。警告:此方法可能导致 GRUB 引导失败、驱动丢失或服务异常,务必确保有快照!

步骤详解(以 CentOS 7 → AlmaLinux 8 为例):

注意:CentOS 7 和 AlmaLinux 8 之间跨越了 major version,不能直接 yum distro-sync。需要借助中间步骤或使用官方迁移工具。

  1. 准备阶段

    # 更新当前系统
    yum update -y
    reboot  # 确保重启到最新内核
    
    # 安装必要的工具
    yum install dnf yum-utils -y
  2. 添加目标发行版仓库

    # 以 AlmaLinux 8 为例
    curl -o /etc/yum.repos.d/almalinux.repo https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux.repo
  3. 执行分布式同步(Distro Sync)

    # 这会尝试将所有包替换为 AlmaLinux 8 的版本
    # 注意:这可能会删除一些不在新仓库中的包,或引入冲突
    dnf distro-sync --releasever=8
  4. 处理内核和引导加载程序

    # 安装新的内核
    dnf install kernel-core -y
    
    # 重建 GRUB 配置
    grub2-mkconfig -o /boot/grub2/grub.cfg  # BIOS 系统
    # 或对于 UEFI 系统:
    grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
  5. 重启并验证

    reboot
    # 登录后检查版本
    cat /etc/os-release
  6. 修复潜在问题

    • 检查 /var/log/messages 和 /var/log/dmesg 是否有错误。
    • 重新编译内核模块(如 DKMS 管理的驱动,例如 NVIDIA 驱动、VirtualBox 内核模块等)。
    • 重新安装缺失的业务依赖。

📌 阿里云特定注意事项

  1. 云助手(Cloud Assistant)

    • 如果使用阿里云云助手执行命令,建议在迁移前确认云助手客户端是否与新系统兼容。AlmaLinux/Rocky 通常兼容较新的云助手客户端。
  2. 弹性网卡(ENI)

    • 如果使用 ENI,迁移后需确保主网卡和辅助网卡的绑定关系正确。在方案一中,新建实例时可选择“继承原实例的网络配置”。
  3. 安全组规则

    • 新建实例后,务必检查安全组规则是否与原实例一致,否则可能导致 SSH 或业务端口不可访问。
  4. 监控与告警

    • 迁移完成后,记得在云监控中添加新实例的监控项,或调整告警策略中的实例 ID。
  5. 合规性提示

    • 确保所使用的 AlmaLinux/Rocky Linux 版本符合你的业务许可证要求。虽然它们是开源的,但某些商业软件可能对底层 OS 有特定认证要求。

✅ 最终建议

  • 生产环境:坚决使用方案一。时间成本远低于故障恢复成本。
  • 测试环境:可以尝试方案二,以学习内部机制。
  • 版本映射参考:
    • CentOS 7 → AlmaLinux 8 / Rocky Linux 8
    • CentOS 8 / Stream → AlmaLinux 9 / Rocky Linux 9

迁移完成后,建议进行一次完整的业务压测,确保所有组件(包括数据库连接池、缓存服务等)在新内核下表现稳定。

未经允许不得转载:CLOUD云枢 » 在阿里云环境下,CentOS停用后如何平滑迁移至AlmaLinux或Rocky Linux?