CN116644119A - 一种数据存储系统及方法 - Google Patents
一种数据存储系统及方法 Download PDFInfo
- Publication number
- CN116644119A CN116644119A CN202210140120.6A CN202210140120A CN116644119A CN 116644119 A CN116644119 A CN 116644119A CN 202210140120 A CN202210140120 A CN 202210140120A CN 116644119 A CN116644119 A CN 116644119A
- Authority
- CN
- China
- Prior art keywords
- storage
- storage node
- node
- cluster
- data
- 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
- 238000013500 data storage Methods 0.000 title claims abstract description 58
- 238000000034 method Methods 0.000 title claims abstract description 33
- 238000003860 storage Methods 0.000 claims abstract description 512
- 238000007726 management method Methods 0.000 claims abstract description 38
- 238000006243 chemical reaction Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 13
- 238000012544 monitoring process Methods 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 9
- 210000004556 brain Anatomy 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 241000876446 Lanthanotidae Species 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据存储系统及方法,涉及信息技术领域,用于解决现有技术中在节点数受限的场景下,无法保障数据存储的高可用性的问题。在本申请中,数据存储系统包括:存储集群,存储集群中包括两个存储节点,两个存储节点分别为主存储节点和备存储节点。其中,主存储节点用于从容器管理集群中获取数据,将数据存储于主存储节点的本地数据库中,并向备存储节点发送该数据。相应的,备存储节点用于接收来自主存储节点的数据,将该数据存储于备存储节点的本地数据库中。如此,该数据同时存储于主存储节点的本地数据库和备存储节点的本地数据库中,保障数据存储的高可用性,而且一个存储集群中可以只包括两个存储节点,有助于降低存储节点的数量。
Description
技术领域
本申请涉及信息技术领域,尤其涉及一种数据存储系统及方法。
背景技术
随着以应用容器引擎(docker)为代表的容器技术的发展和流行,业界逐渐开始接受并普及容器技术。单机的容器引擎和镜像解决的问题十分受限,想要在生产环境中直接使用容器还需要依赖容器管理集群。容器管理集群通常致力于解决容器的编排、调度、集群管理等问题。当前业界的容器管理集群主要是Kubernetes集群。
Kubernetes集群可使用ETCD集群作为数据的存储后端,ETCD集群中的各个存储节点基于分布式一致性(Raft)共识算法,实现ETCD集群中多个存储节点的数据同步,以及从中选择主存储节点。在ETCD集群中,至少需要部署三个存储节点,才可保障高可用性的数据存储。
而在节点数受限的场景下,可能无法保障ETCD集群中部署三个节点,从而无法运行Raft共识算法,以实现数据存储的高可用性。
发明内容
本申请提供一种数据存储系统及方法,其中,数据存储系统中的存储集群可用于存储容器管理集群中的数据,存储集群可设置有两个存储节点,该两个存储节点分别是主存储节点和备存储节点,通过主备方式实现数据存储的高可用性。
第一方面,本申请提供一种数据存储系统,包括:存储集群,存储集群中包括两个存储节点,两个存储节点分别为主存储节点和备存储节点。其中,主存储节点用于从容器管理集群中获取数据,将数据存储于主存储节点的本地数据库中,并向备存储节点发送数据。相应的,备存储节点用于接收来自主存储节点的数据,将该数据存储于备存储节点的本地数据库中。
如此,实现该数据同时存储于主存储节点的本地数据库和备存储节点的本地数据库中,保障数据存储的高可用性,而且一个存储集群中可以只包括两个存储节点,降低存储节点的数量。
在一种可能的实现方式中,主存储节点中还包括代理接口,主存储节点的代理接口与容器管理集群中的应用程序编程接口(application programming interface,API)服务器(server)通信。主存储节点的代理接口用于接收来自API server的第一请求,其中,第一请求包括待存储至主存储节点的本地数据库的数据。然后主存储节点的代理接口将该第一请求进行协议转换,得到主存储节点的本地数据库支持的第二请求。随后,主存储节点的代理接口还用于将第二请求发送至主存储节点的本地数据库,主存储节点的本地数据库用于存储第二请求中包括的数据。
如此,主存储节点的代理接口可将来自容器管理集群的API server的请求,转化成符合主存储节点的本地数据库的接口的请求。比如在主存储节点的本地数据库是MySQL时,主存储节点的代理接口将来自API server的请求,转化成符合MySQL接口的请求,从而实现容器管理集群向主存储节点的本地数据库中读写数据。
在一种可能的实现方式中,数据存储系统还包括仲裁节点,仲裁节点分别与主存储节点和备存储节点连接,仲裁节点用于监测主存储节点和备存储节点的工作状态。在确定主存储节点的工作状态由正常变为故障、且备存储节点的工作状态为正常时,将备存储节点切换为存储集群中的主存储节点。相应的,容器管理集群需要将数据存储于存储集群时,可将数据发送至该新的主存储节点,该新的主存储节点可以将数据进行存储。
如此,有助于保障整个存储系统中数据的高可用性。且通过仲裁节点来监测主存储节点和备存储节点的工作状态,并指示备存储节点切换为主存储节点,有助于避免主备存储节点相互监测导致的脑裂问题。
在一种可能的实现方式中,存储集群为多个,数据存储系统中还包括仲裁节点,仲裁节点分别与每个存储集群中的两个存储节点连接。仲裁节点用于监测每个存储集群中的两个存储节点的工作状态。针对于该多个存储集群中的任一个,仲裁节点在确定该存储集群中的主存储节点的工作状态由正常变为故障、且备存储节点的工作状态为正常时,将该存储集群中的备存储节点切换为该存储集群中的主存储节点。相应的,容器管理集群需要将数据存储于该存储集群时,可将数据发送至该新的主存储节点,该新的主存储节点可以将数据进行存储。
如此,有助于保障整个存储系统中数据的高可用性。且通过仲裁节点来监测主存储节点和备存储节点的工作状态,并指示备存储节点切换为主存储节点,有助于避免主备存储节点相互监测导致的脑裂问题。而且,该一个仲裁节点监测多个存储集群中的主存储节点和备存储节点的工作状态,有助于降低存储系统中的部署成本。且在存储集群的个数逐渐增大时,存储系统中可节约的部署成本也相对越大。
在一种可能的实现方式中,仲裁节点将备存储节点切换为存储集群中的主存储节点时,具体用于向备存储节点发送切换指示,切换指示用于指示备存储节点切换为存储集群中的主存储节点。相应的,备存储节点还用于根据切换指示,切换为该存储集群中的主存储节点。如此,存储集群中的备存储节点基于仲裁节点的指示,切换为存储集群中的主存储节点,有助于保障整个存储系统中数据的高可用性和有序性。
在一种可能的实现方式中,本地数据库包括:Oracle、MySQL、MongoDB或Redis等中的一项或多项。具体的,主存储节点的本地数据库和备存储节点的本地数据库中,均可包括:Oracle、MySQL、MongoDB或Redis等中的一项或多项。
在一种可能的实现方式中,容器管理集群为Kubernetes集群。
第二方面,本申请提供一种数据存储方法,该方法应用于数据存储系统,数据存储系统包括存储集群,存储集群中包括两个存储节点,该两个存储节点分别为主存储节点和备存储节点。方法包括:主存储节点从容器管理集群中获取数据,将数据存储于主存储节点的本地数据库中,并向备存储节点发送数据;备存储节点将数据存储于备存储节点的本地数据库中。
在一种可能的实现方式中,主存储节点中还包括代理接口,主存储节点的代理接口与容器管理集群中的API server通信;主存储节点从容器管理集群中获取数据,将数据存储于主存储节点的本地数据库中,具体可包括:主存储节点的代理接口接收来自APIserver的第一请求,其中,第一请求包括待存储至主存储节点的本地数据库的数据;主存储节点的代理接口对第一请求进行协议转换,得到主存储节点的本地数据库支持的第二请求;以及将第二请求发送至主存储节点的本地数据库;主存储节点的本地数据库存储第二请求中包括的数据。
在一种可能的实现方式中,数据存储系统还包括仲裁节点,仲裁节点分别与主存储节点和备存储节点连接;仲裁节点监测主存储节点和备存储节点的工作状态;在主存储节点的工作状态由正常变为故障、且备存储节点的工作状态为正常时,仲裁节点将备存储节点切换为存储集群中的主存储节点。
在一种可能的实现方式中,存储集群为多个,数据存储系统还包括仲裁节点,仲裁节点分别与每个存储集群中的两个存储节点连接;仲裁节点监测每个存储集群中的两个存储节点的工作状态;在多个存储集群中,任一个存储集群中的主存储节点的工作状态由正常变为故障、且备存储节点的工作状态为正常时,仲裁节点可将该存储集群中的备存储节点切换为存储集群中的主存储节点。
在一种可能的实现方式中,仲裁节点将备存储节点切换为存储集群中的主存储节点,包括:仲裁节点向备存储节点发送切换指示,切换指示用于指示备存储节点切换为存储集群中的主存储节点;备存储节点根据切换指示切换为存储集群中的主存储节点。
在一种可能的实现方式中,本地数据库包括:Oracle、MySQL、MongoDB或Redis等中的一项或多项。具体的,主存储节点的本地数据库和备存储节点的本地数据库中,均可包括:Oracle、MySQL、MongoDB或Redis等中的一项或多项。
在一种可能的实现方式中,容器管理集群为Kubernetes集群。
第三方面,本申请提供一种数据存储装置,包括处理器,处理器与存储器相连,存储器用于存储计算机程序,处理器用于执行存储器中存储的计算机程序,以使得数据存储装置执行上述第二方面或第二方面的任意可能的实现方式中的方法。
第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序或指令,当计算机程序或指令被数据存储装置执行时,实现上述第二方面或第二方面的任意可能的实现方式中的方法。
第五方面,本申请提供一种计算机程序产品,该计算机程序产品包括计算机程序或指令,当该计算机程序或指令被数据存储装置执行时,数据存储装置实现上述第二方面或第二方面的任意可能的实现方式中的方法。
上述第二方面至第五方面中任一方面可以达到的技术效果可以参照上述第一方面中有益效果的描述,此处不再重复赘述。
附图说明
图1为本申请提供的一种系统架构示意图;
图2为本申请提供的一种数据存储系统的架构示意图;
图3为本申请提供的一种主备存储节点中代理接口的示意图;
图4为本申请提供的再一种数据存储系统的架构示意图;
图5为本申请提供的又一种数据存储系统的架构示意图;
图6为本申请提供的一种数据存储方法的流程示意图。
具体实施方式
下面将结合附图,对本申请实施例进行详细描述。
如图1为本申请示例性提供的一种系统架构图。示例性的,该系统中包括客户端、容器管理集群、计算集群和存储集群。
其中,容器管理集群可用于容器集群的自动化部署、扩容以及运维。示例性的,容器管理集群中可以包括应用程序编程接口(application programming interface,API)服务器(server)和控制器(controller)。API server可作为容器管理集群的对外接口,客户端、计算集群和存储集群等均可以通过该API server访问容器管理集群。
示例性的,API server可用于客户端向容器管理集群下发容器集创建请求。Controller可从API server中获取到容器集创建请求,根据容器集创建请求创建容器集(pod),并将容器集调度到工作节点中运行。其中,容器管理集群可以是Kubernetes集群。
计算集群中包括多个工作节点,其中,工作节点可以是物理机或者虚拟机(virtual machine,VM),工作节点可以部署于不同区域中,也可以使用不同的运营商网络。工作节点可基于controller的调度,在工作节点中运行容器集。
存储集群用于存储容器管理集群中的数据,存储集群可以是ETCD集群。
进一步的,存储集群中可包括N个存储节点,该N个存储节点可进一步包括主存储节点(可称为leader节点)和多个从存储节点(可称为follower节点)。存储集群中的N个节点可采用Raft共识算法进行集群选主(或选举)或者同步数据。
在选举过程中,存储集群中的一个follower节点确定在一个选举周期(electiontimeout)中未收到来自leader节点的心跳(heartbeat),则该follower节点发起选举流程:
follower节点将自己切换为候选(candidate)节点之后,向存储集群中其他follower节点发送请求,询问其是否选举自己成为leader节点。当candidate节点收到来自存储集群中(N/2+1)及以上节点数的接受投票后,该candidate节点切换为leader节点,开始接收保存容器管理集群中的数据,并向其他follower节点同步该数据。leader节点依靠定时向follower节点发送heartbeat来保持其地位。
此外,如果其他follower节点在election timeout期间都没有收到来自leader节点的headerbeat,同样会将自己的状态切换为candidate并发起选举。
在同步数据过程中,存储集群中leader节点接收到容器管理集群中的数据之后,可先记录该数据,然后通过heartbeat把该数据同步给follower节点。follower节点接收到该数据后记录该数据,并向leader节点发送肯定应答(acknowledgement,ACK)。当leader节点收到(N/2+1)及以上的follower节点发送的ACK后,leader节点将该数据设置为已提交,并持久化到本地数据库中。随后,leader节点在下个heartbeat中通知follower节点将该数据存储在自己的本地数据库中。
由于存储集群在选举或者同步数据中采用Raft共识算法,所以存储集群中需要部署2n+1个节点,或者理解,存储集群中需要部署至少3个节点,即N为大于或等于3的整数。而在节点数受限的场景下,可能无法保障存储集群中部署3个及以上的节点,相应的,存储集群无法运行Raft共识算法,以实现数据存储的高可用性。
为此,本申请提供一种数据存储系统,该数据存储系统中包括存储集群,该存储集群可用于存储容器管理集群中的数据,其中,存储集群可设置有两个节点,该两个节点分别称为是主存储节点和备存储节点,主存储节点和备存储节点可通过主备方式实现容器管理集群中数据存储的高可用性。
为方便描述,如下以容器管理集群为Kubernetes集群为例说明,当然容器管理集群还可以是Kubernetes集群以外的其他集群,本申请不限定。
如图2为本申请示例性提供的一种数据存储系统的架构示意图,其中,存储集群中包括主存储节点和备存储节点。主存储节点用于从存储集群对应的Kubernetes集群中获取数据(如下称为目标数据),将目标数据存储于主存储节点的本地数据库中。主存储节点还可将目标数据发送至备存储节点。相应的,备存储节点接收来自主存储节点的目标数据,将该目标数据同步至备存储节点的本地数据库中。
如此,实现该目标数据同时存储于主存储节点的本地数据库和备存储节点的本地数据库中。进一步的,主存储节点中的本地数据库可以理解为主数据库,备存储节点中的本地数据库可以理解为备数据库,本申请通过主备数据库方式,保障数据存储的高可用性。而且一个存储集群中可以只包括两个存储节点,降低存储节点的数量。
在一种可能的实现方式中,存储集群中主存储节点在获取到该Kubernetes集群的目标数据之后,可以将该目标数据按照键值对(key-value,K-V)的方式存储于主存储节点的本地数据库中。
可选的,在主存储节点的本地数据库中,每个key还可以对应于多个版本。举例来说,主存储节点第一次获取到(key1,value1),其中该(key1,value1)对应的版本是rev1,那么主存储节点可将rev1、(key1,value1)存储于主存储节点的本地数据库中。进一步的,主存储节点第二次获取到(key1,value1_new),其中该(key1,value1_new)对应的版本是rev2,那么主存储节点可再次将rev2、(key1,value1_new)存储于主存储节点的本地数据库中。
如此,Kubernetes集群在从主存储节点的本地数据库中查询数据时,可以输入请求的版本、key,查询得到对应的value,从而实现主存储节点的本地数据库中多版本并发控制。
进一步的,备存储节点中的本地数据库,可以实现与主存储节点中本地数据库相类似的存储机制。在主存储节点故障时,提供数据存储和查询服务。
进一步的,主存储节点中还可包括代理接口,该代理接口与Kubernetes集群中的API server通信。此外,备存储节点中也可包括代理接口,以用于在备存储节点切换为存储集群中的主存储节点时,可接收来自API server的请求,具体可参见下述主备切换的流程。
可参见图3示出的主备存储节点中代理接口的示意图。
主存储节点的代理接口可用于兼容ETCD的接口,并将Kubernetes集群中的请求翻译成主存储节点的本地数据库可解析的请求。理解为,由于本申请是将包括有主存储节点和备存储节点的存储集群替换了ETCD集群,而主存储节点从API server中获取的请求,仍然是符合ETCD集群接口的请求。为了实现主存储节点将请求中目标数据存储于本地数据库中,可以通过代理接口将来自Kubernetes集群的、该符合ETCD集群接口的请求,转化成符合本申请中主存储节点的本地数据库的接口的请求。
示例性的,主存储节点的本地数据库包括Oracle、MySQL、MongoDB或Redis等中的一项或多项。比如在主存储节点的本地数据库是MySQL时,主存储节点的代理接口将来自Kubernetes集群的、该符合ETCD集群接口的请求,转化成符合MySQL接口的请求。
在一个具体实现中,主存储节点中的代理接口可接收来自API server的第一请求,第一请求可以是写请求,该第一请求中包括待写入至主存储节点的本地数据库中的目标数据。该主存储节点的代理接口将该第一请求进行协议转换,得到主存储节点的本地数据库支持的第二请求,可以理解,第二请求与第一请求的区别在于协议格式不同,包含的目标数据是相同的。随后,主存储节点的代理接口可将第二请求发送至主存储节点的本地数据库。主存储节点的本地数据库将该第二请求中的目标数据进行存储。
示例性的,第一请求中包括的目标数据是key-value和key对应的版本。比如第一请求中包括(key1,value1_new),以及版本rev2,主存储节点的代理接口将该第一请求进行协议转换,从而得到第二请求,其中第二请求中仍然包括该(key1,value1_new),以及版本rev2。主存储节点的代理接口将该第二请求发送至主存储节点的本地数据库中,主存储节点的本地数据库存储该rev2(key1,value1_new)。
需要指出的是,API server可以将第一请求随机发送至主存储节点,或备存储节点。在主存储节点接收到该第一请求时,主存储节点确定自己是当前存储集群中的主存储节点,于是对第一请求进行协议转换以得到第二请求。
在备存储节点接收到该第一请求时,备存储节点确定自己不是当前存储集群中的主存储节点,将该第一请求转发至主存储节点,相应的,主存储节点接收到该第一请求并确定自己是当前存储集群中的主存储节点,对第一请求进行协议转换以得到第二请求。
此外,主存储节点中的代理接口可接收来自API server的第三请求,第三请求可以是读请求,该第三请求中包括待读取数据的索引信息。主存储节点的代理接口将该第三请求进行协议转换,从而得到主存储节点的本地数据库支持的第四请求,可以理解,第三请求与第四请求的区别在于协议格式不同,包含的待读取数据的索引信息是相同的。随后,主存储节点的代理接口可将第四请求发送至主存储节点的本地数据库。主存储节点的本地数据库根据第四请求中的索引信息,返回对应的数据。
示例性的,第三请求中包括的待读取数据的索引信息是key和key对应的版本。比如第三请求中包括key1和版本rev2,主存储节点的代理接口将该第三请求进行协议转换,从而得到第四请求,其中第四请求中仍然包括该key1和版本rev2。主存储节点的代理接口将该第四请求发送至主存储节点的本地数据库中,主存储节点的本地数据库根据该key1和版本rev2,查询并返回value1_new。
需要指出的是,API server可以将第三请求随机发送至主存储节点,或备存储节点。在主存储节点接收到该第三请求时,主存储节点确定自己是当前存储集群中的主存储节点,于是对第三请求进行协议转换以得到第四请求。
在备存储节点接收到该第三请求时,备存储节点确定自己不是当前存储集群中的主存储节点,将该第三请求转发至主存储节点,相应的,主存储节点接收到该第三请求并确定自己是当前存储集群中的主存储节点,对第三请求进行协议转换以得到第四请求。
在一种可能的实现方式中,主存储节点的本地数据库中存储的数据,具体可以是Kubernetes集群的容器集的数据,比如容器集的描述信息。API server还可通过主存储节点的代理接口,来监听主存储节点的本地数据库中key的变化,也即监听容器集的描述信息的变化。相应的,API server在监听到主存储节点的本地数据库中容器集的描述信息发生变化时,根据该发生变化的容器集的描述信息,对Kubernetes集群中管理的容器集做出管理,比如删除、拉起、调度容器集等。
可选的,存储集群中还可包括仲裁节点,该仲裁节点可分别与主存储节点和备存储节点连接,可参见图4示出的再一种数据存储系统的架构示意图。
该仲裁节点用于监测主存储节点和备存储节点的工作状态,其中工作状态可以是正常或故障。示例性的,仲裁节点可以通过周期性监测主存储节点的心跳(heartbeat),进而确定主存储节点的工作状态是否正常;同样的,仲裁节点周期性监测备存储节点的心跳,进而确定备存储节点的工作状态是否正常。
仲裁节点若确定主存储节点的工作状态由正常变为故障、且备存储节点的工作状态为正常时,将备存储节点切换为存储集群中的主存储节点。相应的,Kubernetes集群需要将目标数据存储于存储集群时,可将目标数据发送至该新的主存储节点,该新的主存储节点可以将目标数据进行存储,有助于保障整个存储系统中数据的高可用性。
可选的,仲裁节点可向备存储节点发送切换指示,切换指示用于指示备存储节点切换为存储集群中的主存储节点。相应的,备存储节点在接收到该切换指示之后,响应于该切换指示,将自己切换为所在存储集群中的主存储节点。
进一步的,仲裁节点只会在确定主存储节点的工作状态由正常变为故障、且备存储节点的工作状态为正常时,才会将备存储节点切换为存储集群中的主存储节点。由仲裁节点基于主备存储节点二者的工作状态,确定将由这两个存储节点中的哪个来作为主存储节点。如此,有助于避免主备存储节点相互监测导致的脑裂问题,解释为,在主备存储节点相互监测的过程中,若主备存储节点之间的数据链路断开(而主存储节点未故障),备存储节点可能误认为主存储节点故障而主动将自己切换为主存储节点,从而存在两个主存储节点的问题(即脑裂问题)。
本申请中,仲裁节点还可以部署于存储集群之外,也可以理解,存储系统中包括存储集群和仲裁节点。其中,仲裁节点可与已有节点合并部署,比如,仲裁节点与Kubernetes集群中的API server或controller合并部署;再比如,仲裁节点与计算集群中的工作节点合并部署。又或者,可以采用集群中的路由器等硬件作为仲裁节点。如此,可在不增加额外硬件的基础上,避免脑裂问题的出现。
为了扩展数据存储系统的规模,如图5提供又一种数据存储系统的架构示意图,其中,数据存储系统中部署M个存储集群(表示为存储集群1至存储集群M),每个存储集群中均包括主存储节点和备存储节点,M为大于或等于2的整数。进一步的,该数据存储系统中可包括一个仲裁节点,该仲裁节点分别与每个存储集群中的主存储节点和备存储节点连接,以监控每个存储集群中的主存储节点和备存储节点的工作状态。
示例性的,存储集群K包括主存储节点K和备存储节点K,其中,K取遍1至M之间的所有整数。仲裁节点分别监测主存储节点K和备存储节点K的工作状态,在某个监测周期中,仲裁节点若确定主存储节点K的工作状态由正常变为故障、且备存储节点K的工作状态为正常,则会指示备存储节点K切换为存储集群K中的主存储节点。
其中,仲裁节点指示备存储节点K切换为存储集群K中的主存储节点的实现方式,可参见上述单个存储集群的实现方式。
如此,有助于避免存储集群中出现脑裂问题。而且,该一个仲裁节点监测M个存储集群中每个存储集群的主存储节点和备存储节点的工作状态,比如M=3时,整个存储系统中仅需要包括1个仲裁节点和3对主备节点,共计7个节点,即可以完成存储系统的部署,可有助于进一步降低存储系统中的部署成本。且在存储集群的个数逐渐增大时,存储系统中节约的部署成本也相对越大。
进一步的,存储集群1至存储集群M中、各存储集群的主存储节点中的本地数据库,可组成主数据库;存储集群1至存储集群M中、各存储集群的备存储节点中的本地数据库,可组成备数据库。本申请将该目标数据同时存储于主数据库和备数据库中,通过主备数据库方式,保障数据存储的高可用性。
为方便描述,上述图4和图5中仅示例性标出存储集群中包括的主存储节点和备存储节点,进一步的,每个存储节点中也会包括本地数据库和代理接口。上述图2至图5中,Kubernetes集群中同样包括API server、controller等。
基于上述内容和相同构思,图6为本申请提供的一种数据存储方法的流程示意图。该数据存储方法可适用于图2至图5示出的数据存储系统中。
该数据存储方法包括:
步骤601,主存储节点的代理接口接收来自API server(API服务器)的第一请求,其中,第一请求中包括待写入至主存储节点的本地数据库中的目标数据。
步骤602,主存储节点的代理接口对第一请求进行协议转换,得到主存储节点的本地数据库支持的第二请求,其中,第二请求中包括目标数据。
步骤603,主存储节点的代理接口向主存储节点的本地数据库发送第二请求。
步骤604,主存储节点的本地数据库存储第二请求中的目标数据。
步骤605,主存储节点的本地数据库向备存储节点的本地数据库发送该目标数据。
步骤606,备存储节点的本地数据库存储该目标数据。
图6中未详细描述的步骤,均可参见图2至图5相关实施例中描述。
基于上述内容和相同构思,本申请提供一种数据存储装置,包括处理器,处理器与存储器相连,存储器用于存储计算机程序,处理器用于执行存储器中存储的计算机程序,以使得数据存储装置执行上述图6相关实施例中的方法。
基于上述内容和相同构思,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序或指令,当计算机程序或指令被数据存储装置执行时,实现上述图6相关实施例中的方法。
基于上述内容和相同构思,本申请提供一种计算机程序产品,该计算机程序产品包括计算机程序或指令,当该计算机程序或指令被数据存储装置执行时,数据存储装置实现上述图6相关实施例中的方法。
可以理解的是,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的保护范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (14)
1.一种数据存储系统,其特征在于,包括:
存储集群,所述存储集群中包括两个存储节点,所述两个存储节点分别为主存储节点和备存储节点;
所述主存储节点用于从容器管理集群中获取数据,将所述数据存储于所述主存储节点的本地数据库中,并向所述备存储节点发送所述数据;
所述备存储节点用于将所述数据存储于所述备存储节点的本地数据库中。
2.如权利要求1所述的系统,其特征在于,所述主存储节点的代理接口与所述容器管理集群中的接口服务器API server通信;
所述主存储节点的代理接口,用于将来自所述API server的第一请求进行协议转换,得到所述主存储节点的本地数据库支持的第二请求;以及将所述第二请求发送至所述主存储节点的本地数据库;
所述主存储节点的本地数据库,用于存储所述第二请求中包括的所述数据。
3.如权利要求1或2所述的系统,其特征在于,所述数据存储系统还包括仲裁节点,所述仲裁节点分别与所述主存储节点和所述备存储节点连接;
所述仲裁节点用于:
监测所述主存储节点和所述备存储节点的工作状态;
在确定所述主存储节点的工作状态由正常变为故障、且所述备存储节点的工作状态为正常时,将所述备存储节点切换为所述存储集群中的主存储节点。
4.如权利要求1或2所述的系统,其特征在于,所述存储集群为多个,所述数据存储系统还包括仲裁节点,所述仲裁节点分别与每个存储集群中的两个存储节点连接;
所述仲裁节点用于:
监测每个存储集群中的两个存储节点的工作状态;
在确定多个所述存储集群中,任一个存储集群中的主存储节点的工作状态由正常变为故障、且备存储节点的工作状态为正常时,将所述存储集群中的备存储节点切换为所述存储集群中的主存储节点。
5.如权利要求3或4所述的系统,其特征在于,所述仲裁节点将所述备存储节点切换为所述存储集群中的主存储节点时,具体用于向所述备存储节点发送切换指示,所述切换指示用于指示所述备存储节点切换为所述存储集群中的主存储节点;
所述备存储节点还用于根据所述切换指示,切换为所述存储集群中的主存储节点。
6.如权利要求1至5中任一项所述的系统,其特征在于,所述容器管理集群为Kubernetes集群。
7.一种数据存储方法,其特征在于,应用于数据存储系统,所述数据存储系统包括存储集群,所述存储集群中包括两个存储节点,所述两个存储节点分别为主存储节点和备存储节点;
所述方法包括:
所述主存储节点从容器管理集群中获取数据,将所述数据存储于所述主存储节点的本地数据库中,并向所述备存储节点发送所述数据;
所述备存储节点将所述数据存储于所述备存储节点的本地数据库中。
8.如权利要求7所述的方法,其特征在于,所述主存储节点的代理接口与所述容器管理集群中的接口服务器API server通信;
所述主存储节点从容器管理集群中获取数据,将所述数据存储于所述主存储节点的本地数据库中,包括:
所述主存储节点的代理接口接收来自所述API server的第一请求,对所述第一请求进行协议转换,得到所述主存储节点的本地数据库支持的第二请求;以及将所述第二请求发送至所述主存储节点的本地数据库;
所述主存储节点的本地数据库存储所述第二请求中包括的所述数据。
9.如权利要求7或8所述的方法,其特征在于,所述数据存储系统还包括仲裁节点,所述仲裁节点分别与所述主存储节点和所述备存储节点连接;
所述仲裁节点监测所述主存储节点和所述备存储节点的工作状态;
在所述主存储节点的工作状态由正常变为故障、且所述备存储节点的工作状态为正常时,所述仲裁节点将所述备存储节点切换为所述存储集群中的主存储节点。
10.如权利要求7或8所述的方法,其特征在于,所述存储集群为多个,所述数据存储系统还包括仲裁节点,所述仲裁节点分别与每个存储集群中的两个存储节点连接;
所述仲裁节点监测每个存储集群中的两个存储节点的工作状态;
在多个所述存储集群中,任一个存储集群中的主存储节点的工作状态由正常变为故障、且备存储节点的工作状态为正常时,所述仲裁节点将所述存储集群中的备存储节点切换为所述存储集群中的主存储节点。
11.如权利要求9或10所述的方法,其特征在于,所述仲裁节点将所述备存储节点切换为所述存储集群中的主存储节点,包括:
所述仲裁节点向所述备存储节点发送切换指示,所述切换指示用于指示所述备存储节点切换为所述存储集群中的主存储节点;
所述备存储节点根据所述切换指示切换为所述存储集群中的主存储节点。
12.如权利要求7至11中任一项所述的方法,其特征在于,所述容器管理集群为Kubernetes集群。
13.一种数据存储装置,其特征在于,包括处理器,所述处理器与存储器相连,所述存储器用于存储计算机程序,所述处理器用于执行所述存储器中存储的计算机程序,以使得所述装置执行如权利要求7至12中任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序或指令,当所述计算机程序或指令被数据存储装置执行时,实现如权利要求7至12中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210140120.6A CN116644119A (zh) | 2022-02-16 | 2022-02-16 | 一种数据存储系统及方法 |
PCT/CN2023/074711 WO2023155706A1 (zh) | 2022-02-16 | 2023-02-07 | 一种数据存储系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210140120.6A CN116644119A (zh) | 2022-02-16 | 2022-02-16 | 一种数据存储系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116644119A true CN116644119A (zh) | 2023-08-25 |
Family
ID=87577581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210140120.6A Pending CN116644119A (zh) | 2022-02-16 | 2022-02-16 | 一种数据存储系统及方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116644119A (zh) |
WO (1) | WO2023155706A1 (zh) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109729129B (zh) * | 2017-10-31 | 2021-10-26 | 华为技术有限公司 | 存储集群系统的配置修改方法、存储集群及计算机系统 |
CN109743199A (zh) * | 2018-12-25 | 2019-05-10 | 中国联合网络通信集团有限公司 | 基于微服务的容器化管理系统 |
CN109951525A (zh) * | 2019-02-18 | 2019-06-28 | 山东浪潮云信息技术有限公司 | 一种基于容器的云盘挂载系统及方法 |
CN110377395B (zh) * | 2019-07-03 | 2021-11-02 | 华云数据控股集团有限公司 | 一种Kubernetes集群中的Pod迁移方法 |
CN111176664A (zh) * | 2019-12-26 | 2020-05-19 | 中国电子科技网络信息安全有限公司 | 一种存储集群设置方法、装置、介质及设备 |
CN113127526A (zh) * | 2019-12-30 | 2021-07-16 | 中科星图股份有限公司 | 一种基于Kubernetes的分布式数据存储和检索系统 |
CN111522639B (zh) * | 2020-04-16 | 2022-11-01 | 南京邮电大学 | Kubernetes集群架构系统下多维资源调度方法 |
CN112015517B (zh) * | 2020-08-05 | 2024-03-29 | 北京链飞未来科技有限公司 | 一种基于k8s集群的区块链节点动态迁移方法和系统 |
-
2022
- 2022-02-16 CN CN202210140120.6A patent/CN116644119A/zh active Pending
-
2023
- 2023-02-07 WO PCT/CN2023/074711 patent/WO2023155706A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2023155706A1 (zh) | 2023-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11360854B2 (en) | Storage cluster configuration change method, storage cluster, and computer system | |
US9639588B2 (en) | Operation method and apparatus for data storage system | |
US11320991B2 (en) | Identifying sub-health object storage devices in a data storage system | |
EP3564835B1 (en) | Data redistribution method and apparatus, and database cluster | |
EP2643771B1 (en) | Real time database system | |
JP2014532921A (ja) | 高可用性クラスタにおけるスプリット・ブレイン耐性フェイルオーバ | |
GB2484086A (en) | Reliability and performance modes in a distributed storage system | |
KR100936238B1 (ko) | 파일 입출력과 복제의 균형적 수행을 위한 지연복제 시스템및 방법 | |
US11640261B2 (en) | Log processing method to avoid log collision, and related device and system | |
CN105760391B (zh) | 数据动态重分布的方法、数据节点、名字节点及系统 | |
CN115292408A (zh) | MySQL数据库的主从同步方法、装置、设备及介质 | |
CN109726211B (zh) | 一种分布式时序数据库 | |
CN113190620B (zh) | Redis集群之间数据的同步方法、装置、设备及存储介质 | |
CN106855869B (zh) | 一种实现数据库高可用的方法、装置和系统 | |
WO2015196692A1 (zh) | 一种云计算系统以及云计算系统的处理方法和装置 | |
JP2014016953A (ja) | 無共有型データベースシステム、同期装置、データベースサーバ、その同期方法および同期プログラム | |
CN116644119A (zh) | 一种数据存储系统及方法 | |
CN113905054B (zh) | 基于RDMA的Kudu集群数据同步方法、装置、系统 | |
JP5480046B2 (ja) | 分散トランザクション処理システム、装置、方法およびプログラム | |
US20240028611A1 (en) | Granular Replica Healing for Distributed Databases | |
EP3709173B1 (en) | Distributed information memory system, method, and program | |
CN113742336A (zh) | 一种数据处理方法及设备、存储介质 | |
CN112799835A (zh) | 一种分布式数据库系统元数据的处理方法及系统 | |
CN112667440A (zh) | 一种高可用MySQL的异地灾备方法 | |
CN115328880B (zh) | 分布式文件在线恢复方法、系统、计算机设备及存储介质 |
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 |