背景

=================

最近在做的事,简单来讲,就是一套系统差不多有10多台虚拟机,都是centos系统,版本主要是7.3、7.6、7.9,现在centos停止维护了,转为了centos stream,而centos stream的定位是:Red Hat Enterprise Linux (RHEL) 开发之前持续交付的发行版,作为rhel的上游,更新迭代比较频繁,不稳定,对于生产系统来说是无法接受的。

那就只能转其他系统,具体转哪种呢,选择是很多的,简单列几个我了解到的,和centos兼容性比较好,操作习惯也基本相同的操作系统,以下部分内容来自于大模型。

国际上来说的话,免费的主要有rocky linux、alma linux,这两个我看网页提到的比较多;有钱的话,可以直接买RHEL。

  • Rocky Linux

完全兼容RHEL: 由原 CentOS 创始人发起,与Red Hat Enterprise Linux(RHEL)实现100%二进制兼容,无缝迁移原有CentOS应用环境134。

长期支持:提供长达10年的更新周期(如Rocky Linux 9支持至2032年),社区驱动确保维护透明性259。

  • AlmaLinux

RHEL克隆版:与RHEL完全兼容,由CloudLinux公司赞助,承诺长期维护(如AlmaLinux 9支持至2029年)128。

其他我看到的提到的,还有oracle linux(https://www.oracle.com/linux/)、VzLinux、Springdale Linux。

国内来说,免费的话,就是两个:

  • Anolis OS(龙蜥操作系统)

​ 背后是阿里,完全兼容CentOS生态:提供CentOS 7/8到Anolis OS的一键迁移工具,支持国产CPU架构(如鲲鹏、飞腾)。

  • openEuler (欧拉)

    背后是华为,高性能与多架构支持:优化内核调度,适配x86、ARM架构,适用于服务器、云计算、边缘计算。

付费的话,操作系统我比较知道的是麒麟和统信,我们最近两年上的项目,基本要求从硬件到软件,都要信创,像服务端操作系统就是用的麒麟V10。

image-20250420101425735

而统信,我了解不多,听说是一些桌面版操作系统在用,体验貌似一般。

我之前,有点奇怪,为什么运维同事最终会选择openEuler,技术上来说,感觉应该都还好,反正都是linux内核,从企业角度来说,为什么不选国外的rocky linux和alma linux,那自然是因为,一方面是信创要求,另一方面,是在出了难以解决的问题时,能寻求到技术支持,有时厂商还能帮忙背下锅。

选择国内的,为啥选了openeuler,而不是麒麟v10呢,那是因为麒麟v10是要收费的,能省点就省点呗。

那要免费,怎么选了openeuler而不是阿里龙蜥呢,我在查阅资料的过程中发现,麒麟V10,就是属于openEuler生态,银河麒麟V10服务器版基于openEuler社区的开源技术路线开发,其内核直接采用了openEuler的长期支持(LTS)版本。

这个在openeuler的官网就能看到:

https://www.openeuler.org/zh/download/commercial-release/

image-20250420102728051

所以,我估计,运维也是考虑到之前已经用了麒麟V10,大家用着比较习惯了,所以这次就直接选了openeuler。

而在我这一两周用起来,感觉和用centos是一样的,感觉和RHEL系兼容还是挺不错。下面就开始介绍本次是准备怎么做迁移。

openEuler介绍

===========================

openEuler是一款开源操作系统。当前openEuler内核源于Linux,支持鲲鹏及其他多种处理器,适用于数据库、大数据、云计算、人工智能等应用场景。

目前的版本(2025年4月),有这几个(https://www.openeuler.org/zh/download/):

openEuler 25.03,这个是社区创新版本,我们一般不选;

然后主要的LTS是下面这几个:

openEuler 24.03 LTS SP1

openEuler 22.03 LTS SP4

image-20250420105034301

运维组选定的是openEuler 22.03 LTS SP4。

我看了下,白皮书的内容还比较详细,可以读一下。

image-20250420104931360

额外说下,22.03就是表示是2022年03月发布的,但SP4不是这个时间发布的。

image-20250420105428330

另外,在白皮书中,可以看到该版本中的linux内核版本是5.10.

https://www.openeuler.org/whitepaper/openEuler 22.03 LTS SP4 技术白皮书.pdf

image-20250420105722769

迁移方式之迁移工具

=========================

openeuler也提供了迁移工具x2openeuler,可以看官网这里。

image-20250420105840171

image-20250420105907274

我画了个简单的图,说明下这个工具的大体架构。这个工具,你可以理解成一个后台管理系统,带界面,后台是python开发的,也带个数据库marial db。

image-20250420111038591

工具要对目标主机升级的时候,先把目标节点的ip加进来(以及ssh相关用户名密码),

image-20250420111350570

后续,python后台,就会通过ssh通道,传一些脚本到目标主机上执行,比如检查环境是否满足升级条件等等。

这其中,有个条件比较重要,就是目标主机需要配置一个yum源,其中需要提供openEuler操作系统的相关组件。

比如,我这边就给目标主机配置了一个yum源:

image-20250420111700544

image-20250420111726390

[openEuler-everything]
name=openEuler-everything
baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/RPM-GPG-KEY-openEuler[openEuler-EPOL]
name=openEuler-epol
baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/
enabled=1
gpgcheck=0[openEuler-2203-lts-sp4-update]
name=openEuler-2203-lts-sp4-update
baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/update/x86_64/
enabled=1
gpgcheck=0

其他需要注意的,就是升级过程前,会检查目标主机的磁盘空间是否足够(因为需要从openEuler源下载各种软件的rpm),我当时在本地虚拟机测试,磁盘空间小了,检查一直通不过。

说下为啥最终怎么没选用工具升级,因为对这个工具的研究还是不太深入,而且时间有点赶。这个工具是原地升级,工具内部怎么实现的,是黑盒;另外,本次测试,升级完成后,我发现,内核参数还是差了很多(这应该很多也是正常的,因为原系统是centos7.3,而openEuler的linux内核都是5.10了,比centos7.3的内核版本高了不少):

image-20250420112156566

当时就是黑盒的感觉比较重,然后时间也比较赶,我们这个服务器上有哪些东西我们也比较清楚(上面还有些源码编译的软件,肯定是要重新装,没法迁移的,这个工具应该是只能迁移yum/rpm安装的软件)。另外,上线的时候,进行原地升级,我和运维同事认为,风险比较大,不如弄一台新的机器出来,完全重新部署一遍(当然原地升级,其实也可以在线上对原来的虚拟机先打个快照了再操作,有问题就回滚快照),到时候有问题,流量切回原来的centos主机就行。

最终的升级思路

=======================

  • 计算线上的centos7.3服务器,进行过哪些变更,要尽量覆盖完全

    那怎么才能知道有哪些差异呢,我们的方式是,我在本地弄了个虚拟机,从网上下载了centos 7.3 1611版本的iso,完全部署了一个全新的原始的centos 7.3.

    然后在原始7.3和线上7.3上,执行各种内核配置、配置文件查看/导出的命令,然后进行对比,就能找出差异项来。

  • 申请全新的机器,部署目标系统openEuler 22.03 LTS SP4,然后对前面计算出来的差异,逐一进行配置:包括操作系统级别、系统软件级别、业务软件级别的各种差异。

  • 最终上线时,先把原centos机器的ip(ip1)改成其他的(临时ip),然后把openEuler的ip改成ip1,看看业务是否正常;如果有问题,就把openeuler机器关了,然后把centos机器的ip改回来,应该就能恢复正常。(可能需要考虑部分机器上有arp缓存)

升级步骤–差异计算

=========================

我们大概整理了这样的文件(初版,不全),看看需要对哪些差异进行对比。其实,这也是最核心的部分,如果有遗漏,就可能会导致出问题。

当然,我们最终还会提交测试组进行业务测试,只要业务测试能通过,说明大的问题就没有。

image-20250420113833871

最终整理的,比较全面的一个版本如下,通过对应的命令查看两边系统是否有差异,以下也部分涉及如何修改:

os层面

/etc/sysctl.conf

查看是否修改了内核参数。

sysctl -a

Copysysctl -a 这个的差异会比较多,需要仔细看一下。部分差异是正常的,比如本地虚拟机的内存、磁盘空间大小、网卡名称、cpu个数不一致,都会导致一些内核参数的默认值不一样

lang/locale

Copyecho $LANG
vim /etc/locale.conf如果有变更,则需要修改,如改成中文:
可先查看支持的中文locale:
[root@localhost ~]# locale -a|grep zh_CN
zh_CN.utf8vim /etc/locale.conf
LANG="zh_CN.utf8"刷新:
source /etc/locale.conf
[root@localhost ~]# echo $LANG
zh_CN.utf8

环境变量

Copy/etc/profile
/etc/bashrc
~/.bashrc

selinux

Copy[root@localhost ~]# getenforce
Enforcing (打开状态)vim /etc/selinux/config 
修改:
SELINUX=disabled重启服务器后,再次执行:
[root@localhost ~]# getenforce
Disabled

firewalld

Copysystemctl status firewalld
systemctl stop firewalld
systemctl status firewalldsystemctl disable firewalld

ip、dns

  • 设置ipv4

  • 设置ipv6

  • 设置dns服务器:

    Copyvim /etc/resolv.conf
  • 设置本地hosts

    Copyvim /etc/hosts

cron

Copyvi /etc/crontab

user

Copyvi /etc/passwd
vi /etc/group

内核模块

查看内核模块并按字母序排序,方便对比

Copylsmod | tail -n +2 | sort -k1

repo

Copycd  /etc/yum.repos.d/
ll

swap

Copyswapon --show
cat /proc/sys/vm/swappiness

软件


接下来,我们需要查看原系统通过yum、rpm等方式安装了哪些软件。

yum

Copyyum --setopt=history_list_view=commands history list all

image-20250420115609744

rpm -qa --last

Copyrpm -qa --last

image-20250420115642801

systemctl service

Copysystemctl list-unit-files --type=service 

我们在这里发现,运维组后期安装的很多agent(监控类的),所以这些也需要在新机器重新安装

ntp

Copy设置时间校准服务

nfs挂载

Copy/etc/fstab 文件是 Linux 系统中用于定义和管理文件系统的挂载信息的配置文件

动态库路径

应用软件,如果涉及到c++相关的代码,就可能有这部分。我们正好涉及了,有两个动态库(so文件),是需要放到/usr/lib64下的,不然就会加载失败报错。

像linux下,动态库的默认路径有这么几个,所以大家要有这块的意识,别漏了:

image-20230812151254735

linux下,有默认值,如上面这几个路径;另外,如果有设置LD_LIBRARY_PATH环境变量,那么java.library.path的值就等于默认的几个路径(/usr/lib64、/lib64、/lib、/usr/lib) + LD_LIBRARY_PATH的值。

基础软件及业务软件


如jdk、以及一些通过源码编译安装的程序(如nginx、redis这类)

文件、文件夹对比

各种业务软件,可能还涉及到在某些目录下写入了一些文件,可能也需要迁移,这个就大家自己看着弄了。

我们这边是会把软件全部在openeuler上再重新部署一遍,包括jdk、servlet容器等等。

差异对比

最终就是上面的各项配置导到不同文件,然后beyond compare对比下。

image-20250420121326264

差异执行

====================

这个没啥说的了,下载openeuler的iso,安装,然后分析上述对比出来的哪些差异,需要应用到新的系统中,然后执行就行了,最终执行完,可以重启下服务器,避免有的改了忘了使其生效。

image-20250420121512467

总结

==================

可以发现,步骤还是比较繁琐的,而且,这样也不能保证万无一失,所以还是要进行充分的测试为宜。选这种方式,也要先做好方案,然后拉会评审,大家认可这样的方案才行,毕竟这个方案,需要运维、测试的全力配合,工作量也不小。

为什么还是选了这个方案,主要还是这次要升级的是其中接入层的两台机器(系统比较重要,上面部署了openresty等接入层服务,这种c程序,反正也要编译安装,没法自动迁移),所以要求稳,对黑盒迁移工具还不够了解,促使我们做了这个选择。

老的centos 7.3,运行了很多年了,这次从零开始部署,也能方便大家把相关组件摸清楚,在保证出现问题能及时回退的情况下,我们认为这样做也值得。后续面对不那么重要的系统,可能也是会用工具来升级。

🔥运维干货分享

  • 软考高级系统架构设计师备考学习资料
  • 软考高级网络规划设计师备考学习资料
  • Kubernetes CKA认证学习资料分享
  • AI大模型学习资料合集
  • 信息安全管理体系(ISMS)制度模板分享
  • 免费文档翻译工具(支持word、pdf、ppt、excel)
  • PuTTY中文版安装包
  • MobaXterm中文版安装包
  • pinginfoview网络诊断工具中文版
  • Xshell、Xsftp、Xmanager中文版安装包
  • Typora简单易用的Markdown编辑器
  • Window进程监控工具,能自动重启进程和卡死检测
  • 免费Oracle 数据库学习资源 零基础到进阶
  • Spring 源码学习资料
  • 毕业设计高质量毕业答辩 PPT 模板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/79839.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/79839.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/79839.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是 IDE?集成开发环境的功能与优势

原文:什么是 IDE?集成开发环境的功能与优势 | w3cschool笔记 (注意:此为科普文章,请勿标记为付费文章!且此文章并非我原创,不要标记为付费!) IDE 是什么? …

jenkins批量复制Job项目的shell脚本实现

背景 现在需要将“测试” 目录中的所有job全部复制到 一个新目录中 test2。可以结合jenkins提供的apilinux shell 进行实现。 测试目录的实际文件夹名称是 test。 脚本运行效果如下: [qdevsom5f-dev-hhyl shekk]$ ./copy_jenkins_job.sh 创建文件夹 test2 获取源…

VisualSVN过期后的解决方法

作为一款不错的源代码管理软件,svn还是有很多公司使用的。在vs中使用svn,大家一般用的都是VisualSVN插件。在30天试用期过后,它就不能被免费使用了。下面给大家讲如何免费延长过期时间(自定义天数,可以设定一个很大的值…

硬件工程师笔记——电子器件汇总大全

目录 1、电阻 工作原理 欧姆定律 电阻的物理本质 一、限制电流 二、分压作用 三、消耗电能(将电能转化为热能) 2、压敏电阻 伏安特性 1. 过压保护 2. 电压调节 3. 浪涌吸收 4. 消噪与消火花 5. 高频应用 3、电容 工作原理 (…

[图论]Kruskal

Kruskal 本质:贪心,对边进行操作。存储结构:边集数组。适用对象:可为负权图,可求最大生成树。核心思想:最短的边一定在最小生成树(MST)上,对最短的边进行贪心。算法流程:对全体边集…

vulnhub five86系列靶机合集

five86 ~ VulnHubhttps://www.vulnhub.com/series/five86,272/ five86-1渗透过程 信息收集 # 主机发现 nmap 192.168.56.0/24 -Pn ​ # 靶机全面扫描 nmap 192.168.56.131 -A -T4 目录扫描 dirsearch -u http://192.168.56.131/ /robots.txt提示/ona。 /ona二层目录扫描。 …

如何高效利用呼叫中心系统和AI语音机器人

要更好地使用呼叫中心系统和语音机器人,需要结合两者的优势,实现自动化、智能化、高效率的客户服务与业务运营。以下是优化策略和具体实践方法: 一、呼叫中心系统优化 1. 智能路由与IVR优化 智能ACD(自动呼叫分配) …

Nacos安装及数据持久化

1.Nacos安装及数据持久化 1.1下载nacos 下载地址:https://nacos.io/download/nacos-server/ 不用安装,直接解压缩即可。 1.2配置文件增加jdk环境和修改单机启动standalone 找到bin目录下的startup.cmd文件,添加以下语句(jdk路径根据自己…

【牛客练习赛137 C】题解

比赛链接 C. 变化的数组(Easy Version) 题目大意 一个长度为 n n n 的非负数组 a a a,要求执行 k k k 次操作,每次操作如下: 有 1 2 \frac{1}{2} 21​ 的概率令 a i ← a i ( a i ⊗ m ) x , ∀ i ∈ [ 1 , n ] a_i \leftarrow a_…

Redis适用场景

Redis适用场景 一、加速缓存二、会话管理三、排行榜和计数器四、消息队列五、实时分析六、分布式锁七、地理位置数据八、限流九、数据共享十、签到 一、加速缓存 Redis最常见的应用之一是作为缓存层,用于存储频繁访问的数据,从而减轻数据库的负载。 通过…

【LangChain4j快速入门】5分钟用Java接入AI大模型,Spring Boot整合实战!| 附源码

【LangChain4j快速入门】5分钟用Java接入AI大模型,Spring Boot整合实战! 前言:当Java遇上大模型 在AI浪潮席卷全球的今天,Java开发者如何快速拥抱大语言模型?LangChain4j作为专为Java打造的AI开发框架,以…

2025第十七届“华中杯”大学生数学建模挑战赛题目B 题 校园共享单车的调度与维护问题完整成品正文33页(不含附录)文章思路 模型 代码 结果分享

校园共享单车运营优化与调度模型研究 摘 要 本研究聚焦校园共享单车点位布局、供需平衡、运营效率及故障车辆回收四大核心问题,通过构建一系列数学模型,系统分析与优化共享单车的运维体系。 针对问题一,我们建立了基于多时段观测的库存估算…

Unity游戏多语言工具包

由于一开始的代码没有考虑多语言场景,导致代码中提示框和UI显示直接用了中文,最近开始提取代码的中文,提取起来太麻烦,所以拓展了之前的多语言包,降低了操作复杂度。最后把工具代码提取出来到单独项目里面,…

.NET MCP 文档

MCP 概述 MCP(Model Context Protocol)是由 Anthropic 推出的一种开放协议,类似 AI 的 USB-C 扩展坞,用于在大模型和数据源之间建立安全的通信(授权),让 AI 应用能够安全地访问和操作本地或远程…

【Linux】vim配置----超详细

目录 一、插件管理器准备 二、目录准备 三、安装插件 一、插件管理器准备 Vim-plug 是一个Vim插件管理器,利用异步并行可以快速地安装、更新和卸载插件。它的安装和配置都非常简单,而且在操作过程中会给出很多易读的反馈信息,是一个自由、…

PHP实现图片自动添加水印效果

<?php // 设置原始图片路径和水印图片路径 $original_image original.jpg; $watermark_image watermark.png;// 创建图片资源 $original imagecreatefromjpeg($original_image); $watermark imagecreatefrompng($watermark_image);// 获取图片尺寸 $original_width im…

检查新接手LINUX服务器应用的部署情况和正在运行的服务

当接手一台新的 Linux 服务器时&#xff0c;第一要务就是摸清系统上已经安装部署了哪些应用和服务。 本文将以 CentOS7为例&#xff0c;详细介绍如何系统地排查已安装的应用和服务&#xff0c;包括它们的安装方式和安装位置。 1.查看系统基本信息 首先获取系统整体信息&…

使用注解方式整合ssm时,启动tomcat扫描不到resource下面的xxxmapper.xml问题,解决方法

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.mapper.方法 在Spring与Mybatis整合时&#xff0c;可能会遇到这样的报错 原因&#xff1a; 其原因为mapper路径的映射错误&#xff0c;表示在尝试执行某个 Mapper 接口的方法时…

C++11特性补充

目录 lambda表达式 定义 捕捉的方式 可变模板参数 递归函数方式展开参数包 数组展开参数包 移动构造和移动赋值 包装器 绑定bind 智能指针 RAII auto_ptr unique_ptr shared_ptr 循环引用 weak_ptr 补充 总结 特殊类的设计 不能被拷贝的类 只能在堆上创建…

My SQL 索引

核心目标&#xff1a; 理解 mysql 索引的工作原理、类型、优缺点&#xff0c;并掌握创建、管理和优化索引的方法&#xff0c;以显著提升数据库查询性能。 什么是索引&#xff1f; 索引是一种特殊的数据库结构&#xff0c;它包含表中一列或多列的值以及指向这些值所在物理行的指…