从 CentOS 8 迁移到 Alibaba Cloud Linux 2.1903 LTS,这不仅仅是换个名字那么简单,本质上是一次跨大版本、跨底层发行版体系的“换血”手术。
先泼盆冷水:CentOS 8 是基于 RHEL 8 体系的(RPM + Systemd + DNF),而 Alibaba Cloud Linux 2.1903 LTS 是基于 RHEL 7/CentOS 7 体系的(RPM + Systemd + Yum)。这意味着你的包管理器变了,系统服务初始化逻辑变了,很多依赖库的版本也变了。
如果直接尝试 yum update 或者简单的文件拷贝,必死无疑。以下是作为过来人总结的真实迁移路径和避坑指南。
核心结论:不要试图原地升级
千万不要在现有的 CentOS 8 系统上尝试通过 yum 或 dnf 直接升级到 Alibaba Cloud Linux 2。这是两个不同的代码分支,依赖关系完全冲突。
正确的做法只有两条路:
- 全新安装+数据迁移(推荐,最稳妥)
- P2V 工具迁移(适合不想重装系统的场景,但仍有风险)
方案一:全新安装 + 数据/配置迁移(推荐)
这是最干净、隐患最少的方式。Alibaba Cloud Linux 是阿里云官方推荐的操作系统,深度优化了内核和网络栈,性能通常优于原生 CentOS。
1. 准备工作
- 备份!备份!备份!:无论哪种方案,确保你有完整的快照或异地备份。
- 评估应用依赖:检查你的应用是否强依赖特定版本的 Python、PHP、Java 或数据库。ACL 2.1903 的内核和基础库版本较老(接近 CentOS 7),新软件可能需要编译安装或使用容器化部署。
- 准备镜像:在阿里云控制台创建自定义镜像时,选择 Alibaba Cloud Linux 2.1903 LTS。
2. 系统层适配差异
| 特性 | CentOS 8 | Alibaba Cloud Linux 2.1903 LTS | 适配注意 |
|---|---|---|---|
| 包管理器 | dnf / rpm |
yum / rpm |
脚本中的 dnf 需改为 yum |
| 默认 Shell | Bash (新版) | Bash (兼容性好) | 基本无感 |
| 网络管理 | NetworkManager | NetworkManager | ACL 2 默认启用 NM,配置方式类似 |
| 安全模块 | SELinux (Enforcing) | SELinux (Permissive/Disabled by default in some images) | 重点检查:ACL 2 镜像可能默认关闭或宽松处理 SELinux,如果你的应用强依赖 SELinux 策略,需重新配置 |
| 内核版本 | 4.18+ | 4.19+ (定制内核) | ACL 2 内核经过深度优化,驱动兼容性更好,但 API 层面需注意旧版内核特性 |
3. 具体迁移步骤
- 启动新实例:使用 Alibaba Cloud Linux 2.1903 LTS 镜像启动一台新的 ECS 实例。
- 安装基础环境:
- 安装 Web 服务器(Nginx/Apache)、数据库(MySQL/PostgreSQL/MongoDB)、运行时环境(Node.js/Python/Java)。
- 注意:由于 ACL 2 基于较老的 RHEL 7 生态,某些最新版的软件包可能在官方源中找不到。你可能需要:
- 使用第三方源(如 EPEL, Remi for PHP)。
- 使用 Docker/Podman 容器化部署(强烈推荐,隔离依赖问题)。
- 从源码编译安装。
- 迁移数据:
- 使用
rsync或scp将/var/www,/home,/etc/nginx,/etc/mysql等关键目录从旧服务器同步到新服务器。 - 如果是数据库,建议使用
mysqldump或物理备份恢复,而不是直接复制数据文件(因为版本可能不同)。
- 使用
- 配置调整:
- 修改 Nginx/Apache 配置文件中的路径(如果之前用了绝对路径且硬编码)。
- 检查 Crontab 定时任务,重新添加。
- 检查防火墙规则(Firewalld vs Iptables)。ACL 2 默认使用
firewalld,与 CentOS 8 一致,但规则可能需要重新导入。
- 测试与割接:
- 绑定临时域名或修改本地 Hosts 指向新 IP 进行功能测试。
- 确认无误后,更换 DNS 解析。
方案二:使用 P2V 迁移工具(阿里云在线迁移)
如果你不能停机太久,或者应用极其复杂不愿重装,可以使用阿里云提供的在线迁移工具。
- 在 CentOS 8 服务器上安装迁移 Agent:
- 下载阿里云的
aegis或专门的迁移工具包。 - 执行安装脚本,它会扫描系统状态并生成迁移任务。
- 下载阿里云的
- 在阿里云控制台发起迁移:
- 选择“从其他云厂商/物理机迁移”。
- 指定目标镜像为 Alibaba Cloud Linux 2.1903 LTS。
- 执行迁移:
- 工具会将整个磁盘内容打包,通过网络传输到阿里云 OSS,然后转换为镜像。
- 关键点:这个过程是全盘克隆,包括引导记录、内核参数等。
- 后续适配:
- 迁移完成后,启动新实例。
- 必须修改 GRUB 引导参数:因为从 CentOS 8 内核切换到 ACL 2 内核,initramfs 和 kernel 路径都变了。通常需要进入救援模式或使用 LiveCD 修复引导。
- 网络配置重置:MAC 地址变化会导致网卡识别失败,需删除
/etc/sysconfig/network-scripts/ifcfg-eth0中的 UUID 和 HWADDR,重启网络服务让 DHCP 重新获取或手动配置静态 IP。 - SELinux 标签重建:由于文件系统上下文可能错乱,建议执行
restorecon -Rv /或暂时禁用 SELinux。
⚠️ 警告:P2V 迁移跨大版本内核风险极高,容易遇到启动失败、驱动不匹配等问题。除非万不得已,否则不建议生产环境直接使用此方法。
常见坑点与解决方案
1. 依赖库版本过低
Alibaba Cloud Linux 2 的基础库(glibc, openssl, zlib 等)版本较低。
- 现象:编译新版软件报错,提示
GLIBC_2.17 not found。 - 解决:
- 优先使用 Docker 容器,容器内可以包含任意版本的 glibc。
- 如果必须裸机运行,考虑使用
pyenv、nvm等工具管理语言环境,避免依赖系统级库。 - 对于 Java 应用,只要安装了 JDK 即可,不受影响。
2. 防火墙规则丢失
- 现象:新服务器无法访问 80/443 端口。
- 解决:ACL 2 默认启用
firewalld。systemctl enable firewalld systemctl start firewalld firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
3. SELinux 导致权限问题
- 现象:Nginx 无法读取网站文件,日志报 Permission denied。
- 解决:
- 临时方案:
setenforce 0(仅用于测试,生产环境慎用)。 - 永久方案:修改
/etc/selinux/config设为disabled或permissive,然后重启。 - 正确方案:学习并使用
chcon或restorecon设置正确的 SELinux 上下文标签。
- 临时方案:
4. 时间同步
- CentOS 8 默认用
chronyd,ACL 2 也支持chronyd和ntpd。 - 确保新服务器上
chronyd服务正常运行,否则可能导致证书验证失败、日志时间混乱等问题。
为什么推荐 Alibaba Cloud Linux 2?
虽然迁移麻烦,但值得做,原因如下:
- 长期支持:2.1903 LTS 提供长达数年的安全更新,比 CentOS 8 已停止维护的状态更安全。
- 性能优化:针对阿里云硬件做了深度调优,网络吞吐、磁盘 IO 表现更好。
- 兼容性:完美兼容 CentOS/RHEL 生态,大多数命令和配置方式一致。
- 成本:免费使用,无需额外购买 OS 授权。
最后建议
- 最小化迁移原则:不要试图把旧服务器的所有角落都搬过去。只迁移必要的数据、代码和配置。
- 容器化是未来:如果可能,将应用拆分为微服务,使用 Docker 部署。这样你只需要迁移 Docker 镜像和数据卷,操作系统本身的差异被屏蔽掉。
- 灰度发布:先在一台小配置机器上测试迁移流程,成功后再操作生产环境。
迁移不是终点,而是架构优化的起点。祝顺利!
云技术博客