数据库切换方法、系统和计算机可读存储介质与流程

文档序号:16247933发布日期:2018-12-11 23:45阅读:145来源:国知局
数据库切换方法、系统和计算机可读存储介质与流程

本发明涉及计算机技术领域,尤其涉及一种数据库切换方法、系统和计算机可读存储介质。

背景技术

分布式数据库中涉及大量分散节点,一旦某个节点出现故障,将会影响事务的正常执行,因此在节点出现异常时需要够迅速找到合适的数据库实例作为新的主机来承载该节点的事务。

目前分布式数据库集群在处理节点故障时,分为两种情况:

1)若代理服务器没有宕机而数据库实例宕机,则将原主数据库实例的日志信息覆盖到从数据库,然后将从数据库切换为主数据库。

2)若代理服务器与数据库实例都宕机,则直接将从数据库切换为主数据库。

这两种主从切换方式都有着明显的局限性:

1)无法可靠保证新旧主数据库的数据一致性。在第一种方式中,将原主数据库的日志信息覆盖到从数据库后,没有对原主数据库和新主数据库的数据进行检验,如果覆盖过程中出现异常,不能可靠地保证原主数据库和新主数据库的数据一致。在第二种方式中,直接将从数据库切换为主数据库,原主数据库与从数据库可能切换时就不一致,这样也不能保证原主数据库和新主数据库的数据一致。

2)无法处理数据库主从角色异常。只有在代理服务器或者数据库宕机的情况下才会进行主从切换,如果发生数据库主从角色异常,主从数据无法同步,可能进一步导致后续主从切换数据不一致。



技术实现要素:

本发明的目的在于提供一种数据库切换方法、系统和计算机可读存储介质,以在分布式数据库中发生异常时,切换主从数据库,并确保原主数据库和新主数据库的数据一致性并维护正常的主从关系。

本发明解决上述技术问题所采用的技术方案如下:

提供的一种数据库切换方法,所述数据库切换方法包括:在分布式数据库的节点中,从所述主数据库对应的资源管理器获取所述主数据库的状态;在无法获取主数据库的正常状态时,获取所述主数据库的日志信息;根据所述主数据库的日志信息,对所述节点中的一个或多个从数据库补数据;从所述一个或多个从数据库选择一个作为新主数据库,将所述主数据库作为新从数据库;向所述节点中所有资源管理器发出更新主从关系的请求。

可选地,前述的数据库切换方法,所述在无法获取主数据库的正常状态时,获取所述主数据库的日志信息的步骤,包括:在获取到所述主数据库的异常状态时,从所述主数据库对应的资源管理器获取所述主数据库的日志信息。

可选地,前述的数据库切换方法,所述在无法获取主数据库的正常状态时,获取所述主数据库的日志信息的步骤,包括:在从所述主数据库对应的资源管理器无法获取所述主数据库的状态时,从预设的日志服务器获取已备份的所述主数据库的日志信息。

可选地,前述的数据库切换方法,所述从所述一个或多个从数据库选择一个作为新主数据库的步骤,包括:计算所述一个或多个从数据库与所述主数据库的一致性程度,根据所述一致性程度的高低选择一个作为所述新主数据库。

可选地,前述的数据库切换方法,在所述向所述节点中所有资源管理器发出更新主从关系的请求的步骤之后,还包括:将所述主从关系通知给元数据服务器。

可选地,前述的数据库切换方法,在所述在无法获取主数据库的正常状态时,获取所述主数据库的日志信息的步骤之前,还包括:将所述节点不再接收新业务的信息通知给代理服务器;在所述将所述主从关系通知给元数据服务器的步骤之后,还包括:将所述节点接收新业务的信息通知给代理服务器;

提供的一种数据库切换系统,所述数据库切换系统包括处理器、存储器及通信总线;所述通信总线用于实现处理器和存储器之间的连接通信;所述处理器用于执行存储器中存储的数据库切换程序,以实现以下步骤:在分布式数据库的节点中,从所述主数据库对应的资源管理器获取所述主数据库的状态;在无法获取主数据库的正常状态时,获取所述主数据库的日志信息;根据所述主数据库的日志信息,对所述节点中的一个或多个从数据库补数据;从所述一个或多个从数据库选择一个作为新主数据库,将所述主数据库作为新从数据库;向所述节点中所有资源管理器发出更新主从关系的请求。

可选地,前述的数据库切换系统,在所述在无法获取主数据库的正常状态时,获取所述主数据库的日志信息的步骤中,所述处理器执行存储器中存储的数据库切换程序,以实现以下步骤:在获取到所述主数据库的异常状态时,从所述主数据库对应的资源管理器获取所述主数据库的日志信息。

可选地,前述的数据库切换系统,在所述在无法获取主数据库的正常状态时,获取所述主数据库的日志信息的步骤中,所述处理器执行存储器中存储的数据库切换程序,以实现以下步骤:在从所述主数据库对应的资源管理器无法获取所述主数据库的状态时,从预设的日志服务器获取已备份的所述主数据库的日志信息。

提供的一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现以下如前述的数据库切换方法的步骤。

根据以上技术方案,可知本发明的数据库切换方法、系统和计算机可读存储介质至少具有以下优点:

在本发明的技术方案中,检测分布式数据库各个节点的状态以及时发生异常,并根据主数据库的日志信息对从数据库同步后,选择从数据库作为新的主数据库,确保原主数据库和新主数据库的数据一致,以及对所有资源管理器发出变更主从关系的请求,从而维护分布式数据库中正常的主从关系。

附图说明

图1为本发明实施例的一种数据库切换方法的流程图;

图2为本发明实施例的一种数据库切换方法的示意图;

图3为本发明实施例的一种数据库切换方法的流程图;

图4为本发明实施例的一种数据库切换方法的流程图;

图5为本发明实施例的一种数据库切换方法的流程图;

图6为本发明实施例的一种数据库切换方法的流程图;

图7为本发明实施例的一种数据库切换系统的框图;

图8为本发明实施例的一种计算节可读存储介质的框图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例一

如图1所示,本发明的一个实施例中提供的一种数据库切换方法,本实施例的数据库切换方法包括:

步骤s110,在分布式数据库的节点中,从主数据库对应的资源管理器获取主数据库的状态。

本实施例中的技术方案可以在分布式数据中的集群管理器上实现,分布式数据库的结构如图2所示:

1、集群管理器:接收上层业务对分布式数据库集群的相关请求,对分布式数据库集群进行管理,协调资源管理器的数据库状态上报,通知资源管理器进行切换、备份以及重分布等命令。

2、资源管理器。它通常作为数据库的上层代理,是响应上层请求对数据库进行复杂操作的本地数据库监控程序。在本实施例的技术方案中,它的主要作用是响应集群管理器的重分布请求,执行重分布流程。

3、数据库。它是保存数据的基本节点。在本实施例的技术方案中,只有资源管理器与它进行交互。

4、代理服务器。它是上层执行ddl(datadefinitionlanguage,数据定义语言)语句的组件,直接对数据库进行读写操作。

5.元数据服务器。它是连接集群管理器和用户界面的中间件,负责上层请求的转发及所有元数据的保存。

6.binlog服务器。即日志服务器,它与主数据库同步日志文件,节点中主资源管理器将本机日志文件备份到该服务器,当主资源管理器宕机时,从数据库从该服务器补数据。

步骤s120,在无法获取主数据库的正常状态时,获取主数据库的日志信息。

在本实施例中,无法获取主数据库的正常状态的情况包括但不限于:主数据库发生故障,对应资源管理器返回主数据异常的状态;主数据库对应的资源管理器故障,未返回任何数据。

在本实施例中,资源管理器定期向集群管理器报告当前数据库的状态,一旦集群管理器收到节点主数据库状态异常的报告或者一段时间内集群管理器持续未收到节点主资源管理器上报的心跳消息,则集群管理器检查是否该节点存在可用的从数据库,如果存在可用的从数据库,则集群管理器准备发起故障主从切换。

或者,当数据报告其角色与集群管理器维护的角色信息不一致时,集群管理器准备发起角色主从切换。

步骤s130,根据主数据库的日志信息,对节点中的一个或多个从数据库补数据。

在本实施例中,集群管理器获取该节点所有数据库的日志信息,并提供一种根据日志信息补数据的方法:

第一步,在生成日志文件时,将日志文件的名称设置为包含日期的格式。

第二步,在补数据前,获取补数据的开始位置i和结束位置j为止,以及日志文件的路径。

第三步,将日志文件按照日期排序,由近及远扫描文件头中记录的pervious(上一个)位置,直到找到的位置不大于指定开始位置的日志文件,即pervious<=i。

第四步,从找到的日志文件开始扫描,生成从i+1到j的sql语句。如果不指定j,则扫描到最新日志文件的最后一个位置。

第五步,执行生成的sql语句前滚数据,补数据完成。

步骤s140,从一个或多个从数据库选择一个作为新主数据库,将主数据库作为新从数据库。

步骤s150,向节点中所有资源管理器发出更新主从关系的请求。

在本实施例中,集群管理器对各个可用的从资源管理器下发补数据指令,各个资源管理器补数据以确保从数据与原主数据一致,完成后向集群管理器报告补数据结果,集群管理器选取补数据成功的从作为新主,下发切换主从数据库的请求。

根据本实施例的技术方案,检测分布式数据库各个节点的状态以及时发生异常,并根据主数据库的日志信息对从数据库同步后,选择从数据库作为新的主数据库,确保原主数据库和新主数据库的数据一致,以及对所有资源管理器发出变更主从关系的请求,从而维护分布式数据库中正常的主从关系。

实施例二

如图3所示,本发明的一个实施例中提供的一种数据库切换方法,本实施例的数据库切换方法包括:

步骤s310,在分布式数据库的节点中,从主数据库对应的资源管理器获取主数据库的状态。

步骤s320,将节点不再接收新业务的信息通知给代理服务器。

步骤s330,在获取到主数据库的异常状态时,从主数据库对应的资源管理器获取主数据库的日志信息。

在本实施例中,集群管理器在确认代理服务器成功停止故障节点服务器后,向各个资源管理器获取其所管理的数据库日志信息,资源管理器待数据库回放结束后将日志信息发送给集群管理器,集群管理器将各个数据库的日志信息保存下来。

步骤s340,根据主数据库的日志信息,对节点中的一个或多个从数据库补数据。

在本实施例中,集群管理器检查原主资源管理器的状态,如果原主资源管理器正常而数据库宕机,则集群管理器向原主资源管理器下发补数据请求,原主资源管理器利用获取的主数据库日志信息及自身的日志信息,将其余从数据库的数据与主数据库同步。

步骤s350,计算一个或多个从数据库与主数据库的一致性程度,根据一致性程度的高低选择一个作为新主数据库。

在本实施例中,集群管理器将补数据成功的从数据库设置为候选的新主数据库。如果在高可用模式下,则将所有可用的数据库设置为候选的新主数据库并按与原主数据数据一致性接近程度排序。对于一致性程度相同的数据库,则按照ip(网络之间互连的协议)值由小到大的顺序排序,按顺序选择新主数据库直到从切换成主数据库成功。

步骤s360,向节点中所有资源管理器发出更新主从关系的请求。

在本实施例中,在新主数据库切换成功后,集群管理器更新主从关系信息,同时,对所有可用的资源管理器发送建立新的主从关系请求,资源管理器完成后向集群管理器报告结果。

步骤s370,将主从关系通知给元数据服务器。

在本实施例中,待收到所有资源管理器执行结果后,集群管理器向元数据服务器报告新的主从关系信息,元数据服务器将其保存下来。

步骤s380,将节点接收新业务的信息通知给代理服务器。

在本实施例中,集群管理器通知代理服务器该节点可以接受业务,并将当前节点的主数据库通知代理服务器。

本实施例技术方案的一个具体示例如图4所示:

假设现有集群中的某个节点,包含a、b、c三台数据库以及其对应的资源管理器,其中a是主数据库,b、c都为从数据库。

当集群管理器收到a资源管理器报告其数据库故障的消息后,集群管理器检查各个从数据库的状态,如果状态良好,集群管理器发起故障主从切换请求。

集群管理器首先通知代理服务器该节点拒绝接收新的业务。

在上一步成功后,集群管理器向各个资源管理器a、b、c发起获取日志信息的请求,尽可能多的收集各个资源管理器的响应。

如果在超时之前,收到了资源管理器获取日志信息的响应,集群管理器请求资源管理器a给上一步所有成功响应的从数据库补数据,集群管理器等待补数据的结果。

如果补数据成功,集群管理器将补数据成功的从数据库设置为候选新主b、c。依次选择新主数据库直到新主数据库切换成功,之后更新主从关系。

通知元数据服务器新的主从关系信息。

通知代理服务器该节点的当前主数据库,如果可用则该节点开始接受业务请求,如果不可用则该节点下线。

实施例三

如图5所示,本发明的一个实施例中提供的一种数据库切换方法,本实施例的数据库切换方法包括:

步骤s510,在分布式数据库的节点中,从主数据库对应的资源管理器获取主数据库的状态。

步骤s520,将节点不再接收新业务的信息通知给代理服务器。

步骤s530,在从主数据库对应的资源管理器无法获取主数据库的状态时,从预设的日志服务器获取已备份的主数据库的日志信息。

在本实施例中,如果原主资源管理器宕机,则集群管理器向各个从资源管理器下发补数据请求,各个从资源管理器利用binlog服务器上存储的日志信息同步数据。补数据结束后,原主资源管理器或者各个从资源管理器向集群管理器报告补数据的结果。

步骤s540,根据主数据库的日志信息,对节点中的一个或多个从数据库补数据。

步骤s550,计算一个或多个从数据库与主数据库的一致性程度,根据一致性程度的高低选择一个作为新主数据库。

步骤s560,向节点中所有资源管理器发出更新主从关系的请求。

步骤s570,将主从关系通知给元数据服务器。

步骤s580,将节点接收新业务的信息通知给代理服务器。

本实施例技术方案的一个具体示例如图6所示:

集群管理器首先检测当前节点所有从数据库的状态,包括状态是否正常、是否节点已经在进行主从切换。如果存在可用的从数据库,则集群管理器通知代理服务器该节点不接受业务请求。

集群管理器向所有资源管理器a、b、c请求获取数据库的日志信息,如果原主资源管理器不可用,则只获取可用从的日志信息。

在获取到从的日志信息后,如果原主资源管理器不可用,则集群管理器向上一步中成功响应的从数据库请求从binlog服务器补数据,即b、c通过binlog服务器补数据。

如果补数据成功,集群管理器将补数据成功的从数据库按ip排序,假设排列顺序为c、b。首先选择c作为新主,如果c切换为新主成功,则变更a、b为从。如果c切换失败,再次选择b作为新主,如果b切换为新主成功,则变更a、c为从。如果存在一个切换成功的新主,则向其他可用的从资源管理器发送建立新主从关系的请求。

通知元数据服务器当前该节点的主从关系信息。

最后通知代理服务器在该节点在新主上接受业务。如果不存在任何一个切换成功的新主,则主备切换失败,该节点不接受业务。

本实施例的技术方案相较于现阶段的分布式数据库故障主从切换方案,有益效果主要体现几个方面:

1、适应性更加广泛。采用可配置方式,既能满足高可靠的使用要求,又能满足高可用的使用场合。在高可靠模式下,能确保所有的新主数据库与原主数据库一致,如果没有一致的从数据库,则将该节点下线。在高可用模式下,按照与原主数据一致性接近程度选择新主。两种配置方式能够满足大部分应用场合需要,使用起来更灵活。

2、保证分布式数据库的可靠性和可维护性。该方案能确保节点中各个数据库的主从关系与元数据服务器一致,整个系统可靠性高。同时,该方案能够动态地增删从数据库,方便系统的扩容。

3、保证数据的安全准确。通过补数据保证主机数据在切换前后一致,避免差异化binlog。

4、跟传统的纯覆盖日志文件相比,该发明补数据不用拷贝所有的日志文件,只需补齐缺失的数据,效率更高。

实施例四

如图7所示,本发明的一个实施例中提供的一种数据库切换系统,本实施例的数据库切换系统包括处理器710、存储器720及通信总线730;通信总线730用于实现处理器710和存储器720之间的连接通信;处理器710用于执行存储器720中存储的事务标识操作程序,以实现以下步骤:

在分布式数据库的节点中,从主数据库对应的资源管理器获取主数据库的状态。

本实施例中的技术方案可以在分布式数据中的集群管理器上实现,分布式数据库的结构如图2所示:

1、集群管理器:接收上层业务对分布式数据库集群的相关请求,对分布式数据库集群进行管理,协调资源管理器的数据库状态上报,通知资源管理器进行切换、备份以及重分布等命令。

2、资源管理器。它通常作为数据库的上层代理,是响应上层请求对数据库进行复杂操作的本地数据库监控程序。在本实施例的技术方案中,它的主要作用是响应集群管理器的重分布请求,执行重分布流程。

3、数据库。它是保存数据的基本节点。在本实施例的技术方案中,只有资源管理器与它进行交互。

4、代理服务器。它是上层执行ddl(datadefinitionlanguage,数据定义语言)语句的组件,直接对数据库进行读写操作。

5.元数据服务器。它是连接集群管理器和用户界面的中间件,负责上层请求的转发及所有元数据的保存。

6.binlog服务器。即日志服务器,它与主数据库同步日志文件,节点中主资源管理器将本机日志文件备份到该服务器,当主资源管理器宕机时,从数据库从该服务器补数据。

在无法获取主数据库的正常状态时,获取主数据库的日志信息。

在本实施例中,无法获取主数据库的正常状态的情况包括但不限于:主数据库发生故障,对应资源管理器返回主数据异常的状态;主数据库对应的资源管理器故障,未返回任何数据。

在本实施例中,资源管理器定期向集群管理器报告当前数据库的状态,一旦集群管理器收到节点主数据库状态异常的报告或者一段时间内集群管理器持续未收到节点主资源管理器上报的心跳消息,则集群管理器检查是否该节点存在可用的从数据库,如果存在可用的从数据库,则集群管理器准备发起故障主从切换。

或者,当数据报告其角色与集群管理器维护的角色信息不一致时,集群管理器准备发起角色主从切换。

根据主数据库的日志信息,对节点中的一个或多个从数据库补数据。

在本实施例中,集群管理器获取该节点所有数据库的日志信息,并提供一种根据日志信息补数据的方法:

第一步,在生成日志文件时,将日志文件的名称设置为包含日期的格式。

第二步,在补数据前,获取补数据的开始位置i和结束位置j为止,以及日志文件的路径。

第三步,将日志文件按照日期排序,由近及远扫描文件头中记录的pervious(上一个)位置,直到找到的位置不大于指定开始位置的日志文件,即pervious<=i。

第四步,从找到的日志文件开始扫描,生成从i+1到j的sql语句。如果不指定j,则扫描到最新日志文件的最后一个位置。

第五步,执行生成的sql语句前滚数据,补数据完成。

从一个或多个从数据库选择一个作为新主数据库,将主数据库作为新从数据库。

向节点中所有资源管理器发出更新主从关系的请求。

在本实施例中,集群管理器对各个可用的从资源管理器下发补数据指令,各个资源管理器补数据以确保从数据与原主数据一致,完成后向集群管理器报告补数据结果,集群管理器选取补数据成功的从作为新主,下发切换主从数据库的请求。

根据本实施例的技术方案,检测分布式数据库各个节点的状态以及时发生异常,并根据主数据库的日志信息对从数据库同步后,选择从数据库作为新的主数据库,确保原主数据库和新主数据库的数据一致,以及对所有资源管理器发出变更主从关系的请求,从而维护分布式数据库中正常的主从关系。

实施例五

如图8所示,本发明的一个实施例中提供的一种计算机可读存储介质810,计算机可读存储介质810存储有一个或者多个程序820,一个或者多个程序820可被一个或者多个处理器830执行,以实现以下的步骤:

在分布式数据库的节点中,从主数据库对应的资源管理器获取主数据库的状态。

本实施例中的技术方案可以在分布式数据中的集群管理器上实现,分布式数据库的结构如图2所示:

1、集群管理器:接收上层业务对分布式数据库集群的相关请求,对分布式数据库集群进行管理,协调资源管理器的数据库状态上报,通知资源管理器进行切换、备份以及重分布等命令。

2、资源管理器。它通常作为数据库的上层代理,是响应上层请求对数据库进行复杂操作的本地数据库监控程序。在本实施例的技术方案中,它的主要作用是响应集群管理器的重分布请求,执行重分布流程。

3、数据库。它是保存数据的基本节点。在本实施例的技术方案中,只有资源管理器与它进行交互。

4、代理服务器。它是上层执行ddl(datadefinitionlanguage,数据定义语言)语句的组件,直接对数据库进行读写操作。

5.元数据服务器。它是连接集群管理器和用户界面的中间件,负责上层请求的转发及所有元数据的保存。

6.binlog服务器。即日志服务器,它与主数据库同步日志文件,节点中主资源管理器将本机日志文件备份到该服务器,当主资源管理器宕机时,从数据库从该服务器补数据。

在无法获取主数据库的正常状态时,获取主数据库的日志信息。

在本实施例中,无法获取主数据库的正常状态的情况包括但不限于:主数据库发生故障,对应资源管理器返回主数据异常的状态;主数据库对应的资源管理器故障,未返回任何数据。

在本实施例中,资源管理器定期向集群管理器报告当前数据库的状态,一旦集群管理器收到节点主数据库状态异常的报告或者一段时间内集群管理器持续未收到节点主资源管理器上报的心跳消息,则集群管理器检查是否该节点存在可用的从数据库,如果存在可用的从数据库,则集群管理器准备发起故障主从切换。

或者,当数据报告其角色与集群管理器维护的角色信息不一致时,集群管理器准备发起角色主从切换。

根据主数据库的日志信息,对节点中的一个或多个从数据库补数据。

在本实施例中,集群管理器获取该节点所有数据库的日志信息,并提供一种根据日志信息补数据的方法:

第一步,在生成日志文件时,将日志文件的名称设置为包含日期的格式。

第二步,在补数据前,获取补数据的开始位置i和结束位置j为止,以及日志文件的路径。

第三步,将日志文件按照日期排序,由近及远扫描文件头中记录的pervious(上一个)位置,直到找到的位置不大于指定开始位置的日志文件,即pervious<=i。

第四步,从找到的日志文件开始扫描,生成从i+1到j的sql语句。如果不指定j,则扫描到最新日志文件的最后一个位置。

第五步,执行生成的sql语句前滚数据,补数据完成。

从一个或多个从数据库选择一个作为新主数据库,将主数据库作为新从数据库。

向节点中所有资源管理器发出更新主从关系的请求。

在本实施例中,集群管理器对各个可用的从资源管理器下发补数据指令,各个资源管理器补数据以确保从数据与原主数据一致,完成后向集群管理器报告补数据结果,集群管理器选取补数据成功的从作为新主,下发切换主从数据库的请求。

根据本实施例的技术方案,检测分布式数据库各个节点的状态以及时发生异常,并根据主数据库的日志信息对从数据库同步后,选择从数据库作为新的主数据库,确保原主数据库和新主数据库的数据一致,以及对所有资源管理器发出变更主从关系的请求,从而维护分布式数据库中正常的主从关系。

以上参照附图说明了本发明的优选实施例,并非因此局限本发明的权利范围。本领域技术人员不脱离本发明的范围和实质,可以有多种变型方案实现本发明,比如作为一个实施例的特征可用于另一实施例而得到又一实施例。凡在运用本发明的技术构思之内所作的任何修改、等同替换和改进,均应在本发明的权利范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1