如何在阿里云ECS上将CentOS 8平滑迁移到Rocky Linux?

在阿里云 ECS 上将 CentOS 8 平滑迁移到 Rocky Linux,官方不推荐直接升级(CentOS 8 已于 2021 年停止维护),而是建议通过系统重建或数据迁移方式完成。以下是安全、可操作的完整方案:


✅ 推荐方案:使用 migrate2rocky 工具 + 备份验证

适用于希望保留现有配置、应用和数据的最小化变更场景。

🔧 前置准备

  1. 创建快照备份
    在阿里云控制台对当前 ECS 实例创建磁盘快照(至少包含系统盘 /dev/vda)。

    # 可选:本地备份关键目录
    tar -czf /tmp/backup-configs.tar.gz /etc /var/log /root/.ssh
  2. 确认兼容性
    检查是否运行了仅支持 CentOS 的专有软件(如某些旧版 RHEL/CentOS 专用驱动或脚本):

    rpm -qa | grep -E 'centos|rhel'
    systemctl list-unit-files | grep -i centos
  3. 安装迁移工具
    CentOS 8 已无 yum 源,需先临时启用 EPEL 或手动安装 migrate2rocky

    # 方法1:从 GitHub 下载并执行(推荐)
    wget https://raw.githubusercontent.com/rocky-linux/migrate2rocky/main/migrate2rocky.sh
    chmod +x migrate2rocky.sh
    
    # 方法2:若已有网络访问,尝试临时挂载 CentOS Stream 8 repo(不稳定)
    # 不推荐,易导致依赖混乱
  4. 执行迁移
    ⚠️ 务必在测试环境验证后再生产操作!

    sudo ./migrate2rocky.sh --force

    工具会自动:

    • 替换所有 centos 相关包为 rocky 版本
    • 更新 /etc/os-release、GRUB 配置
    • 修复 SELinux 策略和防火墙规则
    • 生成迁移报告 migration-report.txt
  5. 重启并验证

    reboot
    # 启动后检查
    cat /etc/os-release        # 应显示 Rocky Linux 8.x
    rpm -qa | grep rocky       # 确认核心包已切换
    systemctl status           # 检查服务状态

🔄 备选方案(更稳妥):新实例迁移法

适合对稳定性要求高、允许短暂停机或支持灰度发布场景。

步骤:

  1. 在新区域/可用区创建 Rocky Linux 8/9 ECS 实例

    • 选择镜像:阿里云市场 → “Rocky Linux 8” 或 “Rocky Linux 9”
    • 配置相同安全组、VPC、标签等
  2. 同步数据与应用

    # 原 CentOS 8 实例上打包数据
    rsync -avz --exclude '/proc/*' --exclude '/sys/*' 
     /home/ user@new-rocky-ip:/home/
    
    # 或使用阿里云 OSS 中转大文件
    ossutil cp -r /data/oss://bucket-name/data-backup/
  3. 迁移配置文件与代码

    • 手动迁移 /etc/nginx, /etc/my.cnf, 自定义脚本等
    • 使用 Ansible/SaltStack 批量部署(推荐)
  4. DNS 切换或负载均衡重定向

    • 修改 CNAME 指向新 IP
    • 或在 SLB 后端服务器组中替换旧实例
  5. 监控与回滚预案

    • 观察日志、性能指标 ≥24 小时
    • 保留旧实例快照,7 天内可随时回退

❌ 避免的做法

  • 直接运行 yum updatednf system-upgrade(CentOS 8 已无官方源)
  • 手动替换 /etc/yum.repos.d/ 后强制升级(极易破坏依赖链)
  • 忽略 SELinux/AppArmor 策略差异(可能导致服务无法启动)

📌 阿里云专属优化建议

项目 操作
云助手命令 aliyuncli ecs ExecuteCommand 远程执行迁移脚本
自动快照策略 迁移前设置“每日快照”,持续保留 7 天
云监控告警 新增 CPU/内存/磁盘 IO 阈值告警,对比迁移前后基线
镜像定制 迁移成功后保存为新自定义镜像,供后续复用

需要我提供:

  • migrate2rocky.sh 的完整校验脚本?
  • Ansible Playbook 示例(自动化迁移配置)?
  • 针对特定应用(如 WordPress、MySQL)的迁移 checklist?

请告诉我您的具体场景(业务类型、停机窗口、是否允许双跑),我可进一步定制方案。