CN116185589A - 调度权限获取方法、设备、系统及存储介质 - Google Patents
调度权限获取方法、设备、系统及存储介质 Download PDFInfo
- Publication number
- CN116185589A CN116185589A CN202310147892.7A CN202310147892A CN116185589A CN 116185589 A CN116185589 A CN 116185589A CN 202310147892 A CN202310147892 A CN 202310147892A CN 116185589 A CN116185589 A CN 116185589A
- Authority
- CN
- China
- Prior art keywords
- node
- lease
- storage service
- management
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Hardware Redundancy (AREA)
Abstract
本申请实施例提供一种调度权限获取方法、设备、系统及存储介质。在本申请实施例中,多个管控节点可通过访问存储服务节点,争抢更新存储服务节点存储的租约信息的权限成为主节点,以主节点身份拥有对存储集群的数据的调度权限,实现了多个管控节点的选主。这种抢主方式相较于分布式锁方式无需等待分布式锁失效,有助于提高主备节点切换效率。
Description
技术领域
本申请涉及数据存储技术领域,尤其涉及一种调度权限获取方法、设备、系统及存储介质。
背景技术
为了解决海量数据的管理问题,引入了数据按分区(Partition)管理的方案,该方案使用管控节点管理分区的数据,并负责将分区调度到多个存储节点。为了提高系统稳健性,数据存储管理系统一般部署有多个管控节点。为了防止数据存储系统脑裂,多个管控节点需要选择出主节点,由主节点负责分区调度,从而保持存储节点之间的数据一致性。因此,如何进行多个管控节点之间的选主,成为本领域亟待解决的技术问题。
发明内容
本申请的多个方面提供一种调度权限获取方法、设备、系统及存储介质,用以解决多个管控节点选主问题。
本申请实施例提供一种调度权限获取方法,适用于管控节点,包括:
通过访问存储服务节点,与其它管控节点争抢对所述存储服务节点存储的租约信息的更新权限;所述存储服务节点具有保障存储集群的数据一致性的功能;
若争抢到对所述存储服务节点存储的租约信息的更新权限,将所述管控节点的节点状态设置为主节点状态,以使所述管控节点获取对所述存储集群的调度权限。
本申请实施例还提供一种调度权限获取方法,适用于存储服务节点,所述存储服务节点具有保障存储集群的数据一致性的功能,并存储有多个管控节点中主节点的租约信息;
所述方法包括:
获取所述管控节点发出的租约更新请求;所述租约更新请求为所述管控节点争抢对所述存储服务节点存储的租约信息的更新权限而发出;
从所述租约更新请求中,获取所述租约更新请求携带的目标租约信息;
在所述目标租约信息和所述存储服务节点当前存储的租约信息一致的情况下,更新所述存储服务节点存储的租约信息,以使所述管控节点获取对所述存储服务节点存储的租约信息的更新权限;
将租约更新成功消息返回给所述管控节点,以供所述管控节点响应所述租约更新成功消息将节点状态设置为主节点状态以获取所述存储集群的调度权限。
本申请实施例还提供一种数据存储系统,包括:多个管控节点和存储集群的存储服务节点;
所述存储服务节点,具有保障所述存储集群的数据一致性的功能,并存储有所述多个管控节点中主节点的租约信息;所述主节点对所述存储集群具有调度权限;
所述管控节点,用于执行上述由管控节点执行的调度权限获取方法中的步骤;
所述存储服务节点,用于执行由存储服务节点执行的调度权限获取方法中的步骤。
本申请实施例还提供一种计算设备,包括:存储器、处理器和通信组件;所述存储器,用于存储计算机程序;
所述处理器耦合至所述存储器,用于执行所述计算机程序以用于执行上述管控节点执行的调度权限获取方法,和/或存储服务节点执行的调度权限获取方法中的步骤。
本申请实施例还提供一种存储有计算机指令的计算机可读存储介质,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行上述管控节点执行的调度权限获取方法,和/或存储服务节点执行的调度权限获取方法中的步骤。
在本申请实施例中,多个管控节点可通过争抢更新存储服务节点存储的租约信息的权限成为主节点,以主节点身份拥有对存储集群的数据的调度权限,实现了多个管控节点的选主。这种抢主方式相较于分布式锁方式无需等待分布式锁失效,有助于提高主备节点切换效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的存储管理系统的结构示意图;
图2为本申请实施例提供的多管控节点选主的过程示意图;
图3为本申请实施例提供的主节点进行选主的过程示意图;
图4为本申请实施例提供的备节点进行选主的过程示意图;
图5为本申请实施例提供的管控节点的节点状态切换过程示意图;
图6为本申请实施例提供的管控节点对存储集群进行数据调度的过程示意图;
图7-图9为本申请实施例提供的调度权限获取方法的流程示意图;
图10为本申请实施例提供的计算设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请一些实施例中,为了实现多管控节点选主,多个管控节点可通过访问存储服务节点,争抢更新存储服务节点存储的租约信息的权限成为主节点,以主节点身份拥有对存储集群的数据的调度权限,实现了多个管控节点的选主。这种抢主方式相较于分布式锁方式无需等待分布式锁失效,有助于提高主备节点切换效率。
以下结合附图,详细说明本申请各实施例提供的技术方案。
应注意到:相同的标号在下面的附图以及实施例中表示同一物体,因此,一旦某一物体在一个附图或实施例中被定义,则在随后的附图和实施例中不需要对其进行进一步讨论。
图1为本申请实施例提供的存储管理系统的结构示意图。如图1所示,存储管理系统S10是指对存储集群30进行存储管理的系统。该系统S10主要包括:多个管控节点10和存储服务节点20。在本申请各实施例中,“多个”是指不止一个,即2个或2个以上。
在本实施例中,存储服务节点20可提供数据存储相关的服务功能,如保障存储集群30的数据一致性的功能。存储服务节点20可基于分布式的一致性协议(如raft协议)来保障存储集群30的数据一致性。当然,存储服务节点20除了具有保障存储集群30的数据一致性功能之外,还可具有其它数据存储相关的服务功能,如存储事务处理等。
存储服务节点20可实现为具有提供保障存储集群30的数据一致性服务的设备、装置、虚拟机(Virtual Machine,VM)、容器或软件功能模块等。提供数据一致性服务的设备可以为单一服务器设备,也可以云化的服务器阵列。另外,提供数据一致性服务的设备也可以指具备相应服务能力的其他计算设备,例如电脑等终端设备(运行服务程序)等。在本实施例中,存储服务节点20可部署于云端,例如边缘云系统的中心云中。当然,存储服务节点20也可与存储集群30中的存储节点301部署于同一物理机。
上述存储集群30是指用于存储数据的集群,可包括:多个存储节点301。存储节点301可提供存储资源。关于存储节点301也可独立的存储设备,也可为物理机中的存储介质(如一个或多个磁盘等)。
在本实施例中,存储集群30可以集中式存储系统存储数据,或者采用分布式存储系统存储数据。分布式存储系统存储可为分布式键值对(Key-Value)存储系统等。存储集群30存储的数据可为应用数据,如文件数据、图像数据或数据表等。但是存储集群30存储的数据也可为应用数据的元数据。例如,在一些实施例中,存储集群30基于块存储服务或分区(Partition)存储服务对数据实现分布式存储。图1仅以存储集群30基于分区存储服务对数据进行分布式存储为例进行图示,但不构成限定。如图1所示的分区ij,其中,i=0,1…M;j=0,1…N。
块存储服务是指数据以数据块(Chunk)形式分布式存储于不同的磁盘(如磁盘D0-Dn)上。
分区是对数据库的数据表(Table)划分得到的。每张数据表开始只有一个分区,但是随着数据的插入,管控节点会根据一定的规则将表进行水平拆分,形成两个分区。当数据表中的行越来越多时,就会产生越来越多的分区,而这些分区可能无法存储到同一存储节点上,则可将其分布存储到多个存储节点上。一张数据表可根据行键(Row key)被水平拆分成若干个分区,每个分区都有一个开始行(Start row)和结束行(Stop row)表示该分区的数据范围。
在本申请实施例中,存储节点301存储的数据可为应用数据和/或元数据;相应地,数据表可为应用数据表和/或元数据表。元数据表中的每一行记录了一个应用数据分区的信息。行键可包括表名、起始行键和时间戳信息等。元数据表记录了应用数据分区的地址映射关系,即分区的存储节点的地址。
对于分布式存储服务,经常采用主备服务来提高服务稳定性。即利用多个管控节点(Master)10互为主备节点提供数据存储服务及分区元数据的管理服务。管控节点10的持久化数据可写在分布式文件系统中。管控节点10负责管理存储集群30。对于分区存储的分布式存储系统,管控节点10还可管理和分配分区,比如在分区分裂时分配新的分区,在某个存储节点退出时迁移退出的存储节点的分区到其它存储节点上。
多个管控节点10可通过抢主,拥有对存储集群30的调度权限。其中,抢主成功的管控节点即为主节点,主节点具有对存储集群30的调度权限。为了防止管控节点脑裂,在一些常规方案中,通过分布式协调服务软件(如Zookeeper)来让多个管控节点10进行抢主,并在分布式协调服务软件提供分布式锁服务,原理是异常进程在维护锁服务也出现异常后会将分布式锁放掉,其他进程持续不断的抢锁来发现异常,并开始接管服务,一旦锁被抢到则表明拥有了对外服务的权利,则可以开始对外服务。
对于分布式锁服务来说,主备节点切换需要等待锁超时才能进行切换,在分布式环境下这样的超时时间一般在数秒(如5秒等)以上,在大规模复杂环境下为了容忍短时间的异常还会将这样的超时时间变得更长,导致服务切换效率低。
在本申请一些实施例中,为了提高服务切换效率,在本申请一些实施例中,可在存储服务节点20上存储主节点的租约信息。租约信息可实现为租约键值对(Lease Key-Value,Lease KV),租约键(Lease Key)可为设定的标识信息等。更新租约信息主要是指对租约值(Lease Value)进行更新。在一些实施例中,租约值可实现为递增的序列,更新租约信息可实现为增加租约值。例如,每次更新可将租约值在当前值的基础上增加设定的增量,等等。设定的增量可为1。
在本实施例中,如图1所示,对于任一管控节点10,可通过访问存储服务节点20,与其它管控节点争抢对存储服务节点20存储的租约信息的更新权限。争抢到对存储服务节点20存储的租约信息的更新权限的管控节点,即为主节点。主节点具有对存储集群30的调度权限。相应地,若管控节点10争抢到对存储服务节点20存储的租约信息的更新权限,可将该管控节点10的节点状态设置为主节点状态,以使该管控节点获取对存储集群的调度权限。其中,对存储集群30的调度权限可包括:对存储集群30的存储节点的操作权限及对存储集群30的存储节点进行数据调度(即确定数据的存储位置的权限),例如,可向存储集群30写入数据,或者,更新存储集群30存储的数据,或者,删除存储集群30存储的数据等等。
对于主节点状态的管控节点10可对存储集群进行数据调度,生成数据调度信息。例如,主节点状态的管控节点10可基于负载均衡策略,对存储集群进行数据调度,得到数据调度信息。其中,数据调度信息可包括:待调度数据的存储位置等。
前端机40可从管控节点10,获取数据调度信息。前端机40基于数据调度信息中的存储位置,将待调度数据存储至对应的位置等。其中,前端机40是指执行管控节点10生成的数据调度信息的逻辑功能节点,可实现为独立的物理机,也可为物理机上的软件功能模块、虚拟机或容器等。
在本实施例中,多个管控节点可通过访问存储服务节点,争抢更新存储服务节点存储的租约信息的权限成为主节点,以主节点身份拥有对存储集群的数据的调度权限,实现了多个管控节点的选主。这种抢主方式相较于分布式锁方式无需等待分布式锁失效,有助于提高主备节点切换效率。
具体地,如图2所示,多个管控节点10在抢主时,针对任一管控节点10,可获取目标租约信息LV(图2步骤1);目标租约信息可为管控节点10本地存储的租约信息LV1,也可为获取的存储服务节点存储的租约信息(定义为第一租约信息)LV2。进一步,管控节点10可将携带有目标租约信息LV的租约更新请求提供给存储服务节点20(图2步骤2)。
具体地,管控节点10可以目标租约信息LV为前置条件,生成包含该前置条件的原子的租约更新请求。前置条件是指响应租约更新请求的节点执行租约请求的前提条件,即响应租约更新请求的节点,执行租约更新请求需要满足的条件。原子式的租约更新请求是指以原子操作执行的租约更新请求,该请求在执行过程中不会被线程调度机制打断,可保证租约更新请求的原子性。在本实施例中,响应租约更新请求的节点为存储服务节点20,且存储服务节点20响应租约更新请求,更新存储的租约信息的前提条件,是存储服务节点20存储的租约信息与目标租约信息LV一致。
可选地,管控节点10可采用事务(Transaction)机制,以目标租约信息LV为前置条件,生成包含该前置条件的原子式的租约更新请求。事务(Transaction)机制可以理解为一段if-else程序。即若存储服务节点20满足前置条件,则更新存储的租约信息。
在一些实施例中,租约更新请求还可包括:待更新租约信息。待更新租约信息是指存储服务节点20存储的租约信息更新为的内容。对于租约键值对来说,待更新的租约信息可为:目标租约信息中的租约值+1,如LV+1。
其中,上述目标租约信息由管控节点10的当前节点状态决定。在本实施例中,节点状态包括:主节点状态和备节点状态。主节点状态的管控节点对存储集群具有调度权限,而处于备节点状态的管控节点对存储集群无调度权限。
如图3所示,若管控节点10的当前节点状态为主节点状态,则管控节点10可获取本地存储的租约信息LV1,作为目标租约信息LV(图3步骤1)。相应地,管控节点10可以本地存储的租约信息LV1为前置条件,生成包含该前置条件的原子式的租约更新请求,并将该租约更新请求提供给存储服务节点20(图3步骤2)。
可选地,该租约更新请求携带的待更新租约信息可为:管控节点10本地存储的租约值(Lease Value)+1,即LV1+1。
如图4所示,若管控节点10的当前节点状态为备节点状态,则管控节点10可从存储服务节点20,获取存储服务节点20存储的第一租约信息LV2(图4步骤1)。管控节点10可比较获取的第一租约信息LV2与该管控节点10本地存储的租约信息LV1是否一致(图4步骤2)。其中,若第一租约信息LV2与该管控节点10本地存储的租约信息LV1不一致,说明有其它管控节点为主节点在不断更新存储服务节点20存储的租约信息,即主节点在持续续租。因此,在第一租约信息LV2与该管控节点10本地存储的租约信息LV1不一致的情况下,管控节点10可继续保持备节点状态,即将该管控节点10的节点状态保持为备节点状态(图4步骤3.2)。处于备节点状态的管控节点对存储集群30无调度权限。进一步,管控节点10还可将本地存储的租约信息,更新为存储服务节点20存储的第一租约信息LV2(图4中未示出)。
相应地,若第一租约信息LV2与该管控节点10本地存储的租约信息LV1一致,说明无主节点更新存储服务节点20存储的租约信息,则处于备节点状态的管控节点10可通过争抢存储服务节点20存储的租约信息的更新权限进行抢主。具体地,如图4所示,处于备节点状态的管控节点10可在第一租约信息LV2与该管控节点10本地存储的租约信息LV1一致的情况下,将获取的存储服务节点20存储的第一租约信息LV2,作为目标租约信息LV(图4步骤3.1)。
相应地,管控节点10可以第一租约信息LV2为前置条件,生成包含该前置条件的原子式的租约更新请求。
可选地,该租约更新请求携带的待更新租约信息可为:第一租约信息中的租约值(Lease Value)+1,即LV2+1。
无论主节点,还是备节点,在生成租约更新请求之后,管控节点10可将携带有目标租约信息的租约更信请求提供给存储服务节点20(对应图2步骤2、图3步骤2及图4步骤3.1)。
在本申请实施例中,管控节点10可周期性地进行续租,即每当一个续租周期到达时,管控节点10获取目标租约信息,并生成携带目标租约信息的租约更新请求。之后,将本续租周期生成的租约更新请求提供给存储服务节点。其中,续租周期小于或等于租约的有效期。一般地,续租周期≤1/3的租约有效期。
存储服务节点20可接收该租约更新请求,并从租约更新请求中获取目标租约信息。进一步,存储服务节点20可比较存储服务节点20当前存储的租约信息(定义为第二租约信息)LV3与目标租约信息LV是否一致(对应图2步骤3、图3步骤3及图4步骤4)。在图3步骤3中,目标租约信息LV为处于主节点状态的管控节点10本地存储的第一租约信息LV1。在图4步骤4中,目标租约信息LV为图4步骤1中获取的存储服务节点存储的第一租约信息LV2。
其中,存储服务节点20当前存储的第二租约信息LV3,与处于备节点状态的管控节点从存储服务节点20中读取的第一租约信息LV2,可能相同,也可能不同,具体取决于有无其它管控节点对存储服务节点存储的租约信息进行更新,成为主节点。
若存储服务节点20当前存储的第二租约信息LV3与目标租约信息LV一致,说明无其它管控节点成为主节点,对存储服务节点20存储的租约信息进行更新,则管控节点10获取对存储服务节点存储的租约信息的更新权限。相应地,如图2所示,存储服务节点20可在存储服务节点20当前存储的第二租约信息LV3与目标租约信息LV一致的情况下,更新第二租约信息LV3,以得到更新后的租约信息LV4(对应图2步骤4.1、图3步骤4.1及图4步骤5.1)。
具体地,对于携带有待更新租约信息的租约更新请求,存储服务节点20,可将本地存储的第二租约信息,更新为租约更新请求携带的待更新租约信息(如LV+1等)。更新后的租约信息LV4为待更新租约信息。对于未携带待更新租约信息的租约更新请求,存储服务节点20,可在本地存储的第二租约信息LV3的基础上,增加设定的增量(如+1等),得到更新后的租约信息LV4等等。
在租约信息更新成功之后,存储服务节点20可向管控节点10返回租约更新成功消息(对应图2步骤5.1、图3步骤5.1及图4步骤6.1)。对于管控节点10,在接收到租约更新成功消息的情况下,确定争抢到对存储服务节点20存储的租约信息的更新权限;并将管控节点10的节点状态设置为主节点状态,以使管控节点10获取对存储集群30的调度权限(对应图2步骤6、图3步骤6及图4步骤13)。
管控节点10还可响应于租约更新成功消息,将本地存储的租约信息修改为上述存储服务节点20中更新后的租约信息LV4(对应图2步骤7、图3步骤7及图4步骤7.1)。
相应地,若存储服务节点20当前存储的第二租约信息LV3与目标租约信息LV不一致,说明有其它管控节点成为主节点,对存储服务节点20存储的租约信息进行更新,则管控节点10未获取到对存储服务节点存储的租约信息的更新权限。相应地,如图2所示,存储服务节点20可在存储服务节点20当前存储的第二租约信息LV3与目标租约信息LV不一致的情况下,向管控节点10返回租约更新失败消息(对应图2步骤4.2、图3步骤4.2及图4步骤5.2)。
相应地,管控节点10可在接收到租约更新失败消息的情况下,确定未争抢到对存储服务节点20存储的租约信息的更新权限;并可响应于租约更新失败消息,将管控节点10的节点状态设置为备节点状态(对应图2步骤5.2、图3步骤5.2及图4步骤6.2)。处于备节点状态的管控节点对存储集群30无调度权限。
对于管控节点10周期性续租的实施例,处于主节点状态的管控节点10可在连续N次接收到租约更新失败消息的情况下,将管控节点10的节点状态设置为备节点状态。N≥1,且N≤(T0/T1)的商,N为整数。T0表示租约的有效期,T1表示续租周期。
结合图3和图5,对于发送租约更新请求时处于主节点状态的管控节点10,若该管控节点(主节点)成功更新存储服务节点20存储的租约信息,则保持主节点状态(图5步骤1);若该管控节点(主节点)更新存储服务节点20存储的租约信息失败,则将主节点状态切换为备节点状态(图5步骤2),进入备节点状态的抢主流程。
备节点状态的抢主流程可结合图4和图5进行说明。结合图4和图5,对于处于备节点状态的管控节点10,可参照上述实施例示出图4的步骤1-步骤6.2的调度权限获取方式进行抢主。对于处于备节点状态的管控节点10,还可响应于租约更新失败消息,将本地存储的租约信息LV1更新为图4步骤1中获取的存储服务节点20存储的第一租约信息LV2(图4步骤7.2)。
对于备节点抢主成功的实施例,可能存在原主节点不能及时感知已有其它管控节点抢主成功,而原主节点继续对存储集群30进行调度,导致脑裂和双写问题,损坏存储集群30的数据的一致性。
例如对于两个管控节点A和B,其中管控节点A是主节点,管控节点B是备节点,当管控节点B检测到管控节点A的锁丢失后,会切换到主节点模式,但是此时管控节点A可能还未感知到管控节点B已经切换为主节点,管控节点A和B同时对存储集群30进行数据调度,则会出现双写问题,从而产生脑裂。
为了解决上述问题,在本实施例中,可在存储服务节点20中配置输入/输出屏障信息(Input/Output,IO)屏障(Fence)信息(定义为第一IO屏障信息)。争抢到具有对存储服务节点20存储的IO屏障信息的更新权限的管控节点,具有对存储服务节点存储的IO屏障信息的更新权限。主节点也存储有IO屏障信息(定义为第二IO屏障信息)。
IO屏障信息可实现为IO屏障键值对(IO Fence Key-Value,Lease KV),IO屏障键(IO Fence Key)可为设定的标识信息等。更新租约信息主要是指对IO屏障值(IO FenceValue)进行更新。在一些实施例中,IO屏障值可实现为递增的序列,更新IO屏障信息可实现为增加IO屏障值。例如,每次更新IO屏障信息可将IO屏障值在当前值的基础上增加设定的增量等。设定的增量可为1。
如图6所示,基于上述IO屏障信息,对于处于主节点状态的管控节点10,在对存储集群30进行数据调度时,可以管控节点10本地存储的第二IO屏障信息为前置条件,生成针对存储集群的数据调度请求;并将该数据调度请求提供给存储服务节点20(图6步骤1)。存储服务节点20可比较数据调度请求携带的第二IO屏障信息与存储服务节点20本地存储的第一IO屏障信息是否一致(图6步骤2);若第二IO屏障信息与第一IO屏障信息一致,说明管控节点10对存储集群30具有调度权限,则允许该管控节点10对存储集群30进行数据调度(图6步骤3.1)。
相应地,管控节点10可根据设定的数据调度策略,对存储集群30进行数据调度,以得到数据调度信息(图6步骤4.1)。数据调度信息用于指示将待调度数据存储至哪个存储节点。相应地,数据调度数据包括:待调度数据的存储位置等。设定的数据调度策略可为负载均衡策略或存储碎片最小化策略等。其中,对于存储碎片最小化策略,管控节点10可根据多个存储节点301的空闲存储空间,确定空闲存储空间大于或等于待调度数据的存储节点;之后,从空闲存储空间大于或等于待调度数据的存储节点中,选择空闲存储空间最小的目标存储节点;并将目标存储节点作为待调度数据的存储位置。
对于前端机,可从管控节点10获取数据调度信息;并根据数据调度信息,将待调度数据存储至目标存储节点等等。对于处于备节点状态的管控节点10,若争抢到对存储服务节点20存储的租约信息的更新权限,也可请求修改存储服务节点20存储的IO屏障信息。这样,原主节点对存储集群进行数据调度时,由于存储服务节点20存储的IO屏障信息发生了改变,导致原主节点存储的IO屏障信息与存储服务节点20存储的IO屏障信息不一致,使得原主节点无法对存储集群进行数据调度。原主节点可及时感知已有其它管控节点抢主成功,而及时将自身节点状态切换为备节点状态,可降低出现脑裂问题的概率。
可选地,如图6所示,若第二IO屏障信息与第一IO屏障信息不一致,说明管控节点10对存储集群30具有无调度权限,存储服务节点20可向管控节点10返回无调度权限提示信息(图6步骤3.2)。管控节点10可基于无调度权限提示信息,及时感知已有其它管控节点抢主成功,并将自身节点状态切换为备节点状态(图6步骤4.2)。
下面结合图4对处于备节点状态的管控节点10在争抢到对存储服务节点20存储的租约信息的更新权限下,修改存储服务节点20存储的IO屏障信息的过程进行示例性说明。
如图4所示,对于发送租约更新请求时,处于备节点状态的管控节点,还可响应于租约更新成功消息,获取存储服务节点20存储的IO屏障信息FV1(图4步骤8);并可根据IO屏障信息FV1,生成IO屏障更新请求,并将IO屏障更新请求提供给存储服务节点20(图4步骤9)。该IO屏障更新请求携带有存储服务节点20存储的IO屏障信息FV1。
可选地,管控节点10可以存储服务节点20存储的IO屏障信息FV1为前置条件,生成包含该前置条件的原子式的IO屏障更新请求。关于前置条件的描述可参见上述生成租约更新请求的相关内容,在此不再赘述。原子式的IO屏障更新请求是指以原子操作执行的IO屏障更新请求,该请求在执行过程中不会被线程调度机制打断,可保证IO屏障更新请求的原子性。
可选地,管控节点10可采用事务机制,以IO屏障信息FV1为前置条件,生成包含该前置条件的原子式的租约更新请求。即若存储服务节点20满足前置条件,则更新存储的租约信息。
基于上述IO屏障更新请求,存储服务节点20可从IO屏障更新请求中,获取该请求携带的IO屏障信息FV1;进一步,可比较本地当前存储的IO屏障信息FV2与IO屏障更新请求携带的IO屏障信息FV1是否一致(图4步骤10)。若本地当前存储的IO屏障信息FV2与IO屏障更新请求携带的IO屏障信息FV1一致,说明不存在其它抢主成功的管控节点10对存储服务节点20存储的IO屏障信息进行更新,则提供IO屏障更新请求的管控节点10抢主成功。相应地,存储服务节点20可在本地存储的IO屏障信息FV2与IO屏障请求携带的IO屏障信息FV1一致的情况下,更新本地存储的IO屏障信息FV2,以得到更新后的IO屏障信息FV3(图4步骤11.1)。
由于抢主成功的备节点更新了存储服务节点存储的IO屏障信息,使得原主节点存储的IO屏障信息与存储服务节点20存储的IO屏障信息不一致。这样,在原主节点请求对存储集群进行数据调度时,存储服务节点会检测到数据调度请求携带的IO屏障信息与本地存储的IO屏障信息不同,导致原主节点无法对存储集群进行数据调度。存储服务节点20还可数据调度请求携带的IO屏障信息与本地存储的IO屏障信息不同的情况下,向原主节点返回无调度权限提醒信息,使得原主节点可及时感知已有其它管控节点抢主成功,而及时将自身节点状态切换为备节点状态,进而有助于降低出现脑裂问题的概率。
如图4所示,对于存储服务节点20,在更新本地存储的IO屏障信息FV2之后,可向管控节点10返回IO屏障信息更新成功消息(图4步骤12.1)。管控节点10可响应于该IO屏障信息更新成功消息,将本身的节点状态切换为主节点状态,以使该管控节点10获取对存储集群30的调度权限(图4步骤13)。管控节点10还可响应于IO屏障信息更新成功消息,将存储服务节点20存储的更新后的IO屏障信息FV3,存储至本地,以供后续以IO屏障信息FV3为前置条件,对存储集群30进行数据调度(图4未示出)。关于主节点以IO屏障信息FV3为前置条件,对存储集群30进行数据调度的具体实施方式,可参见关于图6中的相关内容,在此不再赘述。
在一些实施例中,存储服务节点20在本地当前存储的IO屏障信息FV2与IO屏障更新请求携带的IO屏障信息FV1也可能不一致。相应地,存储服务节点20可在本地当前存储的IO屏障信息FV2与IO屏障更新请求携带的IO屏障信息FV1不一致的情况下,向管控节点10返回IO屏障更新失败消息(图4步骤11.2)。
对于管控节点10,可响应于IO屏障更新失败消息,将该管控节点10的节点状态保持在备节点状态(图4步骤12.2),并等待下一抢主周期到达时,继续上述通过访问存储服务节点进行抢主的流程。
在另一些实施例中,备节点在争抢到对租约信息的更新权限之后,存储服务节点20可能出现异常,或者备节点在争抢到对租约信息的更新权限之后,备节点与存储服务节点20之间的网络可能出现异常,导致存储服务节点20无法后续更新IO屏障信息。在这种情况下,若将争抢到租约信息的更新权限的备节点状态的管控节点10修改为主节点状态,则由于存储服务节点20存储的IO屏障信息未更新,原主节点可能还未感知到已经有其它管控节点切换为主节点,新的主节点和原主节点同时对存储集群30进行数据调度,则会出现双写问题,从而产生脑裂。
因此,为了解决该问题,对于处于备节点状态的管控节点10还可在设定时长内未接收到IO屏障信息更新成功消息的情况下,将该管控节点10的节点状态保持在备节点状态,并等待下一抢主周期到达时,继续上述通过访问存储服务节点进行抢主的流程。这样,可降低出现脑裂的概率。结合图4可得图5中关于备节点状态的管控节点的节点状态切换示意图。具体地,对于发送租约更新请求时处于备节点状态的管控节点10,若存储服务节点中的租约信息被持续更新,保持备节点状态(图5步骤3),若存储服务节点中的租约信息不再更新,进入抢存储服务节点存储的租约信息的更新权限的状态(图5步骤4)。若该管控节点(备节点)更新存储服务节点20存储的租约信息失败,则保持备节点状态(图5步骤5)。
若管控节点(备节点)成功更新存储服务节点20存储的租约信息,进入争抢存储服务节点存储的IO屏障信息的更新权限的流程(图5步骤6)。若IO屏障信息更新失败,保持备节点状态(图5步骤7);若IO屏障信息更新成功,切换至主节点状态(图5步骤8)。
除了上述实施例提供的存储管理系统之外,本申请实施例还提供调度权限获取方法,下面分别从管控节点和存储服务节点的角度,对本申请实施例提供的调度权限获取方法进行示例性说明。本申请实施例所述的调度权限获取方法是指对存储集群的调度权限获取方法。
图7为本申请实施例提供的一种调度权限获取方法的流程示意图。该方法适用于管控节点。如图7所示,该方法主要包括:
701、通过访问存储服务节点,与其它管控节点争抢对存储服务节点存储的租约信息的更新权限;存储服务节点用于保障存储集群的数据一致性。
702、若争抢到对存储服务节点存储的租约信息的更新权限,将管控节点的节点状态设置为主节点状态,以使管控节点获取对存储集群的调度权限。
在本申请一些实施例中,为了提高服务切换效率,可在存储服务节点上存储主节点的租约信息。关于租约信息的描述可参见上述系统实施例的相关内容,在此不再赘述。
在本实施例中,对于管控节点,在步骤701中,可通过访问存储服务节点,与其它管控节点争抢对存储服务节点存储的租约信息的更新权限。争抢到对存储服务节点存储的租约信息的更新权限的管控节点,即为主节点。主节点具有对存储集群的调度权限。相应地,若争抢到对存储服务节点存储的租约信息的更新权限,在步骤702中,可将该管控节点的节点状态设置为主节点状态,以使该管控节点获取对存储集群的调度权限。关于对存储集群的调度权限的描述可参见上述系统实施例的相关内容,在此不再赘述。
在本实施例中,管控节点可通过访问存储服务节点,与其它管控节点争抢更新存储服务节点存储的租约信息的权限成为主节点,以主节点身份拥有对存储集群的数据的调度权限,实现了多个管控节点的选主。这种抢主方式相较于分布式锁方式无需等待分布式锁失效,有助于提高主备节点切换效率。
下面结合图8和图9对本身实施例提供的调度权限获取方法进行具体说明。
图8为本申请实施例提供的另一调度权限获取方法的流程示意图。该方法适用于管控节点,如图8所示,该方法主要包括:
801、获取目标租约信息;目标租约信息为管控节点本地存储的租约信息或获取的存储服务节点存储的第一租约信息。
802、将携带有目标租约信息的租约更新请求提供给存储服务节点,以供存储服务节点在目标租约信息与存储服务节点当前存储的第二租约信息一致的情况下,更新第二租约信息,以得到更新后的租约信息,并返回租约更新成功消息。
803、在接收到租约更新成功消息的情况下,确定争抢到对存储服务节点存储的租约信息的更新权限。
804、响应于租约更新成功消息,将本地存储的租约信息修改为更新后的租约信息,并将管控节点的节点状态设置为主节点状态,以获取对存储集群的调度权限。
图9为本申请实施例提供的又一调度权限获取方法的流程示意图。该方法适用于存储服务节点。如图9所示,该方法主要包括:
901、获取管控节点发出的租约更新请求;租约更新请求为管控节点争抢对存储服务节点存储的租约信息的更新权限而发出。
902、从租约更新请求中,获取租约更新请求携带的目标租约信息。
903、在目标租约信息和存储服务节点当前存储的租约信息一致的情况下,更新存储服务节点存储的租约信息,以使管控节点获取对存储服务节点存储的租约信息的更新权限。
904、将租约更新成功消息返回给管控节点,以供管控节点响应租约更新成功消息将节点状态设置为主节点状态以获取存储集群的调度权限。
在本实施例中,多个管控节点在抢主时,针对任一管控节点,在步骤801中,可获取目标租约信息LV;目标租约信息可为管控节点本地存储的租约信息LV1,也可为获取的存储服务节点存储的租约信息(定义为第一租约信息)LV2。进一步,在步骤802中,可将携带有目标租约信息LV的租约更新请求提供给存储服务节点。
具体地,可以目标租约信息LV为前置条件,生成包含该前置条件的原子式的租约更新请求。
可选地,可采用事务(Transaction)机制,以目标租约信息LV为前置条件,生成包含该前置条件的原子式的租约更新请求。
在一些实施例中,租约更新请求还可包括:待更新租约信息。待更新租约信息是指存储服务节点存储的租约信息更新为的内容。
其中,上述目标租约信息由管控节点的当前节点状态决定。在本实施例中,节点状态包括:主节点状态和备节点状态。主节点状态的管控节点对存储集群具有调度权限,而处于备节点状态的管控节点对存储集群无调度权限。
若管控节点的当前节点状态为主节点状态,则0可获取本地存储的租约信息LV1,作为目标租约信息LV。相应地,可以本地存储的租约信息LV1为前置条件,生成包含该前置条件的原子式的租约更新请求,并将该租约更新请求提供给存储服务节点。
若管控节点的当前节点状态为备节点状态,则可获取存储服务节点存储的第一租约信息LV2。进一步,可比较获取的第一租约信息LV2与该管控节点本地存储的租约信息LV1是否一致。其中,若第一租约信息LV2与该管控节点本地存储的租约信息不一致,说明有其它管控节点为主节点在不断更新存储服务节点20存储的租约信息,即主节点在持续续租。因此,在第一租约信息与该管控节点10本地存储的租约信息LV1不一致的情况下,可将该管控节点的节点状态保持为备节点状态。处于备节点状态的管控节点对存储集群30无调度权限。进一步,还可将本地存储的租约信息,更新为存储服务节点存储的第一租约信息LV2。
相应地,若第一租约信息LV2与该管控节点本地存储的租约信息LV1一致,说明无主节点更新存储服务节点存储的租约信息,则处于备节点状态的管控节点10可通过争抢存储服务节点存储的租约信息的更新权限进行抢主。具体地,处于备节点状态的管控节点可在第一租约信息LV2与该管控节点10本地存储的租约信息LV1一致的情况下,将获取的存储服务节点20存储的第一租约信息LV2,作为目标租约信息LV。
相应地,可以第一租约信息LV2为前置条件,生成包含该前置条件的原子式的租约更新请求。
无论主节点,还是备节点,在生成租约更新请求之后,在步骤802中,可将携带有目标租约信息的租约更请求提供给存储服务节点。
对于存储服务节点,在步骤901中,可获取管控节点发出的租约更新请求,并在步骤902中,从租约更新请求中获取目标租约信息。进一步,可比较存储服务节点20当前存储的租约信息(定义为第二租约信息)LV3与目标租约信息LV是否一致。
其中,存储服务节点当前存储的第二租约信息LV3,与处于备节点状态的管控节点从存储服务节点中读取的第一租约信息LV2,可能相同,也可能不同,具体取决于有无其它管控节点对存储服务节点存储的租约信息进行更新,成为主节点。
若存储服务节点当前存储的第二租约信息LV3与目标租约信息LV一致,说明无其它管控节点成为主节点,对存储服务节点存储的租约信息进行更新,则管控节点获取对存储服务节点存储的租约信息的更新权限。相应地,在存储服务节点20当前存储的第二租约信息LV3与目标租约信息LV一致的情况下,在本步骤903中,可更新第二租约信息LV3,以得到更新后的租约信息LV4。
在租约信息更新成功之后,在步骤904中,可向管控节点返回租约更新成功消息。对于管控节点,在步骤803中,在接收到租约更新成功消息的情况下,确定争抢到对存储服务节点存储的租约信息的更新权限;并在步骤804中,将管控节点的节点状态设置为主节点状态,以使管控节点获取对存储集群的调度权限。
在步骤804中,还可响应于租约更新成功消息,将本地存储的租约信息修改为上述存储服务节点中更新后的租约信息LV4。
相应地,若存储服务节点当前存储的第二租约信息LV3与目标租约信息LV不一致,说明有其它管控节点成为主节点,对存储服务节点存储的租约信息进行更新,则管控节点未获取到对存储服务节点存储的租约信息的更新权限。相应地,针对存储服务节点,可在存储服务节点当前存储的第二租约信息LV3与目标租约信息LV不一致的情况下,向管控节点返回租约更新失败消息。
相应地,管控节点可在接收到租约更新失败消息的情况下,确定未争抢到对存储服务节点存储的租约信息的更新权限;并可响应于租约更新失败消息,将管控节点10的节点状态设置为备节点状态。处于备节点状态的管控节点对存储集群无调度权限。
对于发送租约更新请求时处于主节点状态的管控节点10,若该管控节点(主节点)成功更新存储服务节点存储的租约信息,则保持主节点状态;若该管控节点(主节点)更新存储服务节点20存储的租约信息失败,则将主节点状态切换为备节点状态,进入备节点状态的抢主流程。
对于处于备节点状态的管控节点,还可响应于租约更新失败消息,将本地存储的租约信息LV1更新为获取的存储服务节点存储的第一租约信息LV2。
对于备节点抢主成功的实施例,可能存在原主节点不能及时感知已有其它管控节点抢主成功,而原主节点继续对存储集群进行数据调度,导致脑裂和双写问题,损坏存储集群的数据的一致性。
为了解决上述问题,在本实施例中,可在存储服务节点中配置输入/输出屏障信息(Input/Output,IO)屏障(Fence)信息(定义为第一IO屏障信息)。争抢到具有对存储服务节点存储的IO屏障信息的更新权限的管控节点,具有对存储服务节点存储的IO屏障信息的更新权限。主节点也存储有IO屏障信息(定义为第二IO屏障信息)。
基于上述IO屏障信息,对于处于主节点状态的管控节点,在对存储集群进行数据调度时,可以管控节点本地存储的第二IO屏障信息为前置条件,生成针对存储集群的数据调度请求;并将该数据调度请求提供给存储服务节点。存储服务节点,可比较数据调度请求携带的第二IO屏障信息与存储服务节点本地存储的第一IO屏障信息是否一致;若第二IO屏障信息与第一IO屏障信息一致,说明管控节点对存储集群具有调度权限。相应地,存储服务节点可允许处于主节点状态的管控节点对存储集群进行数据调度。相应地,处于主节点状态的管控节点可根据预设的数据调度策略,对存储集群进行数据调度。
对于处于备节点状态的管控节点,若争抢到对存储服务节点存储的租约信息的更新权限,也可请求修改存储服务节点存储的IO屏障信息。这样,原主节点请求对存储集群进行数据调度时,由于存储服务节点存储的IO屏障信息发生了改变,导致原主节点存储的IO屏障信息与存储服务节点存储的IO屏障信息不一致,使得原主节点无法对存储集群进行数据调度。原主节点可及时感知已有其它管控节点抢主成功,而及时将自身节点状态切换为备节点状态,可降低出现脑裂问题的概率。
可选地,若第二IO屏障信息与第一IO屏障信息不一致,说明管控节点对存储集群30具有无调度权限,存储服务节点可向管控节点返回无调度权限提示信息。管控节点可基于无调度权限提示信息,及时感知已有其它管控节点抢主成功,并将自身节点状态切换为备节点状态。
下面对处于备节点状态的管控节点在争抢到对存储服务节点存储的租约信息的更新权限下,修改存储服务节点存储的IO屏障信息的过程进行示例性说明。
对于发送租约更新请求时,处于备节点状态的管控节点,还可响应于租约更新成功消息,获取存储服务节点存储的IO屏障信息FV1;并可根据IO屏障信息FV1,生成IO屏障更新请求,并将IO屏障更新请求提供给存储服务节点。该IO屏障更新请求携带有存储服务节点存储的IO屏障信息FV1。
可选地,以存储服务节点存储的IO屏障信息FV1为前置条件,生成包含该前置条件的原子式的IO屏障更新请求。关于前置条件的描述可参见上述生成租约更新请求的相关内容,在此不再赘述。
可选地,可采用事务机制,以IO屏障信息FV1为前置条件,生成包含该前置条件的原子式的租约更新请求。即若存储服务节点满足前置条件,则更新存储的租约信息。
基于上述IO屏障更新请求,存储服务节点可从IO屏障更新请求中,获取该请求携带的IO屏障信息FV1;进一步,可比较本地当前存储的IO屏障信息FV2与IO屏障更新请求携带的IO屏障信息FV1是否一致。若本地当前存储的IO屏障信息FV2与IO屏障更新请求携带的IO屏障信息FV1一致,更新本地存储的IO屏障信息FV2,以得到更新后的IO屏障信息FV3。
由于抢主成功的备节点更新了存储服务节点存储的IO屏障信息,使得原主节点存储的IO屏障信息与存储服务节点存储的IO屏障信息不一致。这样,在原主节点请求对存储集群进行数据调度时,存储服务节点会检测到数据调度请求携带的IO屏障信息与本地存储的IO屏障信息不同,导致原主节点无法对存储集群进行数据调度。存储服务节点还可数据调度请求携带的IO屏障信息与本地存储的IO屏障信息不同的情况下,向原主节点返回无调度权限提醒信息,使得原主节点可及时感知已有其它管控节点抢主成功,而及时将自身节点状态切换为备节点状态,进而有助于降低出现脑裂问题的概率。
对于存储服务节点,在更新本地存储的IO屏障信息FV2之后,可向管控节点返回IO屏障信息更新成功消息。管控节点可响应于该IO屏障信息更新成功消息,将本身的节点状态切换为主节点状态,以使该管控节点获取对存储集群的调度权限。管控节点还可响应于IO屏障信息更新成功消息,将存储服务节点存储的更新后的IO屏障信息FV3,存储至本地,以供后续以IO屏障信息FV3为前置条件,对存储集群进行数据调度。关于主节点以IO屏障信息FV3为前置条件,对存储集群进行数据调度的具体实施方式,可参见上述相关内容,在此不再赘述。
在一些实施例中,存储服务节点在本地当前存储的IO屏障信息FV2与IO屏障更新请求携带的IO屏障信息FV1也可能不一致。相应地,存储服务节点可在本地当前存储的IO屏障信息FV2与IO屏障更新请求携带的IO屏障信息FV1不一致的情况下,向管控节点返回IO屏障更新失败消息。
对于管控节点,可响应于IO屏障更新失败消息,将该管控节点10的节点状态保持在备节点状态,并等待下一抢主周期到达时,继续上述通过访问存储服务节点进行抢主的流程。
在另一些实施例中,备节点在争抢到对租约信息的更新权限之后,存储服务节点可能出现异常,或者备节点在争抢到对租约信息的更新权限之后,备节点与存储服务节点之间的网络可能出现异常,导致存储服务节点无法后续更新IO屏障信息。在这种情况下,若将争抢到租约信息的更新权限的备节点状态的管控节点修改为主节点状态,则由于存储服务节点存储的IO屏障信息未更新,原主节点可能还未感知到已经有其它管控节点切换为主节点,新的主节点和原主节点同时对存储集群进行数据调度,则会出现双写问题,从而产生脑裂。
因此,为了解决该问题,对于处于备节点状态的管控节点还可在设定时长内未接收到IO屏障信息更新成功消息的情况下,将该管控节点的节点状态保持在备节点状态,并等待下一抢主周期到达时,继续上述通过访问存储服务节点进行抢主的流程。这样,可降低出现脑裂的概率。其中,设定时长可从争抢到对租约信息的更新权限的备节点发出IO屏障信息更新消息进行计时。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤701和702的执行主体可以为设备A;又比如,步骤701的执行主体可以为设备A,步骤702的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如701、702等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。
相应地,本申请实施例还提供一种存储有计算机指令的计算机可读存储介质,当计算机指令被一个或多个处理器执行时,致使一个或多个处理器执行上述各调度权限获取方法中的步骤。
图10为本申请实施例提供的计算设备的结构示意图。如图10所示,该计算设备包括:存储器100a、处理器100b和通信组件100c。存储器100a,用于存储计算机程序。
在一些实施例中,计算设备可实现为管控节点。相应地,处理器100b耦合至存储器100a,用于执行计算机程序以用于:利用通信组件100c通过访问存储服务节点,与其它管控节点争抢对存储服务节点存储的租约信息的更新权限;存储服务节点用于保障存储集群的数据一致性;以及,若争抢到对存储服务节点存储的租约信息的更新权限,将管控节点的节点状态设置为主节点状态,以使管控节点获取对存储集群的调度权限。
在一些实施例中,处理器100b在通过访问存储服务节点,与其它管控节点争抢对存储服务节点存储的租约信息的更新权限时,具体用于:获取目标租约信息;目标租约信息为管控节点本地存储的租约信息或获取的存储服务节点存储的第一租约信息;通过通信组件100c将携带有目标租约信息的租约更新请求提供给存储服务节点,以供存储服务节点在目标租约信息与存储服务节点当前存储的第二租约信息一致的情况下,更新第二租约信息,以得到更新后的租约信息,并返回租约更新成功消息;以及,在接收到租约更新成功消息的情况下,确定争抢到对存储服务节点存储的租约信息的更新权限。
处理器100c还用于:响应于租约更新成功消息,将本地存储的租约信息修改为更新后的租约信息。
相应地,存储服务节点在目标租约信息和存储服务节点存储的租约信息不一致的情况下,向管控节点返回租约更新失败消息。处理器100b还用于:在接收到租约更新失败消息的情况下,确定未争抢到对存储服务节点存储的租约信息的更新权限;响应于租约更新失败消息,将管控节点的节点状态设置为备节点状态;处于备节点状态的管控节点对存储集群无调度权限。
在一些实施例中,在将携带有目标租约信息的租约更新请求提供给存储服务节点时,管控节点处于主节点状态。相应地,处理器100b在获取目标租约信息时,具体用于:获取本地存储的租约信息,作为目标租约信息。相应地,处理器100b还用于:以本地存储的租约信息为前置条件,生成包含该前置条件的原子式的租约更新请求。
在另一些实施例中,存储服务节点,存储有第一输入/输出IO屏障信息;处于主节点状态的管控节点存储有第二IO屏障信息。处理器100b还用于:以第二IO屏障信息为前置条件,生成针对存储集群的数据调度请求;通过通信组件100c将数据调度请求提供给存储服务节点,以供存储服务节点在第一IO屏障信息与第二IO屏障信息一致的情况下允许处于主节点状态的管控节点对存储集群进行数据调度;以及,根据预设的数据调度策略,对存储集群进行数据调度。
在又一些实施例中,在将携带有目标租约信息的租约更新请求提供给存储服务节点时,管控节点处于备节点状态。相应地,处理器100b在获取目标租约信息时,具体用于:从存储服务节点,获取存储服务节点存储的第一租约信息;在第一租约信息与管控节点本地存储的租约信息一致的情况下,将第一租约信息作为目标租约信息。
进一步,处理器100b还用于:以第一租约信息为前置条件,生成包含该前置条件的原子式的租约更新请求。
相应地,处理器100b还用于:在第一租约信息与管控节点本地存储的租约信息不一致的情况下,将管控节点的节点状态保持为备节点状态;并将本地存储的租约信息更新为第一租约信息;其中,处于备节点状态的管控节点对存储集群无调度权限。
在一些实施例中,存储服务节点,存储有输入/输出IO屏障信息;争抢到对存储服务节点存储的租约信息的更新权限的管控节点,具有存储服务节点存储的IO屏障信息的更新权限。相应地,处理器100b还用于:响应于租约更新成功消息,获取存储服务节点存储的第一IO屏障信息;根据存储服务节点存储的第一IO屏障信息,生成IO屏障更新请求;通过通信组件100c将IO屏障更新请求提供给存储服务节点,以供存储服务节点在本地当前存储的第二IO屏障信息与第一IO屏障信息一致的情况下,更新第二IO屏障信息,并向管控节点返回IO屏障信息更新成功消息;以及,响应于IO屏障信息更新成功消息,将管控节点的节点状态切换至主节点状态,以使管控节点获取对存储集群的调度权限。
可选地,处理器100b在根据存储服务节点存储的IO屏障信息,生成IO屏障更新请求时,具体用于:以存储服务节点存储的IO屏障信息为前置条件,生成包含该前置条件的原子式的IO屏障更新请求。
相应地,存储服务节点,在本地当前存储的IO屏障信息与IO屏障更新请求携带的IO屏障信息不一致的情况下,向管控节点返回IO屏障信息更新失败消息。处理器100b还用于:响应于IO屏障信息更新失败消息,将管控节点的节点状态保持在备节点状态;或者在设定时长内未接收到IO屏障信息更新成功消息,将管控节点的节点状态保持在备节点状态。
本实施例提供的计算设备,在实现为管控节点时,可通过与其它管控节点争抢更新存储服务节点存储的租约信息的权限,而成为主节点,以主节点身份拥有对存储集群的数据的调度权限,实现了多个管控节点的选主。这种抢主方式相较于分布式锁方式无需等待分布式锁失效,有助于提高主备节点切换效率。
本申请实施例提供的计算设备还可实现为存储服务节点。相应地,处理器100b可用于:通过通信组件100c获取管控节点发出的租约更新请求;租约更新请求为管控节点争抢对存储服务节点存储的租约信息的更新权限而发出;从租约更新请求中,获取租约更新请求携带的目标租约信息;在目标租约信息和存储服务节点当前存储的租约信息一致的情况下,更新存储服务节点存储的租约信息,以使管控节点获取对存储服务节点存储的租约信息的更新权限;以及,将租约更新成功消息返回给管控节点,以供管控节点响应租约更新成功消息将节点状态设置为主节点状态以获取存储集群的调度权限。
相应地,处理器100b还用于:若目标租约信息和存储服务节点当前存储的租约信息不一致,将租约更新失败消息返回给管控节点,以供管控节点将节点状态设置为备节点状态;处于备节点状态的管控节点对存储集群无调度权限。
在一些实施例中。存储服务节点,存储有输入/输出IO屏障信息;争抢到对存储服务节点存储的租约信息的更新权限的管控节点,具有IO屏障信息的更新权限。处理器100b还用于:通过通信组件100c获取管控节点发出的IO屏障更新请求;从IO屏障更新请求中,获取IO屏障更新请求携带的IO屏障信息;在本地当前存储的IO屏障信息与IO屏障更新请求携带的IO屏障信息一致的情况下,更新存储服务节点存储的IO屏障信息,以得到更新后的IO屏障信息;通过通信组件100c向管控节点返回IO屏障信息更新成功消息,以供管控节点响应于IO屏障信息更新成功消息,将管控节点的节点状态切换至主节点状态。
相应地,处理器100b还用于:在本地当前存储的IO屏障信息与IO屏障更新请求携带的IO屏障信息不一致的情况下,向管控节点返回IO屏障信息更新失败消息,以供管控节点响应于IO屏障信息更新失败消息,将管控节点的节点状态保持在备节点状态。
本实施例提供的计算设备,在实现为存储服务节点时,可响应管控节点的租约更新请求,并根据租约更新请求携带的租约信息与本地存储的租约信息之间是否一致,确定管控节点是否争抢到对存储服务节点存储的租约信息的更新权限;并向响应租约更新请求,租约信息更新成功的管控节点返回租约更新成功消息。这样,管控节点可将自身节点状态设置为主节点,以获取对存储集群的调度权限,实现管控节点之间的抢主。
在一些可选实施方式中,如图10所示,该计算设备还可以包括:电源组件100d等组件。图10中仅示意性给出部分组件,并不意味着计算设备必须包含图10所示全部组件,也不意味着计算设备只能包括图10所示组件。
在本申请实施例中,存储器用于存储计算机程序,并可被配置为存储其它各种数据以支持在其所在设备上的操作。其中,处理器可执行存储器中存储的计算机程序,以实现相应控制逻辑。存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random-Access Memory,SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read Only Memory,EEPROM),可擦除可编程只读存储器(Electrical Programmable Read Only Memory,EPROM),可编程只读存储器(Programmable Read Only Memory,PROM),只读存储器(Read Only Memory,ROM),磁存储器,快闪存储器,磁盘或光盘。
在本申请实施例中,处理器可以为任意可执行上述方法逻辑的硬件处理设备。可选地,处理器可以为中央处理器(Central Processing Unit,CPU)、图形处理器(GraphicsProcessing Unit,GPU)或微控制单元(Microcontroller Unit,MCU);也可以为现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程阵列逻辑器件(ProgrammableArray Logic,PAL)、通用阵列逻辑器件(General Array Logic,GAL)、复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)等可编程器件;或者为先进精简指令集(Reduced Instruction Set Compute,RISC)处理器(Advanced RISC Machines,ARM)或系统芯片(System on Chip,SoC)等等,但不限于此。
在本申请实施例中,通信组件被配置为便于其所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如无线保真(Wireless Fidelity,WiFi),2G或3G,4G,5G或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件还可基于近场通信(Near Field Communication,NFC)技术、射频识别(Radio Frequency Identification,RFID)技术、红外数据协会(Infrared DataAssociation,IrDA)技术、超宽带(Ultra Wide Band,UWB)技术、蓝牙(Bluetooth,BT)技术或其他技术来实现。
在本申请实施例中,电源组件被配置为其所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU等)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(Random-Access Memory,RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机的存储介质为可读存储介质,也可称为可读介质。可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(Phase-Change Memory,PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(Dynamic Random Access Memory,DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(Digital Video Disc,DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上内容仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (13)
1.一种调度权限获取方法,适用于管控节点,所述方法包括:
通过访问存储服务节点,与其它管控节点争抢对所述存储服务节点存储的租约信息的更新权限;所述存储服务节点具有保障存储集群的数据一致性的功能;
若争抢到对所述存储服务节点存储的租约信息的更新权限,将所述管控节点的节点状态设置为主节点状态,以使所述管控节点获取对所述存储集群的调度权限。
2.根据权利要求1所述的方法,所述通过访问存储服务节点,与其它管控节点争抢对所述存储服务节点存储的租约信息的更新权限,包括:
获取目标租约信息;所述目标租约信息为所述管控节点本地存储的租约信息或获取的所述存储服务节点存储的第一租约信息;
将携带有目标租约信息的租约更新请求提供给所述存储服务节点,以供所述存储服务节点在所述目标租约信息与所述存储服务节点当前存储的第二租约信息一致的情况下,更新所述第二租约信息,以得到更新后的租约信息,并返回租约更新成功消息;
在接收到所述租约更新成功消息的情况下,确定争抢到对所述存储服务节点存储的租约信息的更新权限;
所述方法还包括:
响应于所述租约更新成功消息,将本地存储的租约信息修改为所述更新后的租约信息。
3.根据权利要求2所述的方法,所述存储服务节点在所述目标租约信息和所述存储服务节点存储的租约信息不一致的情况下,向所述管控节点返回租约更新失败消息;
所述方法还包括:
在接收到所述租约更新失败消息的情况下,确定未争抢到对所述存储服务节点存储的租约信息的更新权限;
响应于所述租约更新失败消息,将所述管控节点的节点状态设置为备节点状态;处于备节点状态的管控节点对所述存储集群无调度权限。
4.根据权利要求2或3所述的方法,在将携带有目标租约信息的租约更新请求提供给所述存储服务节点时,所述管控节点处于主节点状态;
所述获取目标租约信息,包括:
获取本地存储的租约信息,作为所述目标租约信息;
所述方法还包括:
以所述本地存储的租约信息为前置条件,生成包含该前置条件的原子式的租约更新请求。
5.根据权利要求4所述的方法,所述存储服务节点,存储有第一输入/输出IO屏障信息;处于主节点状态的管控节点存储有第二IO屏障信息;所述方法还包括:
以所述第二IO屏障信息为前置条件,生成针对所述存储集群的数据调度请求;
将所述数据调度请求提供给所述存储服务节点,以供所述存储服务节点在所述第一IO屏障信息与所述第二IO屏障信息一致的情况下,允许所述处于主节点的管控节点对所述存储集群进行数据调度;
根据预设的数据调度策略,对所述存储集群进行数据调度。
6.根据权利要求2或3所述的方法,在将携带有目标租约信息的租约更新请求提供给所述存储服务节点时,所述管控节点处于备节点状态;
所述获取目标租约信息,包括:
从所述存储服务节点,获取所述存储服务节点存储的所述第一租约信息;
在所述第一租约信息与所述管控节点本地存储的租约信息一致的情况下,将所述第一租约信息作为所述目标租约信息;
所述方法还包括:
以所述第一租约信息为前置条件,生成包含该前置条件的原子式的租约更新请求。
7.根据权利要求6所述的方法,还包括:
在所述第一租约信息与所述管控节点本地存储的租约信息不一致的情况下,将所述管控节点的节点状态保持为备节点状态;并将所述本地存储的租约信息更新为所述第一租约信息;其中,处于备节点状态的管控节点对所述存储集群无调度权限。
8.根据权利要求6所述的方法,所述存储服务节点,存储有输入/输出IO屏障信息;争抢到对所述存储服务节点存储的租约信息的更新权限的管控节点,具有所述存储服务节点存储的IO屏障信息的更新权限;所述方法还包括:
响应于所述租约更新成功消息,获取所述存储服务节点存储的第一IO屏障信息;
根据所述存储服务节点存储的第一IO屏障信息,生成IO屏障更新请求;
将所述IO屏障更新请求提供给所述存储服务节点,以供所述存储服务节点在本地当前存储的第二IO屏障信息与所述第一IO屏障信息一致的情况下,更新所述第二IO屏障信息,并向所述管控节点返回IO屏障信息更新成功消息;
响应于IO屏障信息更新成功消息,将所述管控节点的节点状态切换至主节点状态,以使所述管控节点获取对所述存储集群的调度权限。
9.一种调度权限获取方法,适用于存储服务节点,所述存储服务节点具有保障存储集群的数据一致性的功能,并存储有多个管控节点中主节点的租约信息;
所述方法包括:
获取所述管控节点发出的租约更新请求;所述租约更新请求为所述管控节点争抢对所述存储服务节点存储的租约信息的更新权限而发出;
从所述租约更新请求中,获取所述租约更新请求携带的目标租约信息;
在所述目标租约信息和所述存储服务节点当前存储的租约信息一致的情况下,更新所述存储服务节点存储的租约信息,以使所述管控节点获取对所述存储服务节点存储的租约信息的更新权限;
将租约更新成功消息返回给所述管控节点,以供所述管控节点响应所述租约更新成功消息将节点状态设置为主节点状态以获取所述存储集群的调度权限。
10.根据权利要求9所述的方法,所述存储服务节点,存储有输入/输出IO屏障信息;争抢到对所述存储服务节点存储的租约信息的更新权限的管控节点,具有所述IO屏障信息的更新权限;所述方法还包括:
获取所述管控节点发出的IO屏障更新请求;
从所述IO屏障更新请求中,获取所述IO屏障更新请求携带的IO屏障信息;
在本地当前存储的IO屏障信息与所述IO屏障更新请求携带的IO屏障信息一致的情况下,更新所述存储服务节点存储的IO屏障信息,以得到更新后的IO屏障信息;
向所述管控节点返回IO屏障信息更新成功消息,以供所述管控节点响应于IO屏障信息更新成功消息,将所述管控节点的节点状态切换至主节点状态。
11.一种数据存储系统,包括:多个管控节点和存储集群的存储服务节点;
所述存储服务节点,具有保障所述存储集群的数据一致性的功能,并存储有所述多个管控节点中主节点的租约信息;所述主节点对所述存储集群具有调度权限;
所述管控节点,用于执行权利要求1-8任一项所述的方法中的步骤;
所述存储服务节点,用于执行权利要求9或10所述的方法中的步骤。
12.一种计算设备,包括:存储器、处理器和通信组件;所述存储器,用于存储计算机程序;
所述处理器耦合至所述存储器及所述通信组件,用于执行所述计算机程序以用于执行权利要求11中所述管控节点执行的方法,和/或权利要求11中所述存储服务节点执行的方法。
13.一种存储有计算机指令的计算机可读存储介质,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行权利要求11中所述管控节点执行的方法,和/或权利要求11中所述存储服务节点执行的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310147892.7A CN116185589A (zh) | 2023-02-10 | 2023-02-10 | 调度权限获取方法、设备、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310147892.7A CN116185589A (zh) | 2023-02-10 | 2023-02-10 | 调度权限获取方法、设备、系统及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116185589A true CN116185589A (zh) | 2023-05-30 |
Family
ID=86447269
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310147892.7A Pending CN116185589A (zh) | 2023-02-10 | 2023-02-10 | 调度权限获取方法、设备、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116185589A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117608766A (zh) * | 2024-01-23 | 2024-02-27 | 杭州阿里云飞天信息技术有限公司 | 分布式锁处理方法、设备、存储介质和系统 |
-
2023
- 2023-02-10 CN CN202310147892.7A patent/CN116185589A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117608766A (zh) * | 2024-01-23 | 2024-02-27 | 杭州阿里云飞天信息技术有限公司 | 分布式锁处理方法、设备、存储介质和系统 |
CN117608766B (zh) * | 2024-01-23 | 2024-04-30 | 杭州阿里云飞天信息技术有限公司 | 分布式锁处理方法、设备、存储介质和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11888599B2 (en) | Scalable leadership election in a multi-processing computing environment | |
CN106899648B (zh) | 一种数据处理方法和设备 | |
EP3311280B1 (en) | Data replication in memory systems. | |
CN107783842B (zh) | 一种分布式锁实现方法、设备及存储装置 | |
CN107018091B (zh) | 资源请求的调度方法和装置 | |
CN106406983A (zh) | 一种集群中的任务调度方法及装置 | |
US9917884B2 (en) | File transmission method, apparatus, and distributed cluster file system | |
US9825735B2 (en) | Network node and method therein for HARQ processes in a D2D communication | |
RU2749339C1 (ru) | Способ управления оборудованием, кластерная система, электронное устройство и читаемый носитель данных | |
CN107168777B (zh) | 分布式系统中资源的调度方法以及装置 | |
CN110888858B (zh) | 数据库的操作方法和装置、存储介质、电子装置 | |
US10599436B2 (en) | Data processing method and apparatus, and system | |
US11675622B2 (en) | Leader election with lifetime term | |
CN110569302A (zh) | 一种基于lucene的分布式集群的物理隔离的方法及装置 | |
CN116185589A (zh) | 调度权限获取方法、设备、系统及存储介质 | |
CN116304390B (zh) | 时序数据处理方法、装置、存储介质及电子设备 | |
CN111611074A (zh) | 一种集群资源的调度方法及装置 | |
CN116954816A (zh) | 容器集群控制方法、装置、设备及计算机存储介质 | |
CN114296891A (zh) | 任务的调度方法、系统、计算设备、存储介质及程序产品 | |
US20180373573A1 (en) | Lock manager | |
CN117608871A (zh) | 基于共享内存消息队列的金融行情订阅方法、设备及介质 | |
CN116599828A (zh) | 任务执行方法和装置、存储介质及电子设备 | |
CN113076187A (zh) | 分布式锁管理方法及装置 | |
KR20120067865A (ko) | 공유 메모리 채널 다중화 방법 및 그 장치 | |
CN115328608A (zh) | 一种Kubernetes容器垂直伸缩调节方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |