一种基于operator的分布式存储升级方法与流程

阅读: 评论:0



1.本发明涉及分布式存储升级技术领域,尤其涉及一种基于operator的分布式存储升级方法。


背景技术:



2.当前分布式存储领域,都采用传统的部署方式,即直接将存储集部署到物理机上。因此,对于存储集的升级,往往需要开发一个控制程序,对集中涉及到的各种组件进行升级控制,比如控制组件间的升级顺序、触发组件版本更新等。与此同时,还需要考虑升级失败的场景,并提供重试机制,保障升级成功。由于采用的是物理机部署形态,所有组件是直接暴露在宿主机上并共享资源,相互之间也没有隔离,因此在升级的时候会存在以下问题:
3.1.共享库依赖问题
4.对于物理机部署形态,一个物理节点上的各种lib库为共享资源,即多个组件依赖相同的lib库,因此,升级组件和lib库时,会存在一些问题(假设组件a、组件b都依赖某个lib库):
5.a)如果采用串行升级的方式,即先更新lib库,然后再更新组件a、组件b,那么,当更新lib库后,此时lib库为新版本,组件a、组件b均为老版本,对于组件a、组件b都会存在程序跑飞的风险;如果先更新组件a、组件b,则可能出现老版本的lib库无法兼容新版本组件,最终也会导致组件程序崩溃;
6.b)考虑到a)的问题,在其基础上进一步做优化,即:更新lib库之前,将老版本lib库备份,lib库更新完成后,组件a、组件b依旧使用老版本lib库;接着更新组件a、组件b,更新完组件后将其lib库切换到新版本lib库即可,最后删除旧版本lib库,最终完成lib库版本整体切换以及组件版本更新操作;该方法能解决正常流程共享库依赖的问题,但在节点异常的情况下(比如节点掉电),lib库可能处于新老版本损坏的中间态,因此依然存在程序跑飞、崩溃的风险,只是概率相对较低;
7.c)鉴于a)、b)的问题,可以考虑采用并行升级的方式,即并行触发lib库、组件a、组件b的更新流程,这样就不存在新老版本兼容的问题;但从代码执行的角度来看,即使并行触发也无法保证lib库与组件是100%的同步更新,集规模越大不同步现象越明显;与此同时,如果组件a、组件b之间有依赖要求,则不能采用并行升级方式;
8.总之,对于组件、lib库而言,无论采用串行升级还是采用并行升级,都会存在程序跑飞、崩溃的风险。
9.2.升级效率低
10.对于一个存储系统而言,往往包括许多组件,这样才能支撑其复杂的存储功能,这些组件大致可分为三类:基础设施组件、管理面组件、业务面组件;这些组件之间采用串行升级,组件内采用串行或并行升级;一个组件在节点上的更新过程,可以简单看作:
11.a)切走组件业务,并停止组件服务;
12.b)解压新版本组件包,并覆盖旧版本组件包;
13.c)启动组件服务,并切回组件业务;
14.对于步骤b),如果组件包涉及的文件越多,包越大,解压、更新过程耗时也越长;与此同时,简单粗暴的采用串行升级则会进一步增加升级时长。
15.总之,在大规模集场景下,节点越多,升级效率越低。
16.3.升级失败率高
17.存储系统是一个十分复杂的系统,决定了其升级流程也不会太简单,升级控制逻辑需要应对各种可能出现的情况,但即便如此,也会因为组件配合、偶发故障等因素导致升级失败。又由于物理机部署的特点,存储组件是直接暴露在宿主机之上的,因此,宿主机的状态将直接影响升级流程的成败,比如宿主机上关键文件缺失、系统命令异常等均可能导致升级失败;同时,升级路径越长,出错的概率也越高。
18.因此,如何提供一种高效、可靠以及无共享库依赖问题的分布式存储升级方法,成为亟待解决的技术问题。


技术实现要素:



19.有鉴于此,本发明旨在解决分布式存储集的升级效率、升级可靠性以及共享库依赖的问题。
20.本发明提供一种基于operator的分布式存储升级方法,包括:
21.升级存储业务组件,包括:对不同节点的不同组件进行升级以及对不同节点上的相同组件进行升级,其中,当对不同节点上的相同组件进行升级时,如果所述组件不影响业务,对所述组件进行并行升级;如果所述组件影响业务,通过批次升级策略对所述组件进行升级;
22.通过升级配置文件和升级rpm包升级机器配置。
23.进一步地,本发明基于operator的分布式存储升级方法中,当对不同节点的不同组件进行升级时,如果所述组件之间相互不存在依赖关系,对所述组件进行并行升级;如果所述组件之间存在依赖关系,根据依赖顺序对所述组件进行串行升级,包括:先对所有节点上被依赖的组件进行升级。
24.进一步地,本发明基于operator的分布式存储升级方法中,通过批次升级策略对所述组件进行升级,包括:获取存储集中保护域、集控制节点、硬盘池服务节点以及kubernetes master节点的批次信息,根据获取的批次信息生成批次升级策略,并根据生成的批次升级策略确定升级批次,按升级批次对各批次内节点上的组件进行升级。
25.进一步地,本发明基于operator的分布式存储升级方法中,按升级批次对各批次内节点上的组件进行升级,包括:当一个批次内某个节点上的组件正在升级时,批次内的互斥节点上的组件不允许升级,将其余节点上的组件与该节点上的组件进行并行升级。
26.进一步地,本发明基于operator的分布式存储升级方法中,通过批次升级策略对所述组件进行升级,包括:不绑定用于升级组件的工作协程与升级批次,通过每个工作协程动态获取待升级的节点信息,对所述节点上的组件进行升级。
27.进一步地,本发明基于operator的分布式存储升级方法中,通过批次升级策略对所述组件进行升级,包括:根据服务器性能设置goroutine的数量,通过相应数量的
goroutine对集中的存储组件进行升级。
28.进一步地,本发明基于operator的分布式存储升级方法中,通过批次升级策略对所述组件进行升级,包括:当归属某个保护域的全部节点上的组件都升级完成后,升级控制流程回调通知所述保护域启动新版本组件的处理逻辑。
29.进一步地,本发明基于operator的分布式存储升级方法中,通过升级配置文件和升级rpm包升级机器配置,包括:
30.升级配置文件,根据存储集中保护域、集控制节点、硬盘池服务节点以及kubernetes master节点的批次信息生成mcp,将生成的多个mcp划分后与集中对应的节点绑定;
31.采用mcp对rpm包进行升级编排控制,并采用ansible对rpm包进行本地升级。
32.进一步地,本发明基于operator的分布式存储升级方法中,采用ansible对rpm包进行本地升级,包括:编写ansible playbook,安装并启动systemd服务,通过拉取rpm镜像并提取rpm包对rpm包进行升级。
33.进一步地,本发明基于operator的分布式存储升级方法中,存储业务组件以pod形式存在。
34.本发明基于operator的分布式存储升级方法,具有以下有益效果:
35.1)根据存储集中的保护域、硬盘池服务节点、集控制节点、kubernetes master节点的批次信息,将组件串行升级策略细化成按批次升级策略,提升了升级效率。
36.2)引入goroutine池,通过动态选择节点机制,根据批次信息动态均衡节点上组件的升级任务,解决了各批次内节点不均衡的问题,进一步提升了升级效率。
37.3)通过保护域回调机制,当归属某个保护域的全部节点上的组件都升级完成后,升级控制流程回调通知所述保护域启动新版本组件的处理逻辑,提高了组件新老版本业务切换的速度。
38.4)通过ansible+mcp升级策略,根据存储集中的保护域、硬盘池服务节点、集控制节点、kubernetes master节点的批次信息,生成mcp,并采用ansible对rpm包进行本地升级,在简化rpm包升级控制逻辑的同时,提升了rpm包的升级效率。
39.5)通过pod化将存储业务组件及其依赖库作为一个整体运行,解决了共享库依赖问题。pod化后,组件运行在隔离的环境中,受宿主机状态影响的程度降到了最低,同时pod化也消除了线上线下的环境差异,保证了组件生命周期的环境一致性,从而极大降低了升级失败的概率。
附图说明
40.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
41.图1为存储业务组件部署形式的示意图。
42.图2为存储集的批次信息的示意图。
43.图3为组件升级策略的示意图。
44.图4为rpm包升级策略的示意图。
具体实施方式
45.下面结合附图对本发明实施例进行详细描述。
46.需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
47.需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
48.以下各实施例涉及的名词解释如下:
49.分布式存储系统:是一种将数据分散存储在多台独立设备上的数据存储系统。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
50.升级:将组件的版本更新为新版本;当分布式存储系统有新特性或者bug时,需要对集相关组件进行更新,才能使用新特性或者修复相关bug。
51.容器化:一种虚拟化技术,将软件代码及相关组件打包在一起,制作成镜像,通过启动容器的方式运行该镜像,则软件逻辑不受物理环境操作系统的影响,从而实现隔离。
52.operator:一种打包、运行和维护kubernetes应用程序的方式;operator同样也是一种kubernetes应用程序,它不仅部署在kubernetes上,还要与kubernetes的设施和工具协同工作,以实现软件自动化的整个生命周期。
53.pod:是kubernetes系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在kubernetes上运行容器化应用的资源对象。
54.goroutine:是go语言中的轻量级线程实现,由go运行时(runtime)管理,go程序会智能地将goroutine中的任务合理地分配给每个cpu。
55.mcp:machine config pool机器配置池,是一种节点和具体机器配置之间的映射关系。
56.rpm包:是一种由red-hat package manager(红帽软件包管理器)管理的软件包。
57.ansible:是一种基于python开发的自动化运维工具,它实现了批量系统配置、批量程序部署、批量运行命令等功能。
58.systemd服务:system daemon,是linux下的一种init软件,其目标是提供更优秀的框架以表示系统服务间的依赖关系,并依次实现系统初始化时服务的并行启动,同时达到降低计算机壳层的系统开销的效果。systemd是内核启动后拉起的第一个进程,是用户空间的1号进程,负责启用和管理系统的各种服务。
59.本发明示例性第一实施例提供一种基于operator的分布式存储升级方法,本实施
例的方法,包括:
60.升级存储业务组件,包括:对不同节点的不同组件进行升级以及对不同节点上的相同组件进行升级,其中,当对不同节点上的相同组件进行升级时,如果所述组件不影响业务,对所述组件进行并行升级;如果所述组件影响业务,通过批次升级策略对所述组件进行升级;
61.通过升级配置文件和升级rpm包升级机器配置。
62.本实施例方法中,存储业务组件以pod形式存在。在实际应用中,存储业务组件pod化,包括:对存储业务相关的基础设施组件、管理面组件、业务面组件进行pod化,并使用operator对所述组件的pod进行管理。通过pod化将存储业务组件及其依赖库作为一个整体运行,解决了共享库依赖问题。pod化后,组件运行在隔离的环境中,受宿主机状态影响的程度降到了最低,同时pod化也消除了线上线下的环境差异,保证了组件生命周期的环境一致性,从而极大降低了升级失败的概率。
63.本发明示例性第二实施例提供一种基于operator的分布式存储升级方法,本实施例是本发明示例性第一实施例方法的优选实施例,本实施例方法中,当对不同节点的不同组件进行升级时,如果所述组件之间相互不存在依赖关系,对所述组件进行并行升级;如果所述组件之间存在依赖关系,根据依赖顺序对所述组件进行串行升级,包括:先对所有节点上被依赖的组件进行升级。
64.在实际应用中,分布式存储系统包括多种业务组件,一个存储集又涉及多个服务器节点,其部署形式如图1所示。例如,图中1的组件a和组件b相互没有依赖,就可以同时升级组件a和组件b;如果组件之间有依赖,则根据依赖顺序进行串行升级,例如,如果图1中组件b、组件c之间存在依赖关系,并且它们的依赖关系为组件c依赖组件b,那么就需要先升级组件b,待所有节点上的组件b都升级完成后,再升级组件c。
65.本发明示例性第三实施例提供一种基于operator的分布式存储升级方法,本实施例是本发明示例性第一实施例方法的优选实施例,本实施例方法中,通过批次升级策略对所述组件进行升级,包括:获取存储集中保护域、集控制节点、硬盘池服务节点以及kubernetes master节点的批次信息,根据获取的批次信息生成批次升级策略,并根据生成的批次升级策略确定升级批次,按升级批次对各批次内节点上的组件进行升级。
66.如图2所示,图中集一共包括9个节点,node0-node8,其中:
67.硬盘池1创建在node0-node5上,一共跨越6个节点;
68.硬盘池2创建在node3-node8上,一共跨越6个节点;
69.硬盘池3创建在node0-node8上,一共跨越9个节点;
70.对于硬盘池1,存在2个保护域,[node0、node1、node2]、[node3、node4、node5],即2个升级批次;
[0071]
对于硬盘池2,存在2个保护域,[node3、node5、node7]、[node4、node6、node8],即2个升级批次;
[0072]
对于硬盘池3,存在3个保护域,[node0、node3、node6]、[node1、node4、node7]、[node2、node5、node8],即3个升级批次;
[0073]
对于硬盘池1,服务节点为[node0、node4、node5],即1个升级批次;
[0074]
对于硬盘池2,服务节点为[node3、node5、node8],即1个升级批次;
[0075]
对于硬盘池3,服务节点为[node0、node3、node7],即1个升级批次;
[0076]
集控制节点为[node3、node4、node5],即1个升级批次;
[0077]
kubernetes master节点为[node0、node1、node2],即1个升级批次。
[0078]
在实际应用时,本实施例方法中,为了缩短升级时长,提高升级效率,按升级批次对各批次内节点上的组件进行升级,包括:当一个批次内某个节点上的组件正在升级时,批次内的互斥节点上的组件不允许升级,将其余节点上的组件与该节点上的组件进行并行升级。比如node4在升级,通过查询批次信息可知,node0、node1、node3、node5、node6、node7、node8不能升级,而node2可以与node4并行升级;根据存储集中的保护域、硬盘池服务节点、集控制节点、kubernetes master节点的批次信息,将组件串行升级策略细化成按批次升级策略,提升了升级效率。如果集规模越大,能够并行升级的节点则越多,效率提升幅度也越大。
[0079]
本发明示例性第四实施例提供一种基于operator的分布式存储升级方法,本实施例是本发明示例性第一实施例方法的优选实施例,本实施例方法中,通过批次升级策略对所述组件进行升级,包括:不绑定用于升级组件的工作协程与升级批次,通过每个工作协程动态获取待升级的节点信息,对所述节点上的组件进行升级。
[0080]
按批次升级的策略可以缩短升级时长,但各批次间的节点可能会存在不均衡的现象,举个极端例子,比如批次1中包含10个节点,而批次2中只包含1个节点,批次1明显比批次2繁忙;为了进一步提升升级效率,本实施例方法通过动态选择节点的机制,将用于升级组件的工作协程与批次进行不绑定的设置,每个工作协程动态获取待升级的节点信息,然后进行升级,从而通过工作协程平均了负载。
[0081]
本发明示例性第五实施例提供一种基于operator的分布式存储升级方法,本实施例是本发明示例性第一实施例方法的优选实施例,本实施例方法中,通过批次升级策略对所述组件进行升级,包括:根据服务器性能设置goroutine的数量,通过相应数量的goroutine对集中的存储组件进行升级。
[0082]
在实际应用中,需要同时考虑到服务器cpu的性能问题,从而需要对工作协程的并发度进行控制,防止kubernetes api server压力过大。本实施例方法通过启动多个goroutine对集中的存储组件进行升级,其中goroutine的数量可配置,这样便于操作人员根据服务器的实际情况设置合理的并发数。
[0083]
本发明示例性第六实施例提供一种基于operator的分布式存储升级方法,本实施例是本发明示例性第一实施例方法的优选实施例,本实施例方法中,通过批次升级策略对所述组件进行升级,包括:当归属某个保护域的全部节点上的组件都升级完成后,升级控制流程回调通知所述保护域启动新版本组件的处理逻辑。
[0084]
从客户端新老版本业务切换速度的角度来看,当归属某个保护域的全部节点都升级完成后,升级控制流程回调通知该保护域可以启动新逻辑业务,不需要等待所有节点的所有组件都升级完成才启动新逻辑业务,从而达到提高新老版本业务切换速度的目的。如图3所示,在满足批次约束的前提下,goroutines尽可能并发升级集节点上的组件;由于node1、node3、node4同属一个保护域,因此在node3升级完成后,将通知该保护域所在的硬盘池,表明其可以承接新逻辑业务。通过保护域回调机制,提高了组件新老版本业务切换的速度。
[0085]
本发明示例性第七实施例提供一种基于operator的分布式存储升级方法,本实施例是本发明示例性第一实施例方法的优选实施例,本实施例方法中,通过升级配置文件和升级rpm包升级机器配置,包括:
[0086]
升级配置文件,根据存储集中保护域、集控制节点、硬盘池服务节点以及kubernetes master节点的批次信息生成mcp,将生成的多个mcp划分后与集中对应的节点绑定;
[0087]
采用mcp对rpm包进行升级编排控制,并采用ansible对rpm包进行本地升级。
[0088]
在实际应用中,本实施例方法中采用ansible对rpm包进行本地升级,包括:编写ansible playbook,安装并启动systemd服务,通过拉取rpm镜像并提取rpm包对rpm包进行升级。
[0089]
mcp原生支持升级配置文件,但不支持升级rpm包;对于rpm包升级,如图4所示,本实施例方法采用ansible+mcp方案,利用mcp对rpm包进行升级编排控制,采用ansible进行本地rpm包升级,即通过编写ansible playbook,以安装systemd服务的方式启动rpm包升级脚本。
[0090]
如图4所示,根据批次信息(保护域、集控制节点、硬盘池服务节点、kubernetes master节点)划分了多个mcps,并与集中对应的节点绑定,mcp间并行升级,mcp内部节点串行升级;利用ansible升级节点本地rpms。通过ansible+mcp升级策略,并采用ansible对rpm包进行本地升级,在简化rpm包升级控制逻辑的同时,提升了rpm包的升级效率。
[0091]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

技术特征:


1.一种基于operator的分布式存储升级方法,其特征在于,所述方法,包括:升级存储业务组件,包括:对不同节点的不同组件进行升级以及对不同节点上的相同组件进行升级,其中,当对不同节点上的相同组件进行升级时,如果所述组件不影响业务,对所述组件进行并行升级;如果所述组件影响业务,通过批次升级策略对所述组件进行升级;通过升级配置文件和升级rpm包升级机器配置。2.根据权利要求1所述的基于operator的分布式存储升级方法,其特征在于,当对不同节点的不同组件进行升级时,如果所述组件之间相互不存在依赖关系,对所述组件进行并行升级;如果所述组件之间存在依赖关系,根据依赖顺序对所述组件进行串行升级,包括:先对所有节点上被依赖的组件进行升级。3.根据权利要求1所述的基于operator的分布式存储升级方法,其特征在于,通过批次升级策略对所述组件进行升级,包括:获取存储集中保护域、集控制节点、硬盘池服务节点以及kubernetes master节点的批次信息,根据获取的批次信息生成批次升级策略,并根据生成的批次升级策略确定升级批次,按升级批次对各批次内节点上的组件进行升级。4.根据权利要求3所述的基于operator的分布式存储升级方法,其特征在于,按升级批次对各批次内节点上的组件进行升级,包括:当一个批次内某个节点上的组件正在升级时,批次内的互斥节点上的组件不允许升级,将其余节点上的组件与该节点上的组件进行并行升级。5.根据权利要求1所述的基于operator的分布式存储升级方法,其特征在于,通过批次升级策略对所述组件进行升级,包括:不绑定用于升级组件的工作协程与升级批次,通过每个工作协程动态获取待升级的节点信息,对所述节点上的组件进行升级。6.根据权利要求1所述的基于operator的分布式存储升级方法,其特征在于,通过批次升级策略对所述组件进行升级,包括:根据服务器性能设置goroutine的数量,通过相应数量的goroutine对集中的存储组件进行升级。7.根据权利要求1所述的基于operator的分布式存储升级方法,其特征在于,通过批次升级策略对所述组件进行升级,包括:当归属某个保护域的全部节点上的组件都升级完成后,升级控制流程回调通知所述保护域启动新版本组件的处理逻辑。8.根据权利要求1所述的基于operator的分布式存储升级方法,其特征在于,通过升级配置文件和升级rpm包升级机器配置,包括:升级配置文件,根据存储集中保护域、集控制节点、硬盘池服务节点以及kubernetes master节点的批次信息生成mcp,将生成的多个mcp划分后与集中对应的节点绑定;采用mcp对rpm包进行升级编排控制,并采用ansible对rpm包进行本地升级。9.根据权利要求8所述的基于operator的分布式存储升级方法,其特征在于,采用ansible对rpm包进行本地升级,包括:编写ansible playbook,安装并启动systemd服务,通过拉取rpm镜像并提取rpm包对rpm包进行升级。10.根据权利要求1所述的基于operator的分布式存储升级方法,其特征在于,所述方法中,存储业务组件以pod形式存在。

技术总结


本发明涉及分布式存储升级技术领域,提供一种基于operator的分布式存储升级方法,包括:升级存储业务组件,包括:对不同节点的不同组件进行升级以及对不同节点上的相同组件进行升级,其中,当对不同节点上的相同组件进行升级时,如果所述组件不影响业务,对所述组件进行并行升级;如果所述组件影响业务,通过批次升级策略对所述组件进行升级;通过升级配置文件和升级rpm包升级机器配置。根据本发明示例性实施例的基于operator的分布式存储升级方法,可以提升升级效率,提高组件新老版本业务切换的速度,提升rpm包的升级效率,保证组件生命周期的环境一致性,降低升级失败的概率。降低升级失败的概率。降低升级失败的概率。


技术研发人员:

张得旭

受保护的技术使用者:

中电云数智科技有限公司

技术研发日:

2022.10.13

技术公布日:

2022/12/30

本文发布于:2023-01-03 03:02:39,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/51104.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:组件   节点   所述   分布式
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图