既然你熟悉 CentOS,那迁移到 Alibaba Cloud Linux 2.1903(基于 CentOS 7.9 内核优化版)其实是一个“半自动”的过程。因为它的底层兼容度极高,大部分情况下你可以直接替换镜像而不改代码。但作为老运维或开发者,不能只看表面兼容性,得盯着几个容易踩坑的深层细节。
以下是我在实际生产环境迁移中总结的几个关键点,按优先级排序:
1. 确认基础兼容性:它是 CentOS 7.9 的“亲儿子”
首先要明确一个概念:Alibaba Cloud Linux 2.x 系列是基于 CentOS 7.9 进行深度优化的。这意味着:
- 包管理:依然使用
yum/rpm。 - 系统命令:
systemd,firewalld,network-scripts(注意第5点) 的行为逻辑基本一致。 - 内核特性:它使用的是经过阿里云定制的 kernel(通常带有 AliOS 补丁),主要优化了网络吞吐、磁盘 I/O 和调度算法。
结论:如果你的业务只依赖标准 CentOS 7 的功能,迁移成本极低,几乎等于“换皮”。
2. 软件源与 EPEL 的配置变化
这是最容易出错的地方。CentOS 官方源在国内访问慢且不稳定,大家习惯配阿里源或清华源。但 Alibaba Cloud Linux 有自己的源策略。
- 默认源:新实例启动后,
/etc/yum.repos.d/下的配置文件会自动指向阿里云内网源。如果你手动修改过/etc/yum.repos.d/CentOS-Base.repo,可能会导致冲突或下载失败。 - 建议操作:
- 新建 ECS 实例时,直接使用“公共镜像”中的 Alibaba Cloud Linux 2.1903 LTS。
- 如果已有数据盘迁移,挂载后检查
/etc/yum.repos.d/下是否有AliyunLinux.repo或类似文件。 - 不要强行把 CentOS 的 baseurl 粘贴过来,除非你确定你要走公网且能接受延迟。优先使用内网 yum 源(如果实例在阿里云上)。
3. 内核模块与 DKMS 驱动
Alibaba Cloud Linux 的内核是定制版的,虽然 ABI 兼容,但某些第三方内核模块(DKMS)可能无法直接编译通过。
- 典型场景:NVIDIA GPU 驱动、ZFS 文件系统、某些虚拟化增强工具(如 VMware Tools 的非标准版本)。
- 风险点:升级内核后,这些模块可能需要重新编译。
- 应对:
- 如果使用 NVIDIA 驱动,建议使用阿里云提供的
nvidia-driver专用仓库,或者使用官方推荐的容器化 GPU 方案。 - 避免自行从源码编译复杂的内核模块,除非你有完整的测试环境。
- 如果使用 NVIDIA 驱动,建议使用阿里云提供的
4. 网络配置方式的变更(关键!)
CentOS 7 默认使用 NetworkManager + ifcfg-* 脚本,而 Alibaba Cloud Linux 2.x 为了更好支持云原生和网络虚拟化,对网络栈做了优化。
- ifcfg 脚本依然存在:你可以继续使用传统的
/etc/sysconfig/network-scripts/ifcfg-eth0方式配置 IP,这是最安全的过渡方式。 - Netplan 的支持:较新的 Alibaba Cloud Linux 版本开始引入 Netplan 作为可选配置方式,但不建议在生产环境中立即切换,除非你完全理解其 YAML 语法和 NetworkManager 的交互逻辑。
- 重要提醒:阿里云 ECS 的弹性网卡(ENI)和传统 eth0 行为略有不同。确保你的应用监听的是
0.0.0.0而不是特定的内网 IP,否则重启后可能因 DHCP 分配变化导致服务不可达。
5. SELinux 的状态
CentOS 默认启用 SELinux,Alibaba Cloud Linux 也默认启用。
- 问题:很多老旧应用(尤其是 PHP 早期版本、自定义部署的 Java 中间件)在 SELinux Enforcing 模式下会报权限错误。
- 建议:
- 不要一键
setenforce 0。这会让你失去安全保护。 - 先以
Permissive模式运行,观察日志/var/log/audit/audit.log,找出需要添加的策略规则。 - 如果应用确实复杂且无时间调试,可考虑设置为 Permissive 并记录原因,但严禁在生产长期关闭 SELinux。
- 不要一键
6. 时钟同步与 NTP
阿里云内部推荐使用 chrony 而非 ntpd。
- CentOS 7:默认可能是
ntpd或chronyd,取决于初始安装选项。 - Alibaba Cloud Linux:默认推荐
chrony,并且会与阿里云内部的 NTP 服务器(如ntp.aliyun.com或内网时间源)同步。 - 注意:如果你的应用强依赖精确时间戳(如XX交易、分布式锁),请确认
chrony.conf中的源是否适合你的场景。对于大多数互联网应用,阿里云的时间同步精度已经足够高(微秒级)。
7. 监控与日志采集 Agent
这是阿里云生态的核心优势,也是迁移时必须处理的。
- CloudMonitor Agent:阿里云推荐安装
cloudmonitor插件来采集 CPU、内存、磁盘 IO 等指标。 - SLS Agent:如果你用阿里云日志服务(SLS),需要安装
ilogtail。 - 动作:
- 在新实例初始化脚本中,务必包含安装这两个 Agent 的步骤。
- 旧 CentOS 实例上的监控脚本(如 crontab 写的自定义监控)可能需要适配新的路径或 API 接口。
8. 容器化环境的特殊说明
如果你跑 Docker 或 Kubernetes:
- Docker:Alibaba Cloud Linux 2.1903 默认不包含 Docker,需自行安装或使用阿里云提供的
docker-ce仓库。推荐使用containerd作为运行时,更轻量且与云原生集成更好。 - Kubernetes:阿里云 ACK(托管 Kubernetes)节点默认就是 Alibaba Cloud Linux,所以如果你的集群是 ACK,无需担心;如果是自建 K8s,确保 kubelet 和 cni 插件与当前内核版本兼容。
总结:迁移 checklist
- 备份快照:无论多小的改动,先打系统盘快照。
- 测试环境验证:先在非生产 ECS 上重装 Alibaba Cloud Linux 2.1903,部署应用,复现所有依赖项。
- 检查第三方库:特别是 Python pip 包、Node.js npm 包、Java JDK 版本,确保没有硬编码路径。
- 网络连通性测试:重点测试内网互通、网络出口、DNS 解析速度。
- 监控接入:确保 CloudMonitor 和 SLS Agent 正常上报数据。
- 灰度发布:先切一台机器,观察 24-48 小时,再全量迁移。
最后一句忠告:
Alibaba Cloud Linux 不是“另一个 CentOS”,它是“为阿里云硬件和网络深度优化的 CentOS”。最大的价值在于性能调优和云原生集成,最大的陷阱在于过度自信地认为“跟 CentOS 一模一样”。保持敬畏,充分测试,就能平稳过渡。
云技术博客