在阿里云环境下,CentOS 停用后平滑迁移至 AlmaLinux 或 Rocky Linux(二者均为 RHEL 下游发行版,兼容 CentOS 生态)是可行的。由于两者与 CentOS 8/Stream 高度兼容,迁移过程可最大程度保留现有配置、应用和数据。以下是推荐的平滑迁移方案:
✅ 核心原则
- 避免直接升级:CentOS 7 无官方升级路径;CentOS 8 Stream 虽可升级但非生产推荐。
- 推荐“重装 + 数据迁移”或“工具辅助迁移”:优先选择新系统实例部署 + 数据/配置同步,确保稳定性。
- 阿里云特性适配:注意云镜像兼容性、安全组、元数据服务(IMDS)、启动盘格式等。
📌 方案一:全新实例部署 + 配置迁移(推荐,最稳妥)
适用于生产环境,风险最低,便于验证。
步骤概览:
-
准备新实例
- 在阿里云控制台创建新 ECS 实例:
- 操作系统:选择 AlmaLinux 9 / Rocky Linux 9(建议选 9,长期支持更好;若应用依赖旧库,可选 8)
- 架构:保持与原实例一致(x86_64 / aarch64)
- 网络:同一 VPC、安全组规则需手动复制
- 存储:按需挂载相同规格云盘(SSD/ESSD)
- 在阿里云控制台创建新 ECS 实例:
-
安装基础环境与依赖
# 以 AlmaLinux 为例 sudo dnf install -y epel-release git vim net-tools firewalld sudo systemctl enable --now firewalld -
迁移关键配置与数据
- 应用代码:通过
rsync/scp同步/var/www,/opt,/home等目录rsync -avz --exclude='/tmp' --exclude='/proc' --exclude='/sys' user@old_centos:/path/to/app/ new_user@new_server:/path/to/app/ - 配置文件:重点迁移
/etc下非动态生成文件(如httpd.conf,nginx.conf,my.cnf,sshd_config等)
⚠️ 注意:部分配置文件含主机名、IP 硬编码,需替换为新 IP 或主机名
- 数据库:
- MySQL/MariaDB:使用
mysqldump导出 → 导入到新实例mysqldump -u root -p --all-databases | gzip > backup.sql.gz scp backup.sql.gz new_server:~/backup.sql.gz ssh new_server "gunzip < backup.sql.gz | mysql -u root -p" - PostgreSQL:
pg_dumpall类似流程
- MySQL/MariaDB:使用
- 定时任务:迁移 crontab (
crontab -l) 并重新设置到新用户 - 用户与权限:重建用户组、SSH 密钥、sudoers 配置
- 应用代码:通过
-
验证与切换
- 在新实例上完整测试业务功能(接口、日志、监控)
- 更新 DNS 解析指向新实例 IP(或负载均衡后端)
- 观察运行 24–48 小时无异常后,释放旧 CentOS 实例
🛠 方案二:使用 leapp 工具迁移(仅适用于 CentOS 8 → Alma/Rocky 8+)
❗ 不适用于 CentOS 7(
leapp不支持),且存在一定风险,不建议生产环境首选。
前提条件:
- 源系统:CentOS 8(非 Stream 更佳,但 Stream 也可尝试)
- 目标系统:AlmaLinux 8 / Rocky Linux 8
- 磁盘空间充足(≥ 原系统可用空间的 1.5 倍)
- 关闭所有非必要服务,备份重要数据
操作流程:
# 1. 安装 leapp 和预检插件
sudo dnf install -y leapp leapp-preupgrade-plugin-leapp-repo
# 2. 执行预检查(关键!会输出不兼容项)
sudo leapp preupgrade
# 查看报告:/var/log/leapp/leapp-report.txt
# 修复列出的问题(如移除废弃包、调整配置)
# 3. 执行升级(重启进入新系统)
sudo leapp upgrade
# 升级完成后自动重启,首次登录即为目标系统
✅ 优点:减少重装工作量
⚠️ 风险:可能因第三方软件、自定义内核模块导致失败;阿里云云镜像的 cloud-init 和元数据服务需额外适配
🔧 阿里云特有注意事项
| 项目 | 说明 |
|---|---|
| 云助手 & 初始化脚本 | 新实例需重新配置云助手脚本(如 install.sh);检查 cloud-init 是否正常工作 |
| 安全组 | 手动复制原实例入站/出站规则(端口、IP 段) |
| 快照与备份 | 迁移前对原系统打快照;新系统上线后再清理旧资源 |
| 监控 Agent | 重新安装阿里云监控插件(alibaba-cloud-monitor) |
| 启动盘类型 | 确保新实例使用高效云盘/ESSD,避免性能瓶颈 |
| SELinux | 迁移后建议先设为 permissive 排查问题,再恢复 enforcing |
📊 迁移前后对比检查清单
| 类别 | 检查项 |
|---|---|
| ✅ 系统层 | 内核版本、YUM/DNF 源、时间同步(chrony/NTP)、防火墙策略 |
| ✅ 应用层 | Web 服务(Nginx/Apache)、中间件(Redis/Kafka)、语言运行时(Python/Node/Java)版本一致性 |
| ✅ 数据层 | 数据库完整性、文件权限、日志轮转配置 |
| ✅ 运维层 | 监控告警、备份计划、CI/CD 流水线集成 |
| ✅ 合规性 | 许可证声明(Alma/Rocky 均符合 RHEL 协议)、审计日志连续性 |
💡 最佳实践建议
- 先在测试环境完整演练一次(克隆原实例做 POC)
- 采用蓝绿部署:新旧系统并行运行,逐步切流
- 保留回滚方案:旧实例至少保留 7 天(只读模式),以防紧急回退
- 文档化变更:记录所有配置差异、依赖变化、故障处理经验
如需进一步协助,可提供:
- 当前 CentOS 版本(7/8/Stream?)
- 主要应用栈(LAMP? Java Spring? Docker 容器?)
- 是否使用 Kubernetes / 容器编排?
我可为您定制更具体的迁移脚本或配置模板。
轻量云Cloud