高级工程师的日常 | 从CentOS到龙蜥:国产开源操作系统选型与迁移实录

206 阅读8分钟

一、引言

又来难活了😅 。这几年,CentOS 停止维护的消息,真是让无数企业 IT 团队心头一紧。原本大家都习惯了 “CentOS = 免费版 RHEL”,稳得很,可突然说停就停,留下了一堆线上系统要么不安全,要么只能转付费 RHEL。
但企业哪能随便加预算?于是摆在我们面前的路基本就两条:要么掏钱买商业版,要么找一款免费的国产或开源系统来替代。
最终我把目光投向了几款开源操作系统。既能免费可用,还贴合信创国产化的大背景。听起来很美好,但从 CentOS 迁移过来,过程却是一堆坑。
本文就和大家分享一下这段“迁移日常”。无论今后迁移国产操作系统还是符合信创标准的操作系统,都能起到借鉴的作用!

二、操作系统选型

当前,市面上有一些开源免费的Linux操作系统。选了几个有代表性的,并分析了各自的优缺点,如下所示:

属性openEulerOracle Linux龙蜥 Anolis OS
是否开源/免费✅ 完全开源、免费✅ 完全开源、免费✅ 完全开源、免费
架构支持x86_64、ARMx86_64、ARMx86_64、ARM
维护周期稳定版仅承诺 4 年提供 10+ 年常规支持维护社区维护周期长达 10 年
CentOS 兼容性❌ 未承诺 100% 兼容 CentOS 8✅ 内核兼容 RHEL,CentOS 应用可平滑迁移✅ 100% 兼容 RHEL/CentOS 软件生态
国产化程度国产,华为主导❌ 非国产(Oracle 美国背景)国产,社区主导
企业应用案例政企、华为生态广泛应用海外大公司案例(美国联合航空等)天猫双11 实战验证
研发/社区背景背靠华为,内核贡献度高Oracle 官方支持,企业级保障中立、开放社区

说实话,当时在几款系统里挑来挑去也挺纠结的。最后选了龙蜥Anolis OS 8官方公布的稳定版本,选择RHCK(RHEL Compatible Kernel)内核版本。主要是看中了几方面:

  • 它跟 CentOS 高度兼容,迁移过来不用大动干戈,常用第三方组件基本都能直接跑,省心不少;
  • 维护周期长,官方承诺 10 年支持,比一些只维护 4 年的发行版靠谱多了,咱这类金融系统讲究的就是长期稳定;
  • 有大规模的实战案例,比如天猫双 11 那种流量洪峰都扛住了,用在生产环境里也就更有底气;
  • 国产,不会受到国外限制。

综合下来,龙蜥既国产化,又社区活跃,还能接着吃上 CentOS 那套“老饭”,对我们来说就是最合适的选择。

三、软件系统适配对象概览

在将现有软件系统迁移至开源国产操作系统时,需要全面梳理并适配系统中涉及的各类软件组件。总体可分为以下五类:

  • 自有源代码
    包括用 C/C++、Java 等语言编写的业务逻辑代码和工具程序,是最具可控性的部分。主要工作包括重新编译、修复平台差异导致的问题、验证运行时行为是否一致。
  • 基础软件
    指 Linux 内核、编译器(gcc/clang)、glibc、JDK、Golang 运行时等底层支撑环境。是所有上层软件正常运行的前提,需确认其版本、行为和兼容性。
  • 第三方库(无源码)
    如第三方机构提供的专用 API、商业加密/认证模块、数据库驱动等。这类组件因无法修改或重新编译,适配难度最大,需评估兼容性或寻找替代方案。
  • 第三方库(有源码)
    如grpc、protobuf 等开源库,通常可在新平台上通过源码构建获得兼容版本。关键在于构建工具链的适配和依赖关系的梳理。
  • 第三方组件
    包括 Nginx、ETCD、Tomcat、Redis 等常见中间件。多数已有适配版本,可直接使用官方提供的安装包或源码自行构建,注意配置、插件和服务管理方式的差异。

四、软件适配

自有源代码

  • C/C++、golang这类编译型语言开发的模块为了保险起见,需要在新操作系统上重新编译;
  • java、python这类解释类语言开发的模块无需做任何修改。

总体上来看,自有源代码的迁移几乎无风险。

基础软件

  1. linux内核 龙晰8使用的内核版本是linux 4.18,龙晰8与红帽8和CENTOS 8的内核大版本一致,都是4.18。几乎无风险。 参考:
    阿里云龙晰镜像发布记录
    红帽版本发布记录
    阿里云CentOS镜像发布记录
操作系统版本内核版本
Anolis OS 8.6 RHCK4.18.0-372.32.1.an8_6.x86_64
Anolis OS 8.10 RHCK4.18.0-553.52.1.0.1.an8.x86_64
CentOS 8.04.18.0-147.5.1.el8_1.x86_64
RHEL 8.104.18.0-553.el8_10
  1. gcc
    使用系统自带的gcc版本,自带的版本是与操作系统兼容性最好的版本。当前Anolis OS 8.6 RHCK的gcc版本是gcc8.5。几乎无风险。
  2. golang、jdk
    版本保持不变,使用之前在CentOS系统上使用的版本。龙晰官方承诺100%兼容CentOS 8,风险较低。

第三方库(无源码)

属性兼容方案风险程度
openssl有些第三方库依赖较低的1.0.2版本openssl,使用龙晰8.6软件源中自带的兼容低版本的openssl包进行替换。兼容包名称:compat-openssl10.x86_64
第三方API库如果第三方发布了龙晰版本,则替换;否则使用原来能在CentOS上稳定运行的第三方API库

第三方库(有源码)

同自有源代码场景。几乎无风险。

第三方组件

项目中常用一些第三方组件,如redis、Nginx、ETCD等。可按以下思路进行适配:

  • 若提供了龙晰的版本,则替换;
  • 若没有龙晰的版本,但是有源代码,可以编译出兼容版本;
  • 源代码也没有的情况下,则使用原来能在CentOS上稳定运行的可执行文件。

五、迁移后的完整测试

操作系统换好了,看似一切顺利,但作为工程师我们都知道:不测就上线,那是勇气,不是经验 😂。
所以最后一步,一定要做完整的验证测试,确保系统在新环境中没有留下隐患。

  • 功能测试
    业务代码回归:覆盖所有核心功能,包括对数据库驱动、中间件、外部接口等第三方依赖的验证,确保逻辑正确、兼容性无问题。
  • 性能测试
    关键交易链路压测:对核心链路做性能对比,看迁移后是否有抖动或性能退化。
    资源占用监控:重点关注 CPU、内存、IO 表现,确认是否与 CentOS 时代一致。
  • 稳定性测试
    长时间运行:启动关键服务,连续跑几天,观察是否有内存泄漏或异常退出。
    异常场景模拟:比如网络抖动、磁盘满、进程被 kill,看系统是否能平稳恢复。

六、应急预案

再完美的迁移也要做好“万一”的准备。应急预案的核心思想就是:如果新系统出问题,要能快速回到可用状态。

  • 回滚机制:在所有迁移事项未完全通过前,保留一套原 CentOS 环境,确保能在短时间内切回。
  • 双环境并行:在条件允许的情况下,新旧系统并行运行一段时间,通过双写比对等方式来验证一致性。
  • 数据安全:定期做数据库和关键业务数据的快照或备份,保证数据在应急切换中不丢失。
  • 责任分工:明确谁来触发回滚,谁来执行操作,谁来确认恢复完成,避免临场混乱。

七、总结

从 CentOS 停止维护,到我们一步步选型、比对,再到最终落地在 龙蜥 Anolis OS 上,这一路其实就是一次“系统换壳+全面体检”。
选择龙蜥的原因很明确:兼容 CentOS 生态、社区维护周期长、在大规模场景(如双11)里经受过考验,这些都让它成为一个靠谱的继任者。
当然,迁移不是光换个操作系统这么简单。重新编译代码、验证兼容性、做完整测试、准备应急预案,这些都是保障系统稳定运行的必要环节。只有这样,我们才能在新平台上放心跑业务,而不是带着一堆隐患上生产。
最后一句:适配信创/国产 OS 不是“做完就完事”,而是一次长期工程。后面还需要关注内核版本升级、第三方软件适配、国产数据库的持续支持等。作为工程师嘛,活总是一个接一个的,但把系统稳稳落在新平台上,本身就是一种成就感。🚀

📬 欢迎关注VX公众号“Hankin-Liu的技术研究室”,持续分享信创、软件性能测试、调优、编程技巧、软件调试技巧相关内容,输出有价值、有沉淀的技术干货。