CN116263727A - 主备数据库集群及选主方法、计算设备及计算机存储介质 - Google Patents
主备数据库集群及选主方法、计算设备及计算机存储介质 Download PDFInfo
- Publication number
- CN116263727A CN116263727A CN202211293217.7A CN202211293217A CN116263727A CN 116263727 A CN116263727 A CN 116263727A CN 202211293217 A CN202211293217 A CN 202211293217A CN 116263727 A CN116263727 A CN 116263727A
- Authority
- CN
- China
- Prior art keywords
- node
- master
- main
- database
- standby
- 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
- 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/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种主备数据库集群及其选主方法、计算设备及计算机存储介质,包括:第一节点的第一选主组件定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;若否,则第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作;第二节点的第二选主组件定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,触发执行第二节点的备切主操作。本发明以分布式锁作为第三方选主逻辑,基于该逻辑在主备集群选主过程中进行自动化状态检测和主备切换,确保了持续监测和主备切换能力,提升了主备集群的健壮性及可用性。
Description
技术领域
本发明涉及数据库技术领域,具体涉及一种主备数据库集群及其选主方法、计算设备及计算机存储介质。
背景技术
随着云原生技术的发展,数据库上云已经成为一种趋势,在容器环境下,主备架构数据库集群的高可用性面临更多的挑战。容器的弹性特性以及容器网络的波动性很容易导致数据库集群挂掉或者出现脑裂,并且对数据库集群进行自动检测及主动修复也会面临更多的难度。比如,当Kubernetes内部DNS解析出现问题时,主备间的网络将会阻塞,备节点误以为主节点已经挂掉而将自己提升为主节点,进而导致脑裂的发生。
当前常用的容器化方法是基于Kubernetes内置的StatefulSet资源实现,StatefulSet用于实现有状态的应用。例如,在启动MySQL主备集群的yaml(YAML Ain'tMarkup Language,简称yaml,一种数据序列化语言,可配合大多数编程语言使用,多应用于编写配置文件)文件中,通常会定义一系列包括检测数据库实例状态以及进行主备切换的脚本等,当达到预设的条件时则触发相对应的脚本,在一定程度上保证了主备集群的高可用性。
然而,现有技术中数据库集群在主备切换方面仍存在以下问题:一是容易出现脑裂,由于没有第三方的选举机制,当主备节点网络连通性出现问题时,备节点会认为主节点已经挂掉了,则触发备升主逻辑,而实际上主节点还在继续提供服务,从而造成“双主”的问题,导致数据库集群异常;二是脚本的“一次性”,由于触发条件以及达到条件后的执行脚本都固化在yaml文件中,当达到触发条件后,集群将按序执行脚本,当执行结束后,由于主备节点发生了切换,原有的脚本将不再使用,无法达到持续使用的效果,如果再次出现异常,则需要进行人工处理;三是切换过程不可回退,在大多数场景下,备升为主的流程所消耗的时间比原来主节点重新启动要长,由于脚本一旦执行将不可逆,直到操作完成,因此,当发现原主启动后,备升主的操作并不能自动终止,导致主备切换过程不可回退;四是容易误判,容器网络的复杂性以及波动性有时会导致脚本的误判,从而错误的触发了主备切换流程,增加了集群不可服务时间。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述数据库集群在主备切换过程中存在的健壮性及可用性问题的主备数据库集群及其选主方法、计算设备及计算机存储介质。
根据本发明的一个方面,提供了一种主备数据库集群的选主方法,所述方法包括:
第一节点的第一选主组件定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;若否,则所述第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作;
第二节点的第二选主组件定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,触发执行第二节点的备切主操作。
在一种可选的方式中,在所述第一节点杀掉数据库进程,并以只读方式重启数据库进程之后,所述方法还包括:
所述第一节点的第一选主组件检查集群是否产生新的主节点;
则所述触发执行第一节点的主切备操作具体包括:若所述第一节点的第一选主组件检查集群产生新的主节点,则触发执行所述第一节点的主切备操作;
则在所述以只读方式重启数据库进程之后,所述方法还包括:若所述第一节点的第一选主组件检查集群没有产生新的主节点,则尝试获取资源锁并执行作为主节点的操作。
在一种可选的方式中,所述触发执行第一节点的主切备操作进一步包括:
将第一节点的数据库设置为只读方式;
执行与切换为主节点的第二节点建立主备关系的操作。
在一种可选的方式中,在所述触发执行第二节点的备切主操作之前,所述方法还包括:
执行备切主的准备操作。
在一种可选的方式中,所述执行备切主的准备操作进一步包括:
关闭主备之间的复制操作;
清空主备配置信息;
根据数据库日志确保和所述第一节点的数据库保持一致。
在一种可选的方式中,在所述执行备切主的准备操作之后还包括:
再次判断当前时间与续约时间的时间差是否超过第二预设时间阈值;
若是,则执行第二节点的备切主操作;
若否,则重新将所述第二节点作为备节点并连接新的主节点。
在一种可选的方式中,所述第二预设时间阈值大于第一预设时间阈值。
根据本发明的另一方面,提供了一种主备数据库集群,包括:第一节点和第二节点;
其中,所述第一节点包括:
第一选主组件,用于定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;
第一数据库组件,用于若判断出续约操作没有在第一预设时间阈值内成功,则杀掉数据库进程,并以只读方式重启数据库进程;触发执行第一节点的主切备操作;
所述第二节点包括:
第二选主组件,用于定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值;
第二数据库组件,用于若判断出当前时间与续约时间的时间差超过第二预设时间阈值,触发执行第二节点的备切主操作。
根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述主备数据库集群的选主方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述主备数据库集群的选主方法对应的操作。
根据本发明提供的方案,第一节点的第一选主组件定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;若否,则所述第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作;第二节点的第二选主组件定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,触发执行第二节点的备切主操作。本发明实现了以分布式锁作为第三方选主逻辑,基于该第三方选主逻辑在主备数据库集群选主过程中进行自动化状态检测和主备切换,确保了持续监测和主备切换能力,在主备切换过程中提升了主备集群的健壮性及可用性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1a示出了本发明实施例的主备数据库集群的选主方法中主切备的流程示意图;
图1b示出了本发明实施例的主备数据库集群的选主方法中备切主的流程示意图;
图2a示出了本发明另一个实施例的主备数据库集群的选主方法中主切备的流程示意图;
图2b示出了本发明另一个实施例的主备数据库集群的选主方法中备切主的流程示意图;
图3示出了本发明又一个实施例的主备数据库集群的选主方法的流程示意图;
图4示出了本发明实施例的主备数据库集群的结构示意图;
图5示出了本发明实施例的计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
在实施本发明实施例之前,对下文中涉及的技术术语在此进行统一解释:
Kubernetes:又称K8s,提供了应用部署、规划、更新及维护的一种机制,可实现容器集群的自动化部署、自动扩缩容、维护等功能,通常用于管理云平台中多个主机上的容器化的应用,在Kubernetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器。
ETCD:是一个分布式一致性键值存储系统,提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据,通常用于共享配置和服务发现。在K8s中,ETCD作为K8s默认的存储系统,用于保存所有的集群数据。
Pod:是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod是一个容器环境下的“逻辑主机”,一个Pod可封装一个或多个应用容器。
Leader Election机制:是Kubernetes的一种主从选主方式或机制,当每个实例启动时,都尝试抢占锁资源,抢到锁的实例则成为主节点身份或地位,主节点定期更新当前时间戳,如果主节点未能在给定的时间间隔内更新时间戳则认为其已经失联,此时其它实例以抢占的方式获得锁资源并成为新的主节点。
图1a示出了本发明实施例的主备数据库集群的选主方法中主切备的流程示意图,图1b示出了本发明实施例的主备数据库集群的选主方法中备切主的流程示意图。本方法将选主机制和数据库主备切换逻辑进行结合,形成选主组件(Leader组件),在数据库集群启动时,将选主组件和数据库进程放置在同一个节点中,由主备节点的Leader组件与分布式锁交互,以共同维护资源锁的方式进行主备切换,包括主切备操作和备切主操作,主切备和备切主为两个并列的操作,二者相互联系、密切配合共同完成主备数据库集群主备切换操作。主切备操作执行主节点成为备节点的步骤,备切主操作执行备节点成为新的主节点的步骤。在主切备操作中,第一选主组件定期执行资源锁的续约操作,如果续约不成功则触发第一节点的主切备操作。在备切主操作中,第二选主组件定期轮询资源锁的续约时间,若当前时间与续约时间的时间差超过预设时间阈值,则触发第二节点的备切主操作。具体地,如图1a所示,主备数据库集群的选主方法中主切备的操作包括以下步骤:
步骤A101:第一节点的第一选主组件定期执行资源锁的续约操作。
数据库集群启动后,数据库主备节点也相应启动,可人工选定或随机初始化一个主节点,本实施例中将当前数据库集群中为主节点的节点称为第一节点,将选主组件(称为第一选主组件)部署于第一节点并作为竞争实体。由此,第一选主组件和第一节点的数据库主服务程序/进程设置于同一个主节点即第一节点中。
本实施例基于Leader Election机制,为了保障数据库主备数据资源的一致性,定义分布式资源锁并通过资源锁的方式更新资源,保证在并发更新资源时数据库主备资源只能被更新一次,并定期更新分布式资源锁以实现主节点的选举。对于拥有分布式资源锁的主节点,主节点通过执行资源锁的续约操作可持续保持其主节点地位或角色。
步骤A102:判断续约操作是否在第一预设时间阈值内成功,若是,则执行步骤A103;若否,则执行步骤A104。
第一节点的第一选主组件判断续约操作是否在第一预设时间阈值内成功,若在第一预设时间阈值内续约操作成功,则表明第一节点尝试获取锁成功,可持续保持其主节点地位或角色;若在第一预设时间阈值内续约操作未成功,意味着第一节点的网络出现异常,将不再尝试续约操作。需要说明的是,第一预设时间阈值可以是续约超时时间(如10秒),下文中的第二预设时间阈值可以是租约时间(如15秒);第二预设时间阈值可以略大于第一预设时间阈值,即,租约时间略大于续约超时时间,以便于后续在第一节点重启数据库进程后,仍有机会重新获取到资源锁。
步骤A103:将资源锁的续约时间更新为当前时间。
将资源锁的续约时间更新为当前时间,保证并发更新资源锁时被更新一次,结合定期更新资源锁的续约时间方式实现主节点的选举制。在步骤A103之后,继续执行步骤A101。
步骤A104:第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作。
当第一节点续约操作失败后,第一节点杀掉或重启数据库进程,并以只读方式重启数据库进程,以保证主备切换过程中数据库的一致性,以及,触发执行第一节点的主切备操作。需要说明的是,可以在第一节点杀掉数据库进程之后或同时以只读方式重启数据库进程。
对于数据库主备切换,当数据库主库宕机或异常时,切断数据库主库的流量并查看数据库备库的复制状态,然后将数据库主库转为备库完成主切备切换,即将数据库流量切向新的主库。
如图1b所示,主备数据库集群的选主方法中备切主的操作包括以下步骤:
步骤B101:第二节点的第二选主组件定期轮询资源锁的续约时间。
对于备节点(称为第二节点),将选主组件(称为第二选主组件)部署在各个第二节点,第二选主组件和第二节点的数据库备服务程序/进程设置于同一个备节点即第二节点中。
具体地,第二选主组件通过定期轮询或心跳方式检查分布式资源锁信息中的续约时间。
步骤B102:判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,则执行步骤B103;若否,则执行步骤B101。
判断当前时间与分布式资源锁信息中续约时间的时间差是否超过第二预设时间阈值,若超过,则执行步骤B103;若未超过,则表示第一节点(即主节点)的租约未过期,继续执行步骤B101。
步骤B103:触发执行第二节点的备切主操作。
主节点宕机或异常时备节点切换为主节点,对于数据库主备的切换,即将备库切换为主库,通常需要核验或追加数据以解决部分主库数据没有完全同步至备库的问题。
本发明上述实施例提供的方案,第一节点的第一选主组件定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;若否,则所述第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作;第二节点的第二选主组件定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,触发执行第二节点的备切主操作。本发明基于第三方选主逻辑在主备数据库集群选主过程中进行自动化状态检测和主备切换,确保了持续监测和主备切换能力,在主备切换过程中提升了主备集群的健壮性及可用性,并降低了主备切换的时间。
图2a示出了本发明另一个实施例的主备数据库集群的选主方法中主切备的流程示意图。在本实施例的主切备操作过程中,第一节点续约操作失败、重启数据库进程后,先检查集群内是否有新的主节点产生,根据检查结果确定是否执行主切备操作。具体地,如图2a所示,该方法包括以下步骤:
步骤A201:第一节点的第一选主组件定期执行资源锁的续约操作。
本实施例中,主备节点的选主组件启动后,检查所在节点数据库进程状态,如果没有启动则轮询等待。如果数据库进程启动成功,进入下一步。启动监听服务,用于检测并记录数据库进程状态。初始化一个主节点作为竞争实体,以分布式资源锁的ID作为唯一标识,同时指定租约时间(即第二预设时间阈值,如15s)、续约超时时间(即第一预设时间阈值,如10s)以及重试时间(如1s)等参数。被选为主节点的第一节点每隔1s执行资源锁的续约操作。
步骤A202:判断续约操作是否在第一预设时间阈值内成功,若是,则执行步骤A203;若否,则执行步骤A204。
第一节点的第一选主组件若判断出续约操作在上述续约超时时间内成功,则表明第一节点尝试获取锁成功,可持续保持其主节点地位或角色;若判断出续约操作在上述续约超时时间内未成功,意味着第一节点的网络出现异常,将不再尝试续约操作,进一步的当超过租约时间后,租约将失效。
可选地,所述第二预设时间阈值大于第一预设时间阈值,即租约时间略大于续约超时时间。后续在第一节点重启数据库进程后,仍有机会重新获取到资源锁,继续以主节点的角色响应服务,由此提升了主备集群的健壮性。
步骤A203:将资源锁的续约时间更新为当前时间。
更新分布式资源锁,将分布式资源锁信息中的续约时间更新为当前时间,表明当前时间该分布式资源锁处于占有状态。在步骤A203之后,继续执行步骤A201。
步骤A204:第一节点杀掉数据库进程,并以只读方式重启数据库进程。
第一节点杀掉或重启数据库进程,并以只读方式重启数据库进程,以保证主备切换过程中数据库的一致性。
步骤A205:第一节点的第一选主组件检查集群是否产生新的主节点。
第一节点的第一选主组件检查集群是否产生新的主节点,以避免在主备数据库集群中出现了两个“大脑”(即主节点)而产生所谓的“脑裂”现象。“脑裂”是指在主备集群中由于出现两个主节点同时提供服务而导致主备节点之间的数据不一致性。若所述第一节点的第一选主组件检查集群产生新的主节点,则触发执行所述第一节点的主切备操作;若没有产生新的主节点,则尝试获取资源锁并执行作为主节点的操作。
步骤A206:触发执行第一节点的主切备操作。
触发执行所述第一节点的主切备操作,即由主节点自动回退到备节点,可降低主备切换的时间,第一节点的主切备操作具体包括:将第一节点的数据库设置为只读方式以及执行与切换为主节点的第二节点建立主备关系的操作。
步骤A207:尝试获取资源锁并执行作为主节点的操作。
若所述第一节点的第一选主组件检查集群没有产生新的主节点,则尝试获取资源锁并执行作为主节点的操作,在第一节点出现异常情况后进行重启,并在尝试获取资源锁成功后,继续作为主节点响应服务,确保主备集群持久的工作,提升了集群的健壮性。
本发明上述实施例提供的方案,在第一节点杀掉数据库进程,并以只读方式重启数据库进程之后,第一节点的第一选主组件检查集群是否产生新的主节点,若否,则尝试获取资源锁并执行作为主节点的操作;若是,则执行第一节点的主切备操作。本发明通过检查集群是否产生新的主节点,可避免在主备数据库集群中出现“脑裂”现象;当产生新的主节点时执行主切备操作,主节点自动回退到备节点,降低了主备切换的时间;当没有产生新的主节点,则尝试获取资源锁并执行作为主节点的操作,以确保主备集群持久工作,提升了集群的健壮性。
图2b示出了本发明另一个实施例的主备数据库集群的选主方法中备切主的流程示意图。具体地,如图2b所示,该方法包括以下步骤:
步骤B201:第二节点的第二选主组件定期轮询资源锁的续约时间。
备节点(第二节点)的选主组件(第二选主组件)定期轮询检查分布式资源锁信息中的续约时间。
步骤B202:判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,则执行步骤B203;若否,则执行步骤B201。
判断当前时间与分布式资源锁信息中续约时间的时间差是否超过上述租约时间,若超过,则执行步骤B203;若未超过,则表示第一节点(即主节点)的租约未过期,继续执行步骤B201。
步骤B203:执行备切主的准备操作。
执行备切主的准备操作,包括关闭主备之间的复制操作、清空主备配置信息以及根据数据库日志确保和第一节点的数据库保持一致。
具体地,关闭主备之间的复制操作,以停止主备数据库之间的数据库复制操作,包括主备之间的异步复制、多线程复制以及半同步复制操作;
清空主备配置信息,包括清除主节点的主备配置信息和备节点的配置信息;
根据数据库日志确保和所述第一节点(即原主节点)的数据库保持一致,由于主备节点数据库的完整性依赖于数据库日志,可以通过数据库日志把丢失的部分数据同步至备节点数据库,具体地,对数据库日志进行分析,获取差异的数据、已经执行的数据以及未写入数据并进行相应的数据库操作以解决主备数据库不一致的问题。
步骤B204:再次判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,则执行步骤B205;若否,则执行步骤B206。
在执行备切主的准备操作之后,并不立即进行备切主的操作,而是再次判断当前时间与分布式资源锁信息中的续约时间的时间差是否超过上述租约时间,通过以再次或二次确认的方式进行备切主操作,充分考虑了原主节点的一些优质服务特性(如硬件、网络、安全及稳定性等)以及主备切换的资源开销或业务影响,尽量对主备数据库集群高可用性的影响降低至最小。
步骤B205:执行第二节点的备切主操作。
执行所述第二节点的主切备操作,即由备节点自动切换为主节点。
步骤B206:重新将第二节点作为备节点并连接新的主节点。
主节点的租约未过期或已经有了新的主节点产生,则不进行主备切换,重新将第二节点作为备节点并连接新的主节点。
本发明上述实施例提供的方案,在执行备切主的准备操作之后,再次判断当前时间与续约时间的时间差是否超过第二预设时间阈值,即当备节点具备成为新的主节点条件之后,并不立即进行备切主的操作,而是再次判断当前时间与分布式资源锁信息中的续约时间的时间差是否超过第二预设时间阈值。本发明通过以再次或二次确认的方式进行备切主操作,对主备数据库集群高可用性的影响降低至最小,实现了主备切换动作的最小化。
图3示出了本发明又一个实施例的主备数据库集群的选主方法的流程示意图。本方法基于Kubernetes的Leader Election机制实现第三方选主逻辑,并引入分布式资源锁实现主备数据库集群的选主方法。并以MySQL数据库为例,将Leader Election机制和MySQL主备切换逻辑进行结合形成选主组件Leader,在MySQL数据库集群启动时,选主组件Leader作为一个单独的容器(container)和MySQL容器(container)放置在同一个Pod中,由主备节点的选主组件Leader和ETCD交互,共同维护一个分布式资源锁(锁),包括主切备流程(Master流程)和备切主流程(Slave流程)。
在一种可选的方式中,MySQL数据库集群的启动阶段详细流程如下:
步骤一:主备节点选主组件Leader启动后,检查所在节点的MySQL数据库进程的启动状态,如果没有启动则轮询等待;如果MySQL数据库进程启动成功,则进入步骤二。
步骤二:启动监听服务,用于检测并记录数据库进程状态。例如,启动检测(如health)服务监听MySQL端口(如9001端口)的进程状态,当MySQL进程启动则置为真(true),否则置为假(false)。
步骤三:初始化一个LeaderElector作为竞争实体,以自身ID作为唯一标识,同时指定租约时间(如15秒)、续约超时时间(如10秒)、重试时间(如1秒)等参数。
步骤四:数据库实例Pod默认以00和01结尾,Pod第一次启动默认以00作为主节点,因此,01节点轮询等待00节点获取锁称为leader之后,执行后续步骤。
步骤五:默认00节点执行成为master的操作。
可选地,步骤五进一步包括以下步骤:
尝试获取锁,若获得则继续,若未获得则继续执行轮询操作,获取之后,分布式锁的信息如表1所示:
表1
执行成为master的SQL操作。
执行renew操作,更新租约,以持续保持leadership地位。
步骤六:01节点经过步骤四检查到00节点已经获取到锁之后,开始执行成为slave的操作。
可选地,步骤六进一步包括以下步骤:
将自己设置为只读状态。
执行SQL语句与master建立主从关系。
检查租约状态,判断自己是否可以获得锁。
进一步的,参见图3所示的过程检测及主备切换详细流程,对拥有锁的master节点来说:
步骤一:每秒钟执行renew操作,更新分布式锁,将renewTime更新为当前时间。
步骤二:如renew操作超过10秒还未成功,意味着该节点网络发生问题,将不再尝试执行renew操作,这意味着超过15s后,租约将失效。
步骤三:节点杀掉(kill)mysqld进程,并自我退出。
步骤四:Kubernetes重新拉起服务之后,mysqld进程将以只读方式重新启动。
步骤五:leader组件重启后尝试重新检查集群是否有新的leader产生。
可选地,步骤五进一步包括以下步骤:
如已经有新的leader产生,则执行启动过程上述步骤六操作。
如发现没有新的leader产生,意味着当前还没有新的主节点,则尝试获取锁并执行成为master的操作。
进一步的,对于备节点来说:
步骤一:每隔1秒轮询检查分布式锁信息。
步骤二:检查其中的renewTime。
可选地,步骤二进一步包括以下步骤:
如果renewTime和当前时间相比未超过15秒,意味着leader节点租约未过期,则退出,轮询操作步骤二。
如果超过15秒,则表示当前没有节点获得锁。备节点认为主节点可能发生了异常,则执行下一步。
步骤三:执行备升主的准备操作。
可选地,步骤三进一步包括以下步骤:
关闭备升主的准备操作。
清空主从配置信息。
应用binlog日志,确保和原主节点数据库保持一致。
步骤四:具备了成为主节点的条件之后,并不立即进行备升主操作,而是再次尝试获取资源锁。
可选地,步骤四进一步包括以下步骤:
如果获取到锁,则确定当前没有新的主节点产生,开始执行备升主操作。
如果没有获取到资源锁,说明已经有了新的主节点产生,则重新将自身作为备节点连向新的主节点。
步骤五:主备切换结束,新的主节点和备节点按上述逻辑继续检测。
本发明上述实施例提供的方案,本方法基于Kubernetes的Leader Election机制实现第三方选主逻辑,并引入分布式资源锁实现主备数据库集群的选主方法。将LeaderElection机制和数据库主备切换逻辑进行结合形成选主组件Leader,选主组件Leader作为一个单独的容器和数据库容器放置在同一个Pod中,由主备节点的选主组件Leader和ETCD交互,共同维护一个分布式资源锁(锁)。本发明基于第三方选主逻辑在主备数据库集群选主过程中进行自动化状态检测和主备切换,确保了持续监测和主备切换能力,在主备切换过程中提升了主备集群的健壮性及可用性,并降低了主备切换的时间。
图4示出了本发明实施例的主备数据库集群的结构示意图。主备数据库集群400包括第一节点401和第二节点402;其中,所述第一节点401包括:第一选主组件4011和第一数据库组件4012;所述第二节点402包括:第二选主组件4021和第二数据库组件4022。
所述第一选主组件4011,用于定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;
所述第一数据库组件4012,用于若判断出续约操作没有在第一预设时间阈值内成功,则杀掉数据库进程,并以只读方式重启数据库进程;触发执行第一节点的主切备操作;
所述第二选主组件4021,用于定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值;
所述第二数据库组件4022,用于若判断出当前时间与续约时间的时间差超过第二预设时间阈值,触发执行第二节点的备切主操作。
在一种可选的方式中,所述第一选主组件4011进一步用于:
检查集群是否产生新的主节点,若是,则触发执行所述第一节点的主切备操作;若否,则尝试获取资源锁并执行作为主节点的操作。
在一种可选的方式中,所述第一数据库组件4012进一步用于:
将第一节点的数据库设置为只读方式;
执行与切换为主节点的第二节点建立主备关系的操作。
在一种可选的方式中,所述第二数据库组件4022进一步用于:
执行备切主的准备操作。
在一种可选的方式中,所述第二数据库组件4022进一步用于:
关闭主备之间的复制操作;
清空主备配置信息;
根据数据库日志确保和所述第一节点的数据库保持一致。
在一种可选的方式中,所述第二选主组件4021进一步用于:
再次判断当前时间与续约时间的时间差是否超过第二预设时间阈值;
若是,则所述第二数据库组件4022执行第二节点的备切主操作;
若否,则所述第二数据库组件4022重新将所述第二节点作为备节点并连接新的主节点。
在一种可选的方式中,所述第二预设时间阈值大于第一预设时间阈值。
本发明上述实施例提供的方案,第一节点的第一选主组件定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;若否,则所述第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作;第二节点的第二选主组件定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,触发执行第二节点的备切主操作。本发明基于第三方选主逻辑在主备数据库集群选主过程中进行自动化状态检测和主备切换,确保了持续监测和主备切换能力,在主备切换过程中提升了主备集群的健壮性及可用性,并降低了主备切换的时间。
图5示出了本发明计算设备实施例的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图5所示,该计算设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。
其中:处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。处理器502,用于执行程序510,具体可以执行上述用于主备数据库集群的选主方法实施例中的相关步骤。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序510具体可以用于使得处理器502执行以下操作:
第一节点的第一选主组件定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;若否,则所述第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作;
第二节点的第二选主组件定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,触发执行第二节点的备切主操作。
在一种可选的方式中,在所述第一节点杀掉数据库进程,并以只读方式重启数据库进程之后,所述程序510使所述处理器执行以下操作:
所述第一节点的第一选主组件检查集群是否产生新的主节点;
若所述第一节点的第一选主组件检查集群产生新的主节点,则触发执行所述第一节点的主切备操作;
则在所述以只读方式重启数据库进程之后,若所述第一节点的第一选主组件检查集群没有产生新的主节点,则尝试获取资源锁并执行作为主节点的操作。
在一种可选的方式中,所述程序510使所述处理器执行以下操作:
将第一节点的数据库设置为只读方式;
执行与切换为主节点的第二节点建立主备关系的操作。
在一种可选的方式中,在所述触发执行第二节点的备切主操作之前,所述程序510使所述处理器执行以下操作:
执行备切主的准备操作。
在一种可选的方式中,所述程序510使所述处理器执行以下操作:
关闭主备之间的复制操作;
清空主备配置信息;
根据数据库日志确保和所述第一节点的数据库保持一致。
在一种可选的方式中,在所述执行备切主的准备操作之后,所述程序510使所述处理器执行以下操作:
再次判断当前时间与续约时间的时间差是否超过第二预设时间阈值;
若是,则执行第二节点的备切主操作;
若否,则重新将所述第二节点作为备节点并连接新的主节点。
在一种可选的方式中,所述第二预设时间阈值大于第一预设时间阈值。
本发明上述实施例提供的方案,第一节点的第一选主组件定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;若否,则所述第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作;第二节点的第二选主组件定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,触发执行第二节点的备切主操作。本发明基于第三方选主逻辑在主备数据库集群选主过程中进行自动化状态检测和主备切换,确保了持续监测和主备切换能力,在主备切换过程中提升了主备集群的健壮性及可用性,并降低了主备切换的时间。
本发明实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的主备数据库集群的选主方法。
在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。
Claims (10)
1.一种主备数据库集群的选主方法,其特征在于,所述方法包括:
第一节点的第一选主组件定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;若否,则所述第一节点杀掉数据库进程,并以只读方式重启数据库进程,触发执行第一节点的主切备操作;
第二节点的第二选主组件定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值,若是,触发执行第二节点的备切主操作。
2.根据权利要求1所述的方法,其特征在于,在所述第一节点杀掉数据库进程,并以只读方式重启数据库进程之后,所述方法还包括:
所述第一节点的第一选主组件检查集群是否产生新的主节点;
则所述触发执行第一节点的主切备操作具体包括:
若所述第一节点的第一选主组件检查集群产生新的主节点,则触发执行所述第一节点的主切备操作;
则在所述以只读方式重启数据库进程之后,所述方法还包括:若所述第一节点的第一选主组件检查集群没有产生新的主节点,则尝试获取资源锁并执行作为主节点的操作。
3.根据权利要求1所述的方法,其特征在于,所述触发执行第一节点的主切备操作进一步包括:
将第一节点的数据库设置为只读方式;
执行与切换为主节点的第二节点建立主备关系的操作。
4.根据权利要求1所述的方法,其特征在于,在所述触发执行第二节点的备切主操作之前,所述方法还包括:
执行备切主的准备操作。
5.根据权利要求4所述的方法,其特征在于,所述执行备切主的准备操作进一步包括:
关闭主备之间的复制操作;
清空主备配置信息;
根据数据库日志确保和所述第一节点的数据库保持一致。
6.根据权利要求4所述的方法,其特征在于,在所述执行备切主的准备操作之后还包括:
再次判断当前时间与续约时间的时间差是否超过第二预设时间阈值;
若是,则执行第二节点的备切主操作;
若否,则重新将所述第二节点作为备节点并连接新的主节点。
7.根据权利要求1所述的方法,其特征在于,所述第二预设时间阈值大于第一预设时间阈值。
8.一种主备数据库集群,其特征在于,包括:第一节点和第二节点;
其中,所述第一节点包括:
第一选主组件,用于定期执行资源锁的续约操作,判断续约操作是否在第一预设时间阈值内成功,若是,则将资源锁的续约时间更新为当前时间;
第一数据库组件,用于若判断出续约操作没有在第一预设时间阈值内成功,则杀掉数据库进程,并以只读方式重启数据库进程;触发执行第一节点的主切备操作;
所述第二节点包括:
第二选主组件,用于定期轮询资源锁的续约时间,判断当前时间与续约时间的时间差是否超过第二预设时间阈值;
第二数据库组件,用于若判断出当前时间与续约时间的时间差超过第二预设时间阈值,触发执行第二节点的备切主操作。
9.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7中任一项所述的主备数据库集群的选主方法对应的操作。
10.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-7中任一项所述的主备数据库集群的选主方法对应的操作。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211293217.7A CN116263727A (zh) | 2022-10-21 | 2022-10-21 | 主备数据库集群及选主方法、计算设备及计算机存储介质 |
PCT/CN2023/126010 WO2024083259A1 (zh) | 2022-10-21 | 2023-10-23 | 主备数据库集群及选主方法、计算设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211293217.7A CN116263727A (zh) | 2022-10-21 | 2022-10-21 | 主备数据库集群及选主方法、计算设备及计算机存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116263727A true CN116263727A (zh) | 2023-06-16 |
Family
ID=86722781
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211293217.7A Pending CN116263727A (zh) | 2022-10-21 | 2022-10-21 | 主备数据库集群及选主方法、计算设备及计算机存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116263727A (zh) |
WO (1) | WO2024083259A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024083259A1 (zh) * | 2022-10-21 | 2024-04-25 | 中移(苏州)软件技术有限公司 | 主备数据库集群及选主方法、计算设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106856489B (zh) * | 2015-12-08 | 2020-09-08 | 阿里巴巴集团控股有限公司 | 一种分布式存储系统的服务节点切换方法和装置 |
CN113497737A (zh) * | 2021-05-13 | 2021-10-12 | 曙光信息产业(北京)有限公司 | 系统拓扑结构维护方法、装置、计算机设备和存储介质 |
CN114238495A (zh) * | 2021-11-25 | 2022-03-25 | 中国建设银行股份有限公司 | 数据库主备集群切换方法、装置、计算机设备及存储介质 |
CN114860848A (zh) * | 2022-07-06 | 2022-08-05 | 北京奥星贝斯科技有限公司 | 分布式数据库系统的选主方法及装置 |
CN116263727A (zh) * | 2022-10-21 | 2023-06-16 | 中移(苏州)软件技术有限公司 | 主备数据库集群及选主方法、计算设备及计算机存储介质 |
-
2022
- 2022-10-21 CN CN202211293217.7A patent/CN116263727A/zh active Pending
-
2023
- 2023-10-23 WO PCT/CN2023/126010 patent/WO2024083259A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024083259A1 (zh) * | 2022-10-21 | 2024-04-25 | 中移(苏州)软件技术有限公司 | 主备数据库集群及选主方法、计算设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2024083259A1 (zh) | 2024-04-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109639794B (zh) | 一种有状态集群恢复方法、装置、设备及可读存储介质 | |
JP6615796B2 (ja) | マルチテナントアプリケーションサーバ環境におけるパーティションマイグレーションのためのシステムおよび方法 | |
US20180143854A1 (en) | Methods, systems and apparatus to perform a workflow in a software defined data center | |
JP2016508647A5 (zh) | ||
WO2014190486A1 (zh) | 支持多核架构下资源隔离的方法及系统 | |
WO2018095414A1 (zh) | 虚拟机故障的检测和恢复方法及装置 | |
CN108874549B (zh) | 资源复用方法、装置、终端和计算机可读存储介质 | |
CN112104727B (zh) | 一种精简高可用Zookeeper集群部署方法及系统 | |
US10983825B2 (en) | Processing for multiple containers are deployed on the physical machine | |
CN109361542A (zh) | 客户端的故障处理方法、装置、系统、终端和服务器 | |
WO2024083259A1 (zh) | 主备数据库集群及选主方法、计算设备及存储介质 | |
US8990608B1 (en) | Failover of applications between isolated user space instances on a single instance of an operating system | |
US11397632B2 (en) | Safely recovering workloads within a finite timeframe from unhealthy cluster nodes | |
US5737515A (en) | Method and mechanism for guaranteeing timeliness of programs | |
CN111506388B (zh) | 容器性能探测方法、容器管理平台及计算机存储介质 | |
CN111158872B (zh) | 一种提交并守护spark任务的方法及装置 | |
US10200304B1 (en) | Stateless witness for multiple sites | |
CN109408145A (zh) | 一种处理器启动方法、装置、系统和计算机可读存储介质 | |
JP2010176345A (ja) | マルチノードシステム、ノード、メモリダンプ処理方法、及びプログラム | |
CN111031123B (zh) | Spark任务的提交方法、系统、客户端及服务端 | |
CN115001956B (zh) | 服务器集群的运行方法、装置、设备及存储介质 | |
US11921605B2 (en) | Managing applications in a cluster | |
US20240036968A1 (en) | Managing service configuration attempts for a host in response to failure | |
CN116541085B (zh) | 一种Android/Linux融合方法、装置、设备及存储介质 | |
US8595567B2 (en) | Method and system for spinlock fault recovery |
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 |