努力
加油

如果熟悉 CentOS,迁移到 Aliyun Linux 2.1903 需要注意哪些问题?

既然你熟悉 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 方案。
    • 避免自行从源码编译复杂的内核模块,除非你有完整的测试环境。

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

  1. 备份快照:无论多小的改动,先打系统盘快照。
  2. 测试环境验证:先在非生产 ECS 上重装 Alibaba Cloud Linux 2.1903,部署应用,复现所有依赖项。
  3. 检查第三方库:特别是 Python pip 包、Node.js npm 包、Java JDK 版本,确保没有硬编码路径。
  4. 网络连通性测试:重点测试内网互通、网络出口、DNS 解析速度。
  5. 监控接入:确保 CloudMonitor 和 SLS Agent 正常上报数据。
  6. 灰度发布:先切一台机器,观察 24-48 小时,再全量迁移。

最后一句忠告:
Alibaba Cloud Linux 不是“另一个 CentOS”,它是“为阿里云硬件和网络深度优化的 CentOS”。最大的价值在于性能调优和云原生集成,最大的陷阱在于过度自信地认为“跟 CentOS 一模一样”。保持敬畏,充分测试,就能平稳过渡。