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

在阿里云环境下将已停用的 CentOS(尤其是 CentOS 7 或 CentOS 8)平滑迁移至 AlmaLinux 或 Rocky Linux,需特别注意:阿里云官方不支持直接“就地升级”(in-place upgrade)CentOS 到 Alma/Rocky,且 CentOS 7/8 已停止维护(EOL),直接升级存在高风险(如内核/驱动/云平台兼容性问题、yum/dnf元数据损坏、阿里云专有组件失效等)。因此,推荐采用“重建+数据迁移”的平滑迁移策略,兼顾安全性、稳定性与阿里云最佳实践。

以下是经过验证的、适用于生产环境的分步迁移方案:


✅ 推荐方案:新建 AlmaLinux/Rocky 实例 + 数据/配置迁移(零停机或最小停机)

⚠️ 前提:原 CentOS 实例仍在运行(即使已 EOL,仍可访问),且您有完整备份与变更管理权限。

▶️ 阶段一:评估与准备(1–2 小时)

项目 操作说明
1. 确认当前 CentOS 版本 cat /etc/redhat-release(如 CentOS Linux release 7.9.20098.5.2111
2. 识别关键依赖
  • 检查是否使用阿里云专有服务:
     ✓ aliyun-service(云监控)、
     ✓ cloud-init(必须兼容)、
     ✓ kdump/grub2 配置、
     ✓ 自定义内核模块(如 xen-blkfront 已弃用,需确认)
  • 列出所有已安装软件包:rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n' | sort > pkg-list-centos.txt
3. 选择目标发行版
  • CentOS 7 → AlmaLinux 8 或 Rocky Linux 8(不建议升到 9,因 ABI/CentOS 7 应用兼容性差)
     → 更稳妥:AlmaLinux 8.9 / Rocky Linux 8.9(LTS,支持至 2029)
     → 阿里云镜像站已提供:
      🔗 https://mirrors.aliyun.com/almalinux/
      🔗 https://mirrors.aliyun.com/rocky/
  • ❌ 避免 CentOS 7 → AlmaLinux 9(glibc/openssl 升级跨度大,易导致应用崩溃)
4. 创建快照 & 备份
  • 对原 CentOS 系统盘创建全量快照(阿里云控制台 → 云服务器 ECS → 磁盘 → 创建快照)
  • 导出重要数据:数据库(mysqldump/pg_dump)、Web 根目录、配置文件(/etc 下关键子目录如 /etc/httpd, /etc/nginx, /etc/systemd/system)、SSL 证书、自定义脚本

▶️ 阶段二:部署新实例(15 分钟)

步骤 操作
1. 创建新 ECS 实例
  • 地域/可用区:与原实例一致(确保 VPC、安全组、内网互通)
  • 镜像:选择阿里云官方提供的 AlmaLinux 8.9Rocky Linux 8.9(在「镜像市场」搜索或从公共镜像列表选择)
    ⚠️ 验证镜像来源:
     ✓ AlmaLinux 官方认证镜像(阿里云合作发布)
     ✓ Rocky Linux 由阿里云同步维护(rockylinux-8-x64-20231201.vhd 类似版本)
  • 实例规格:≥ 原实例(尤其内存/CPU,避免新系统负载过高)
  • 网络:同 VPC + 同安全组(或临时开放测试端口)
  • 登录方式:建议使用密钥对(更安全)
2. 初始化新实例
  • SSH 登录,执行基础更新:
    sudo dnf update -y && sudo reboot
  • 安装必要工具:
    sudo dnf install -y epel-release git wget curl vim net-tools bash-completion
  • 启用阿里云源(优化速度):
    sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/almalinux*.repo
    sudo sed -i 's|#baseurl=http://repo.almalinux.org|baseurl=https://mirrors.aliyun.com/almalinux|g' /etc/yum.repos.d/almalinux*.repo
    (Rocky 同理替换 rocky

▶️ 阶段三:迁移配置与数据(核心步骤,按业务类型拆分)

类型 迁移方法 注意事项
Web 服务(Nginx/Apache)
  • 复制配置:/etc/nginx/conf.d/*.conf, /etc/nginx/nginx.conf
     → 在新实例中校验语法:sudo nginx -t
  • 同步网站文件:rsync -avz --delete /var/www/ user@new-ip:/var/www/
✅ 确保 SELinux 上下文正确(若启用):
sudo restorecon -Rv /var/www
❌ 不要直接复制 /etc/nginx 全目录(新系统可能含默认模板冲突)
数据库(MySQL/MariaDB)
  • 在旧 CentOS 导出:
    mysqldump -u root -p --all-databases --single-transaction > full-backup.sql
  • 在新实例安装相同版本 MariaDB(如 mariadb-server-10.3):
    sudo dnf module enable mariadb:103 && sudo dnf install -y mariadb-server
  • 导入:
    mysql -u root -p < full-backup.sql
⚠️ 严禁跨大版本升级(如 MySQL 5.7 → 8.0);若需升级,请先在旧环境升级再迁移,或使用逻辑导出
应用服务(Java/Python/Node.js)
  • 迁移运行时环境:
     • Java:安装 OpenJDK 11(Alma 8 默认)
     • Python:使用 python3(系统自带),避免 pip2
     • Node.js:用 dnf module install nodejs:18
  • 复制应用代码、JVM 参数、systemd unit 文件(/etc/systemd/system/myapp.service
  • 重载服务:
    sudo systemctl daemon-reload && sudo systemctl enable myapp && sudo systemctl start myapp
✅ 使用 systemctl list-dependencies --reverse myapp.service 检查依赖关系
阿里云专有组件
  • 安装阿里云云监控(aliyun-service):
    curl -o aliyun-service.sh http://update.aegis.aliyun.com/download/agent_installer.sh
    sudo bash aliyun-service.sh <your-access-key-id> <your-access-key-secret>
    (需提前在 RAM 控制台创建只读权限的 AK)
  • 确认 cloud-init 已启用:
    sudo systemctl is-enabled cloud-init → 应为 enabled
  • 检查网卡命名:AlmaLinux 8 默认 ensX,与 CentOS 7 一致(无须修改 udev rules)
🔑 云监控需 AK 权限(最小权限原则:仅授予 AliyunECSReadOnlyAccess + AliyunCloudMonitorFullAccess

▶️ 阶段四:验证与切换(关键!)

步骤 方法 工具/命令
1. 功能验证
  • HTTP/HTTPS 访问(curl/wget 测试首页、API 接口)
  • 数据库连通性(mysql -h new-ip -u test -p
  • 定时任务(crontab -l, systemctl list-timers
  • 日志检查:
    sudo journalctl -u nginx --since "1 hour ago"
curl -I http://new-ip
ss -tlnp | grep :80
2. 性能基线对比
  • 对比 CPU/内存/磁盘 I/O(top, iostat -x 1 5
  • Web 响应时间(ab -n 1000 -c 100 http://new-ip/
使用阿里云 ARMS 或自建 Prometheus+Grafana
3. DNS/负载均衡切换
  • 若使用阿里云 SLB:在控制台将后端服务器从旧实例平滑摘除 → 新实例加入 → 观察 5 分钟 → 全量切流
  • 若使用 DNS:降低 TTL 至 300 秒 → 切换 A 记录 → 监控缓存生效(dig your-domain.com @8.8.8.8
✅ 切换前确保新实例健康检查通过(SLB 需配置 /healthz 端点)

▶️ 阶段五:收尾与下线

任务 操作
1. 数据一致性最终校验 对比关键业务表行数、文件 MD5(如 md5sum /var/www/html/index.html
2. 旧实例处理
  • 保留 7 天(观察期)→ 执行 sudo poweroff
  • 确认无流量后,删除快照(避免费用)
  • 释放实例(阿里云控制台操作)
3. 文档更新 更新运维手册、Ansible Playbook(将 centos 替换为 almalinux)、CMDB 中 OS 字段

❌ 不推荐的方案(高风险,阿里云明确不支持)

方案 风险说明
leapp 升级(CentOS 7→8) Leapp 已被弃用;Alma/Rocky 官方未适配阿里云内核(kernel-mlkernel-aws);极大概率导致 dracut 失败、无法启动
dnf distro-sync 强制替换 repo 会破坏 glibc/systemd 依赖链,引发 Segmentation fault,需重装
P2V 工具直接克隆 阿里云虚拟化层(KVM/Xen 混合)与 AlmaLinux 内核驱动兼容性未经验证,易蓝屏/panic

🌟 阿里云特别提示(必看)

  • AlmaLinux/Rocky 8 在阿里云已通过全面兼容性测试(包括 aliyun-cli, cloud-init, ecs-utils, aegis);
  • ✅ 支持阿里云 ESSD AutoPL 云盘、共享块存储、IPv6、弹性网卡(ENI)
  • ⚠️ 若使用 CentOS Stream,请勿迁移到 Alma/Rocky(定位不同:Stream 是 RHEL 开发分支,Alma/Rocky 是 RHEL 兼容稳定版);
  • 🔐 安全加固建议:启用 firewalld(替代 iptables)、配置 faillock、开启 SELinux enforcing

📦 附:一键检查脚本(保存为 check-migration.sh

#!/bin/bash
echo "=== 系统基础信息 ==="
hostnamectl
echo -e "n=== 关键服务状态 ==="
systemctl is-active nginx mysql || echo "nginx/mysql not found"
echo -e "n=== 阿里云组件 ==="
rpm -q aegis cloud-init || echo "aegis/cloud-init missing"
echo -e "n=== 网络配置 ==="
ip a | grep "inet " | grep -v "127.0.0.1"

运行后上传至新实例快速核对。


如需进一步自动化(Ansible Playbook 模板)、数据库迁移脚本(带校验)、或针对特定中间件(如 Tomcat/Kafka)的迁移指南,我可为您定制输出。欢迎补充您的具体环境细节(如:CentOS 版本、核心应用类型、是否使用 RDS/OSS、是否有 DevOps 流水线等),我将提供精准增强方案。

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