从 CentOS 迁移至 openEuler(华为欧拉系统)并非简单的“复制粘贴”操作,而是一次涉及内核版本、包管理器、系统服务以及底层依赖库的全面重构。虽然两者在理念上相似(均基于 Linux),但在具体实现细节上存在显著差异。
以下是从技术实操角度梳理的关键注意事项,分为核心差异分析、迁移前置准备、关键组件适配、数据与业务连续性保障四个维度。
一、 核心差异分析:为什么不能直接“平滑”升级?
-
包管理器变更:Yum/DNF vs. Dnf/RPM
- CentOS 8 之前主要使用
yum,CentOS 8/Stream 转向dnf。 - openEuler 默认使用
dnf,但其仓库结构、软件包命名规范及部分依赖关系与 RHEL/CentOS 体系不同。注意: openEuler 并不完全兼容 CentOS 的二进制包,直接替换 RPM 包会导致依赖冲突。
- CentOS 8 之前主要使用
-
内核版本与特性支持
- CentOS 7 使用 3.10 内核,openEuler 主流版本(如 22.03 LTS SP4)基于 5.10+ 内核。
- 风险点: 新内核可能移除旧内核中的某些驱动或模块(如部分老旧硬件驱动、特定文件系统特性)。需确认业务使用的内核模块是否在 openEuler 中已适配。
-
初始化系统:SysVinit/Sysctl vs. Systemd
- CentOS 7 开始全面转向
systemd,openEuler 同样深度集成systemd。 - 注意点: 自定义的启动脚本(
.sh)若未遵循 systemd 规范,可能在开机时无法正确加载。需将传统 init 脚本转换为 systemd service 单元文件。
- CentOS 7 开始全面转向
-
SELinux 策略差异
- CentOS 默认启用 SELinux,openEuler 也默认启用且策略更严格。
- 风险点: 迁移后,许多在 CentOS 上因 SELinux 被临时关闭而运行的服务,在 openEuler 上可能因权限拒绝而启动失败。需提前规划 SELinux 策略配置。
二、 迁移前置准备:评估与备份
1. 资产盘点与依赖分析
- 列出所有已安装的 RPM 包:
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n' | sort > centos_packages.txt - 识别非标准仓库来源: 检查是否安装了来自 EPEL、第三方源或手动编译的软件包。这些包在 openEuler 中可能无对应版本,需寻找替代方案或重新源码编译。
- 检查自定义内核模块: 如 DKMS 模块、私有驱动程序等,需联系厂商获取 openEuler 兼容版本。
2. 全量备份与快照
- 系统级备份: 对
/etc,/var/lib,/usr/local等关键目录进行完整备份。 - 数据库备份: 确保 MySQL、PostgreSQL、Redis 等数据完成物理或逻辑备份。
- 云主机快照: 若在云服务器上操作,务必创建整机快照,以便快速回滚。
3. 选择迁移路径
- 推荐路径: 全新安装 openEuler + 应用部署 + 数据迁移。这是最稳定、风险最低的方式。
- 不推荐路径: 直接在现有 CentOS 系统上进行 inplace upgrade(原地升级)。由于包管理器和内核差异巨大,极易导致系统崩溃。
三、 关键组件适配与改造
1. 软件包兼容性处理
- 官方仓库对照: 访问 openEuler 官网仓库,查询所需软件包是否存在。例如,
httpd在 openEuler 中仍为httpd,但配置路径和模块加载方式可能有细微变化。 - 替代方案: 若某软件包无直接替代品,考虑:
- 使用容器化部署(Docker/Podman),绕过宿主机依赖问题。
- 从源码编译安装(注意指定 prefix 避免污染系统目录)。
- 使用 Flatpak 或 AppImage 等通用格式。
2. 配置文件迁移与调整
- 网络配置: CentOS 使用
ifcfg-eth0风格,openEuler 推荐使用NetworkManager或netplan。需转换网络配置格式。 - 防火墙: CentOS 7 常用
iptables,openEuler 默认使用firewalld。需将 iptables 规则转换为 firewalld 区域/端口规则。 - 定时任务(Cron): 迁移 crontab 文件,并验证时间格式兼容性。
3. 开发环境重建
- 编译器: openEuler 默认 GCC 版本较新(如 GCC 11+),可能与旧代码不兼容。建议使用
devtoolset或容器提供特定版本编译器。 - Python/Java 环境: 系统自带 Python 3.9+,若业务依赖 Python 2,需通过 pyenv 或虚拟环境隔离。Java 可通过 SDKMAN 或 OpenJDK 包管理。
4. 中间件与数据库适配
- MySQL/MariaDB: openEuler 仓库提供 MariaDB 10.5+,需注意字符集、存储引擎参数是否需调整。
- Nginx/Apache: 配置语法基本兼容,但模块加载机制可能变化,需检查
modules.d目录下的配置。
四、 数据与业务连续性保障
1. 灰度发布与测试
- 搭建测试环境: 在独立服务器上安装 openEuler,完整复刻生产环境架构,进行压力测试和功能验证。
- 对比测试: 对比 CentOS 与 openEuler 下同一应用的 CPU、内存、I/O 性能表现,关注内核调度器差异带来的影响。
2. 监控与日志
- 监控XX: 确保 Zabbix Agent、Prometheus Node Exporter 等监控工具已适配 openEuler 架构。
- 日志轮转: 检查 rsyslog 或 journald 配置,确保日志收集正常。
3. 回滚预案
- 保留原系统镜像: 迁移期间,保留 CentOS 系统的完整镜像或磁盘快照。
- DNS 切换: 采用 DNS 解析切换而非 IP 绑定,便于快速切回原服务器。
五、 实用命令速查表
| 操作 | CentOS 命令 | openEuler 命令/说明 |
|---|---|---|
| 包管理 | yum install xxx |
dnf install xxx |
| 更新系统 | yum update |
dnf upgrade |
| 查看服务状态 | systemctl status xxx |
相同 |
| 设置开机自启 | chkconfig xxx on |
systemctl enable xxx |
| 防火墙规则 | iptables -L |
firewall-cmd --list-all |
| 内核版本 | uname -r |
相同 |
| 发行版信息 | cat /etc/redhat-release |
cat /etc/openEuler-release |
六、 总结与建议
- 不要追求“无缝迁移”:接受“重装+迁移”的模式,比强行原地升级更安全。
- 重视容器化:对于微服务架构,优先将应用容器化,操作系统仅作为基础设施层,可极大降低迁移复杂度。
- 利用华为云迁移工具:若业务部署在华为云上,可使用华为云提供的 SMS(Server Migration Service) 或 DRS(Data Replication Service),它们对 openEuler 有较好支持,能自动化执行部分迁移步骤。
- 社区支持:积极利用 openEuler 官方社区、华为技术支持文档及 GitHub 上的开源项目,遇到问题及时查阅最新 Issue 和解决方案。
迁移是技术债务的清理过程,也是拥抱新技术栈的机会。严谨的计划、充分的测试和清晰的回滚方案,是成功迁移的三大支柱。
云技术博客