1.本发明实施例涉及数据库技术,尤其涉及一种基于集群的城市级容灾方法、装置、电子设备及介质。
背景技术:2.mysql是一种关系型数据库管理系统,在互联网金融行业被广泛使用,很多基于mysql原生主从复制架构的高可用实现方案也随之诞生。例如,在一座城市中部署一个主节点和多个从节点,从节点对主节点的数据进行复制。
3.现有技术中,当a城市中所有节点均异常时,只能通过b城市的异地备份来恢复数据。但是异地备份需要对恢复的数据进行验证,整个过程花费的时间很长,且在备份过程中a城市的服务是不可用的。若b城市没有备份,则a城市的数据只能丢失。现有技术无法快速应对城市级灾难,数据库的可用性和容灾水平较低。
技术实现要素:4.本发明实施例提供一种基于集群的城市级容灾方法、装置、电子设备及介质,以提高数据库对城市级灾难的容灾水平。
5.第一方面,本发明实施例提供了一种基于集群的城市级容灾方法,所述集群包括第一城市的一个主节点和至少两个从节点,还包括第二城市的一个从节点,所述第二城市的从节点配置有至少三个异步复制节点,该方法包括:
6.根据预设的状态获取时间周期,基于mysql router向集群中的任一节点发送探活信息,得到节点的当前状态;
7.根据所述节点的当前状态,判断所述第一城市是否发生城市级灾难,若是,则将所述第二城市的从节点作为目标主节点;
8.将所述异步复制节点添加至集群中,构建所述目标主节点和所述异步复制节点的新集群,由所述新集群对所述第一城市提供服务。
9.第二方面,本发明实施例还提供了一种基于集群的城市级容灾装置,所述集群包括第一城市的一个主节点和至少两个从节点,还包括第二城市的一个从节点,所述第二城市的从节点配置有至少三个异步复制节点,该装置包括:
10.状态获取模块,用于根据预设的状态获取时间周期,基于mysql router向集群中的任一节点发送探活信息,得到节点的当前状态;
11.主节点确定模块,用于根据所述节点的当前状态,判断所述第一城市是否发生城市级灾难,若是,则将所述第二城市的从节点作为目标主节点;
12.新集群确定模块,用于将所述异步复制节点添加至集群中,构建所述目标主节点和所述异步复制节点的新集群,由所述新集群对所述第一城市提供服务。
13.第三方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明任意
实施例所述的基于集群的城市级容灾方法。
14.第四方面,本发明实施例还提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如本发明任意实施例所述的基于集群的城市级容灾方法。
15.本发明实施例通过设置第一城市中的主节点和从节点,以及第二城市中的从节点,将两个不同城市的节点设置在同一集群中。实时或定时获取第一城市中所有节点的当前状态,根据当前状态判断第一城市是否发生城市级灾难,若是,则将第二城市的从节点作为新集群的目标主节点,并根据第二城市中的异步复制节点构建新集群。使第一城市的节点全部瘫痪时,可以由第二城市进行异地服务,保证了数据库的高可用性。解决了现有技术中,当第一城市发生城市级灾难时,数据丢失的问题,通过快速切换主节点,减少了数据备份的时间,提高城市级容灾的效率,提升数据库对于城市级灾难的容灾水平。
附图说明
16.图1是本发明实施例一中的一种基于集群的城市级容灾方法的流程示意图;
17.图2是本发明实施例二中的一种基于集群的城市级容灾装置的结构框图;
18.图3是本发明实施例三中的一种基于集群的城市级容灾设备的结构示意图。
具体实施方式
19.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
20.实施例一
21.图1为本发明实施例一所提供的一种基于集群的城市级容灾方法的流程示意图,本实施例可适用于城市的数据库服务器发生城市级灾难的情况,该方法可以由一种基于集群的城市级容灾装置来执行。如图1所示,该方法具体包括如下步骤:
22.步骤110、根据预设的状态获取时间周期,基于mysql router向集群中的任一节点发送探活信息,得到节点的当前状态。
23.其中,一个城市的idc(internet data center,互联网数据中心)可以部署多个节点,包括一个主节点和多个从节点。主节点可以接收用户在应用程序上的操作数据,从节点可以对主节点接收的数据进行复制同步。将一个城市中的主节点和从节点均部署在一个集群中,该集群中还可以包括另一个城市的节点,另一个城市的节点为该集群的从节点。主节点所在的城市为第一城市,另一个城市为第二城市,集群中的主节点为第一城市的节点,从节点包括第一城市的节点和第二城市的节点。主节点的数量为一个,第一城市的从节点数量为至少两个,第二城市的从节点数量为一个。在第二城市除了部署集群的从节点,还可以为该从节点部署多个异步复制节点,本实施例中,异步复制节点为至少三个。异步复制节点可以异步复制第二城市从节点的数据,异步复制节点不属于第一城市主节点所在的集群中。各节点获取数据的数据库系统为mysql数据库系统,mysql router是mysql官方提供一个轻量级中间件,它可以为应用程序和后端的mysql服务器提供透明路由。mysql router可以定时向各个节点发送探活信息,以获取各个节点的当前状态。例如,可以预先设置状态获
取的时间周期,根据状态获取时间周期,mysql router定时向集群中各个节点发送探活信息,各节点可以根据探活信息向mysql router进行状态反馈,从而得到节点的当前状态。
24.本实施例中,可选的,集群为innodb cluster,集群包括第一城市的一个主节点和三个从节点,还包括第二城市的一个从节点。
25.具体的,本发明实施例中的集群为mysql的innodb cluster集群,集群中的每个节点都是组复制的成员,可以在innodb cluster内复制数据,并且具有内置的故障转移功能。mysql router可以根据集群部署信息自动生成配置,将客户端应用程序透明地连接到主节点。如果主节点意外故障,群集将自动重新配置。在默认的单主模式下,innodb cluster具有单个读写主节点,从节点为只读节点。若从节点变为主节点,则从节点由只读节点变为读写节点。mysql router可以检测到这种情况并将客户端应用程序的数据自动转发到新的主节点。本实施例中的集群共有五个节点,一个主节点和四个从节点,在第一城市设置有一个主节点和三个从节点,在第二城市设置有一个从节点,该集群的数据库为第一城市服务。集群的各个节点之间通过paxos(帕克索斯)协议进行复制,paxos协议可以解决分布式数据一致性的问题,使得多个节点上对于某个提案达成一致。paxos协议中的多数派原则保证了数据的一致性,多数派原则是指对于某个提案,需要三个节点都同意提交事务才会提交事务。这样设置的有益效果在于,采用innodb cluster,设置五个节点,并将节点部署在异地,既可以保证多数派原则,提高集群的可用性,又能避免第一城市发生城市级灾难时数据丢失,提高数据库的容灾性能。
26.步骤120、根据节点的当前状态,判断第一城市是否发生城市级灾难,若是,则将第二城市的从节点作为目标主节点。
27.其中,城市级灾难是指城市的数据库服务器全部瘫痪,应用程序的数据无法向该城市的数据库服务器传输。例如,整座城市停电,集群中第一城市的所有节点均无法接收数据和复制数据,则确定第一城市出现城市级灾难。节点的当前状态可以包括online(在线)、recovery(恢复)和offline(离线)等。根据节点的当前状态,可以判断第一城市是否发生城市级灾难。可以预先设置城市级灾难发生的判断标准,例如,集群中三分之二的第一城市节点处于离线状态,则判断第一城市发生城市级灾难。若确定第一城市发生城市级灾难,则将第二城市的从节点作为目标主节点,作为集群的新的主节点,来代替第一城市原先的主节点。
28.本实施例中,可选的,根据节点的当前状态,判断第一城市是否发生城市级灾难,包括:根据集群中任一节点的当前状态,判断第一城市的主节点和从节点是否均为异常;若是,则确定第一城市发生城市级灾难。
29.具体的,基于mysql router可以得到集群中任一节点的当前状态,获取第一城市中所有节点的当前状态,判断第一城市的所有节点是否均为异常,即判断第一城市的主节点和从节点是否均为异常,异常是可以是指节点当前状态为离线或处于正在恢复中。若第一城市的所有节点均为异常,则确定第一城市发生城市级灾难。这样设置的有益效果在于,确保第一城市的所有节点均异常才为第一城市的城市级灾难,当第一城市中存在正常工作的节点时,正常节点继续为第一城市工作,避免频繁切换主节点影响数据传输,提高数据库对应用程序的数据处理效率,以及集群对城市级灾难的容灾水平。
30.本实施例中,可选的,将第二城市的从节点作为目标主节点,包括:响应于用户发
出的主节点设置指令,确定第二城市的从节点为目标主节点;其中,主节点设置指令为set primary node()指令。
31.具体的,在确定第一城市发生城市级灾难后,第一城市的主节点无法继续工作,需要新确定一个主节点为第一城市服务,可以将第二城市的从节点设置为目标主节点为第一城市服务。由于第二城市的从节点与第一城市的主节点位于同一集群中,因此,第二城市的从节点中存在第一城市主节点的数据,将第二城市的从节点作为目标主节点,可以保证第一城市的应用程序正常工作,且避免原先的数据丢失。集群中第二城市的从节点设置为一个,当第一城市的节点全部异常时,可以将第二城市的从节点自动部署为目标主节点,即,集群会自动选主并进行切换,mysql router也会自动指向目标主节点,整个过程对应用程序是无感知的。
32.用户可以随时查看集群中各节点的当前状态,当用户发现第一城市的所有节点异常时,则确定需要将第二城市的从节点确定为目标主节点。用户可以发出主节点设置指令,确定第二城市从节点中的目标主节点,mysql服务器响应到用户发出的主节点设置指令,确认用户指定的节点为目标主节点。例如,用户可以通过set primary node()指令发出主节点设置指令,手动将主节点切换为第二城市的从节点。这样设置的有益效果在于,用户操作简单,主节点切换效率高,且能避免主节点切换错误,提高集群的容灾效率。
33.步骤130、将异步复制节点添加至集群中,构建目标主节点和异步复制节点的新集群,由新集群对第一城市提供服务。
34.其中,在得到目标主节点后,集群中只有该目标主节点,需要确定新的从节点,使从节点和目标主节点构建出新的集群。将异步复制节点作为目标主节点的从节点部署在新集群中,即,新集群中的节点均为第二城市的节点。第二城市的从节点下部署有多个异步复制节点,第二城市的从节点在成为目标主节点之前,复制有原先的主节点的数据,异步复制节点对该从节点的数据进行异步复制,即,异步复制节点中也有原先主节点的数据,但由于异步复制节点不是同步复制,异步复制节点中的数据与主节点的数据存在差距。本实施例中,异步复制节点的数量为至少三个。例如,异步复制节点为三个,异步复制节点与目标主节点差异的数据不多,可以很快同步到目标主节点的数据状态,整个新集群包含一主三从四个节点,同样可以对第一城市提供服务,也能保证数据的一致性与系统的可用性。通过设置异步复制节点,既可以在第一城市的节点出现异常时构建新集群,保证数据一致,又可以减少时间消耗,提高数据库系统的可用性。
35.本实施例中,可选的,将异步复制节点添加至集群中,包括:响应于用户的从节点添加指令,将至少三个异步复制节点添加至集群中,作为目标主节点的从节点;其中,从节点添加指令为add instance()指令。
36.具体的,在确定目标主节点后,可以将目标主节点下设的所有异步复制节点部署为从节点,也可以由用户发出从节点添加指令,指定待添加的异步复制节点。例如,可以采用add instance()指令进行从节点的添加。若是自动添加从节点,则从节点的复制方式还是异步复制,若通过用户指令添加从节点,则从节点的复制方式可以是paxos复制。这样设置的有益效果在于,将异步复制节点用add instance()加入到集群后,这些节点的复制方式会发生改变,由异步复制变为paxos复制,避免异步复制节点对目标主节点的数据复制不及时,且用户添加从节点的输入指令简单,操作快速,且能根据用户的需求添加从节点,提
高新集群的构建效率和精度,从而提高容灾水平。
37.本实施例中,可选的,在构建目标主节点和异步复制节点的新集群之后,还包括:根据预设的状态获取时间周期,基于mysql router向目标主节点发送探活信息,得到目标主节点的当前状态;若目标主节点的当前状态异常,则获取异步复制节点对新主节点的投票结果;基于多数派原则,从异步复制节点中确定新集群的新主节点。
38.具体的,在构建新集群后,可以继续获取新集群中各个节点的当前状态,mysql router向各个节点发送探活信息,得到各个节点的当前状态。新集群中的目标主节点也能发生异常,因此,需要定时获取目标主节点的当前状态。若目标主节点的当前状态也发生异常,则需要从异步复制节点,也就是新的从节点中确定一个新的主节点。新集群的各个节点之间还是通过paxos协议进行复制,根据paxos协议中的多数派原则,各个新的从节点进行新的主节点的投票,获取新的从节点对新主节点的投票结果,得到被投票数最多的新从节点,作为新主节点,由新主节点和剩下的新从节点进行对外服务。这样设置的有益效果在于,即使新集群中的目标主节点也出现异常,也可以快速自动切换新的主节点,给工作人员足够的时间进行第一城市的故障修复,提高容灾水平,应用程序对故障无感知,保证第一城市的应用程序正常运行。
39.本实施例中,第二城市的异步复制节点为至少三个,若异步复制节点过少,即新从节点过少,则在目标主节点故障时,新从节点难以根据多数派原则进行新主节点的投票,影响主节点的切换。
40.本实施例的技术方案,通过设置第一城市中的主节点和从节点,以及第二城市中的从节点,将两个不同城市的节点设置在同一集群中。实时或定时获取第一城市中所有节点的当前状态,根据当前状态判断第一城市是否发生城市级灾难,若是,则将第二城市的从节点作为新集群的目标主节点,并根据第二城市中的异步复制节点构建新集群。使第一城市的节点全部瘫痪时,可以由第二城市进行异地服务,保证了数据库的高可用性。解决了现有技术中,当第一城市发生城市级灾难时,数据丢失的问题,通过快速切换主节点,减少了数据备份的时间,提高城市级容灾的效率,提升数据库对于城市级灾难的容灾水平。
41.实施例二
42.图2为本发明实施例二所提供的一种基于集群的城市级容灾装置的结构框图,可执行本发明任意实施例所提供的一种基于集群的城市级容灾方法,具备执行方法相应的功能模块和有益效果。如图2所示,该装置具体包括:
43.状态获取模块201,用于根据预设的状态获取时间周期,基于mysql router向集群中的任一节点发送探活信息,得到节点的当前状态;
44.主节点确定模块202,用于根据所述节点的当前状态,判断所述第一城市是否发生城市级灾难,若是,则将所述第二城市的从节点作为目标主节点;
45.新集群确定模块203,用于将所述异步复制节点添加至集群中,构建所述目标主节点和所述异步复制节点的新集群,由所述新集群对所述第一城市提供服务。
46.可选的,集群为innodb cluster,所述集群包括第一城市的一个主节点和三个从节点,还包括第二城市的一个从节点。
47.可选的,主节点确定模块202,包括:
48.节点判断单元,用于根据集群中任一节点的当前状态,判断所述第一城市的主节
点和从节点是否均为异常;
49.城市级灾难确定单元,用于若是,则确定所述第一城市发生城市级灾难。
50.可选的,主节点确定模块202,还包括:
51.主节点设置单元,用于响应于用户发出的主节点设置指令,确定所述第二城市的从节点为目标主节点;其中,所述主节点设置指令为set primary node()指令。
52.可选的,新集群确定模块203,具体用于:
53.响应于用户的从节点添加指令,将至少三个异步复制节点添加至集群中,作为所述目标主节点的从节点;其中,所述从节点添加指令为add instance()指令。
54.可选的,该装置还包括:
55.目标主节点状态获取模块,用于在构建所述目标主节点和所述异步复制节点的新集群之后,根据预设的状态获取时间周期,基于mysql router向所述目标主节点发送探活信息,得到所述目标主节点的当前状态;
56.新主节点投票模块,用于若所述目标主节点的当前状态异常,则获取所述异步复制节点对新主节点的投票结果;
57.新主节点确定模块,用于基于多数派原则,从所述异步复制节点中确定新集群的新主节点。
58.本发明实施例通过设置第一城市中的主节点和从节点,以及第二城市中的从节点,将两个不同城市的节点设置在同一集群中。实时或定时获取第一城市中所有节点的当前状态,根据当前状态判断第一城市是否发生城市级灾难,若是,则将第二城市的从节点作为新集群的目标主节点,并根据第二城市中的异步复制节点构建新集群。使第一城市的节点全部瘫痪时,可以由第二城市进行异地服务,保证了数据库的高可用性。解决了现有技术中,当第一城市发生城市级灾难时,数据丢失的问题,通过快速切换主节点,减少了数据备份的时间,提高城市级容灾的效率,提升数据库对于城市级灾难的容灾水平。
59.实施例三
60.图3是本发明实施例三提供的一种基于集群的城市级容灾设备的结构示意图。基于集群的城市级容灾设备是一种电子设备,图3示出了适于用来实现本发明实施方式的示例性电子设备300的框图。图3显示的电子设备300仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
61.如图3所示,电子设备300以通用计算设备的形式表现。电子设备300的组件可以包括但不限于:一个或者多个处理器或者处理单元301,系统存储器302,连接不同系统组件(包括系统存储器302和处理单元301)的总线303。
62.总线303表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(isa)总线,微通道体系结构(mac)总线,增强型isa总线、视频电子标准协会(vesa)局域总线以及外围组件互连(pci)总线。
63.电子设备300典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备300访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
64.系统存储器302可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)304和/或高速缓存存储器305。电子设备300可以进一步包括其它可移动/不
可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统306可以用于读写不可移动的、非易失性磁介质(图3未显示,通常称为“硬盘驱动器”)。尽管图3中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如cd
‑
rom,dvd
‑
rom或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线303相连。存储器302可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
65.具有一组(至少一个)程序模块307的程序/实用工具308,可以存储在例如存储器302中,这样的程序模块307包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块307通常执行本发明所描述的实施例中的功能和/或方法。
66.电子设备300也可以与一个或多个外部设备309(例如键盘、指向设备、显示器310等)通信,还可与一个或者多个使得用户能与该电子设备300交互的设备通信,和/或与使得该电子设备300能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口311进行。并且,电子设备300还可以通过网络适配器312与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图3所示,网络适配器312通过总线303与电子设备300的其它模块通信。应当明白,尽管图3中未示出,可以结合电子设备300使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
67.处理单元301通过运行存储在系统存储器302中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的一种基于集群的城市级容灾方法,包括:
68.根据预设的状态获取时间周期,基于mysql router向集群中的任一节点发送探活信息,得到节点的当前状态;
69.根据所述节点的当前状态,判断所述第一城市是否发生城市级灾难,若是,则将所述第二城市的从节点作为目标主节点;
70.将所述异步复制节点添加至集群中,构建所述目标主节点和所述异步复制节点的新集群,由所述新集群对所述第一城市提供服务。
71.实施例四
72.本发明实施例四还提供一种包含计算机可执行指令的存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例所提供的一种基于集群的城市级容灾方法,包括:
73.根据预设的状态获取时间周期,基于mysql router向集群中的任一节点发送探活信息,得到节点的当前状态;
74.根据所述节点的当前状态,判断所述第一城市是否发生城市级灾难,若是,则将所述第二城市的从节点作为目标主节点;
75.将所述异步复制节点添加至集群中,构建所述目标主节点和所述异步复制节点的新集群,由所述新集群对所述第一城市提供服务。
76.本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意
组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd
‑
rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
77.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
78.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、rf等等,或者上述的任意合适的组合。
79.可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
80.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。