本发明涉及数据库技术领域,尤其涉及一种数据库故障自动切换方法、装置和计算机存储介质。
背景技术:
现有的mysql数据库,有多种高可用管理方案,常用的主要有以下两种:
1、keepalive。该方案可以在主库宕机时切换到从库,但没法在数据库挂了而服务器正常存活的情况下进行切换。如果一个主库有多个从库,则没法把其它从库切换到新的主库进行主从复制。对于主从同步延迟所存在的数据不一致,也不会进行数据补全从而达到数据的一致性。
2、mha。mha是最常用的mysql数据库高可用管理方案。mha解决了keepalive的缺点,在数据库挂了而服务器存活的情况下可以切换,对有多个从库的情况也能把其它从库切换到新的主库进行主从同步,并补全数据,以使用数据保持一致性。mha通常配合vip(虚拟ip)来使用,以便切换后,应用无须修改主库地址配置重启便能把流量切换到新的主库。除了切换vip,关机与发送通知等脚本需要自行开发外,mha主要的缺点为,无法确保主库确实宕机了才切换。当判断错误时,就会出现新旧主库同时存活,出现了数据双写的情况,导致数据混乱。
因此,现有技术中还存在新旧主库同时存活时出现数据双写的情况,导致数据混乱的问题。
技术实现要素:
本发明主要目的在于提供一种数据库故障自动切换方法、装置和计算机存储介质,旨在解决现有技术中还存在新旧主库同时存活时出现数据双写的情况,导致数据混乱的问题。
为实现上述目的,本发明提供一种数据库故障自动切换方法,所述数据库故障自动切换方法包括以下步骤:
当检测到主库所在的服务器出现故障时,进行故障切换;以及以下步骤的至少之一:
在进行故障切换的同时调用关机api关闭主库服务器;
对所述主库服务器中与写数据相关的操作进行阻止。
在一实施例中,检测主库所在的服务器是否出现故障,包括:
mha管理节点实时检测主库服务器是否可达;
当检测到所述主库服务器不可达时,登录二次检查服务器再次检测所述主库服务器是否可达;
当所述二次检查服务器检测到所述主库服务器不可达时,则判定所述主库服务器出现故障。
在一实施例中,所述进行故障切换的步骤包括:
保存所述主库的二进制日志事件;
根据预设规则从预设数量的从库中选择出新主库;
从所述新主库中读取差异中继日志复制到剩余从库中;
将所述二进制日志事件复制到所述新主库中;
根据所述新主库中的数据对所述剩余从库进行补全数据操作,并切换为从新主库同步数据。
在一实施例中,根据预设规则从预设数量的从库中选择出新主库的步骤包括:
从预设数量的从库中选择含有最新数据的从库作为新主库。
在一实施例中,根据预设规则从预设数量的从库中选择出新主库的步骤包括:
预先从预设数量的从库中指定一个从库作为新主库。
在一实施例中,调用关机api关闭主库服务器的步骤包括:
mha管理节点并发调用预设数量的关机api对所述主库服务器进行远程关机;
其中,多个关机api的关机操作是幂等的。
在一实施例中,所述对所述主库服务器中与写数据相关的操作进行阻止的步骤包括:
自杀进程根据预设时间间隔并发调用预设数量的健康检查服务的健康检查api进行通信健康检查;
当所述预设数量的健康检查服务的健康检查api在连续预设次数检查到所述自杀进程与外界通信失败时,则初步判定所述自杀进程处于网络孤岛的困境;
自杀进程断开所述主库服务器上所有数据库实例的连接,等待预设时间再检查是否有来自应用的连接;
当检查到没有来自应用的连接时,则最终判定所述自杀进程处于网络孤岛困境;
设置所述主库服务器上所有数据库实例为只读,不允许变更数据;
执行以下步骤,当某个动作执行失败则继续往下执行动作,直至有一个动作执行成功为止:
摘取所述主库服务器上的所有虚拟ip;
关闭所述主库服务器上所有数据库实例;
关闭所述主库服务器。
在一实施例中,还包括:
当所述故障切换完成后,发送故障切换结果通知。
为实现上述目的,本发明还提供一种装置,所述装置包括存储器、处理器以及存储在所述存储器并可在所述处理器上运行的数据库故障自动切换程序,所述数据库故障自动切换程序被所述处理器执行时实现如上所述的数据库故障自动切换方法的各个步骤。
为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有数据库故障自动切换程序,所述数据库故障自动切换程序被处理器执行时实现如上所述的数据库故障自动切换方法的各个步骤。
本发明提供的数据库故障自动切换方法、装置和计算机存储介质,当mha管理节点检测到主库服务器发生故障时,从从库中选择一个从库切换成新的主库,进行从新主从同步数据操作。在切换的同时mha管理节点会调用关机api关闭原来的主库;同时还通过自杀进程对主库服务器的写数据相关的操作进行阻止;以上两个措施只要成功一个即可,当某一个措施失败但另一个措施成功时,还是能够达到目的,从而解决了现有技术中还存在新旧主库同时存活时出现数据双写的情况,导致数据混乱的问题。
附图说明
图1为本发明实施例涉及的装置结构示意图;
图2为本发明数据库故障自动切换方法的第一实施例的流程示意图;
图3为本发明数据库故障自动切换方法的第二实施例的流程示意图;
图4为本发明数据库故障自动切换方法的第三实施例的流程示意图;
图5为本发明数据库故障自动切换方法的第四实施例的流程示意图;
图6为本发明数据库故障自动切换方法的第五实施例的流程示意图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例的主要解决方案是:当检测到主库所在的服务器出现故障时,进行故障切换;以及以下步骤的至少之一:在进行故障切换的同时调用关机api关闭主库服务器;对主库服务器中与写数据相关的操作进行阻止。由于当mha管理节点检测到主库服务器发生故障时,从从库中选择一个从库切换成新的主库,进行从新主从同步数据操作。在切换的同时mha管理节点会调用关机api关闭原来的主库;同时还通过自杀进程对主库服务器的写数据相关的操作进行阻止;以上两个措施只要成功一个即可,当某一个措施失败但另一个措施成功时,还是能够达到目的,从而解决了现有技术中还存在新旧主库同时存活时出现数据双写的情况,导致数据混乱的问题。
作为一种实现方式,可以如图1所示,图1是本发明实施例方案涉及的装置结构示意图。
处理器1100可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1100中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1100可以是通用处理器、数字信号处理器(dsp)、专用集成电路(asic)现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1200,处理器1100读取存储器1200中的信息,结合其硬件完成上述方法的步骤。
可以理解,本发明实施例中的存储器1200可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(readonlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(staticram,sram)、动态随机存取存储器(dynamicram,dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledataratesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。本发明实施例描述的系统和方法的存储器1200旨在包括但不限于这些和任意其它适合类型的存储器。
对于软件实现,可通过执行本发明实施例所述功能的模块(例如过程、函数等)来实现本发明实施例所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
基于上述结构,提出本发明数据库故障自动切换方法的实施例。
参照图2,图2为本发明数据库故障自动切换方法的第一实施例,包括以下步骤:
步骤s110,当检测到主库所在的服务器出现故障时,进行故障切换。
在本实施例中,数据库故障自动切换主要是基于mha的mysql数据库高可用管理完成的,mha(masterhighavailability,主数据库高可用)是一款用于解决mysql数据库故障切换的高可用解决方案,它由日本dena公司youshimaton开发,是一套优秀的作为mysql高可用性环境下故障切换和主从提升的高可用软件。在mysql故障切换过程中,mha能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,mha能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
mha在应用时,其是由mhamanager(管理节点)和mhanode(数据节点)两个部分组成,其中mhamanager管理节点作用是负责定期检测mysql数据库集群中master(主库)节点的运行状态,在mha应用中,master可以进行读和写数据操作,而slave(从库)只能进行读数据操作,mhamanager只会监测master的运行情况。
mhamanager:通常单独部署在一台独立机器上管理多个master/salve集群,每个master/salve集群称为一个application(应用)。也可以部署在一台slave节点上。
mhanode:运行在每台mysql服务器之上/master/slave/manager,它通过监控具备解析和清理logs(日志)功能的脚本来加快故障转移。
所以当mhamanager(管理节点)检测到主库所在的服务器出现故障时,故障包括主库服务器硬件发生故障和无法通过ssh(安全外壳协议)访问的网络故障。而网络故障又分为可恢复和不可恢复。则当mhamanager(管理节点)检测到主库所在的服务器发生硬件故障和网络不可恢复故障时,mhamanager(管理节点)会调用mha主程序进行故障切换。
进行故障切换的步骤包括以下步骤:
步骤s111,保存所述主库的二进制日志事件。
在本实施中,mhanode(数据节点)在主库服务器发生故障时即主库宕机时保存主库的二进制日志事件。
步骤s112,根据预设规则从预设数量的从库中选择出新主库。
在本实施例中,在mha的应用中,可以从预设数量的从库中选择含有最新数据的从库作为新主库,例如,在mha的应用中,包含一个主库和三个从库,主库的日志到102,而三个从库分别只收到了100、101、99时,主库出现了故障,mhanode(数据节点)会识别每个从库的状态,选择日志最新的101对应的从库slave2作为新主库。还可以在预设数量的从库中预先指定一个从库作为新主库,例如,在mha的应用中,包含一个主库和三个从库,预先指定第一个从库slave1作为新主库。
步骤s113,从所述新主库中读取差异中继日志复制到剩余从库中。
在本实施例中,从新主库中读取差异中继日志复制到剩余从库中,在此是优选将mha与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,mha可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。例如,根据上述slave2含有最新日志101,slave1为100,slave3日志为99,先将日志101复制到slave1中;将日志100、日志101复制到slave3中,保证了数据的一致性。
步骤s114,将所述二进制日志事件复制到所述新主库中。
在本实施例中,将从主库保存的二进制日志事件复制到新主库中,例如,根据上述主库服务器发生故障时主库的日志到102,当选择的新主库为slave2时,即将日志102复制到从库slave2中,当选择的新主库为slave1时,即将日志101、日志102复制到从库slave1中。
步骤s115,根据所述新主库中的数据对所述剩余从库进行补全数据操作,并切换为从新主库同步数据。
在本实施例中,根据新主库的数据对剩余从库进行补全数据操作,例如,将日志102复制到从库slave1和从库slave3中。将从库slave1和从库slave3指向新主库,进行从新主库同步数据操作。
以及以下步骤的至少之一:
步骤s120,在进行故障切换的同时调用关机api关闭主库服务器。
在本实施例中,在进行故障切换的同时mhamanager(管理节点)通过mhafailover程序(故障切换程序)调用管理服务器中的关机api关闭主库服务器。
步骤s130,对所述主库服务器中与写数据相关的操作进行阻止。
在本实施例中,主库服务器中含有killmysql程序(自杀进程),当主库服务器发生故障时,killmysql程序会对主库服务器与写数据的相关操作进行阻止。
在本实施例提供的技术方案中,由于当mha管理节点检测到主库服务器发生故障时,从从库中选择一个从库切换成新的主库,进行从新主从同步数据操作。在切换的同时mha管理节点会调用关机api关闭原来的主库;同时还通过自杀进程对主库服务器的写数据相关的操作进行阻止;以上两个措施只要成功一个即可,当某一个措施失败但另一个措施成功时,还是能够达到目的,从而解决了现有技术中还存在新旧主库同时存活时出现数据双写的情况,导致数据混乱的问题。
参照图3,图3为本发明数据库故障自动切换方法的第二实施例,包括:
与第一实施例相比,第二实施例包含步骤s210,步骤s220,步骤s230,其他步骤与第一实施例相同,不再赘述。
步骤s210,mha管理节点实时检测主库服务器是否可达。
在本实施例中,mha管理节点实时检测主库服务器ssh(安全外壳协议)的数据是否可达,若主库服务器ssh的数据可达,则表明主库服务器正常工作;若主库服务器ssh的数据不可达,则可能的原因是主库服务器的硬件发生故障或者网络故障,造成主库宕机。
步骤s220,当检测到所述主库服务器不可达时,登录二次检查服务器再次检测所述主库服务器是否可达。
在本实施例中,当mha管理节点检测到主库服务器ssh的数据不可达时,则通过mha管理节点中的mha主程序登录二次检查服务器再次检测主库服务器ssh的数据是否可达,若主库服务器ssh的数据可达,则第一次检测时出现了网络问题,现在已经恢复了;若主库服务器ssh的数据不可达,则可能的原因是主库服务器的硬件发生故障或者不可恢复的网络故障,造成主库宕机。
步骤s230,当所述二次检查服务器检测到所述主库服务器不可达时,则判定所述主库服务器出现故障,进行故障切换。
在本实施例中,当二次检查服务器检测到主库服务器ssh的数据不可达时,则判定主库服务器出现故障,造成主库宕机,进行故障切换。
以及以下步骤的至少之一:
步骤s240,在进行故障切换的同时调用关机api关闭主库服务器。
步骤s250,对所述主库服务器中与写数据相关的操作进行阻止。
在本实施例提供的技术方案中,通过mha管理节点实时检测主库服务器是否可达,当第一次检测到主库服务器不可达时,则通过mha管理节点中的mha主程序登录二次检查服务器再次检测主库服务器是否可达,当二次检测到主库服务器不可达时,则判定主库服务器出现故障,造成主库宕机,进行故障切换。通过两次检测判断主库服务器是否可达,保证了判断的准确性,避免第一次检测判断错误时就直接进行故障切换。
参照图4,图4为本发明数据库故障自动切换方法的第三实施例,包括:
步骤s310,当检测到主库所在的服务器出现故障时,进行故障切换。
以及以下步骤的至少之一:
与第一实施例相比,第三实施例包含步骤s320,其他步骤与第一实施例相同,不再赘述。
步骤s320,mha管理节点并发调用预设数量的关机api对所述主库服务器进行远程关机;其中,多个关机api的关机操作是幂等的。
在本实施例中,关机api服务(shutdownserver)提供以下功能:1、鉴权、检查用户密码是否正确,是否有权限查询管理ip,是否有权限关机;2、查询服务器的管理ip;3、远程关闭服务器。
每台数据库服务器都会部署getserverinfo程序(获取服务器的信息程序),该程序定时收集本机的ip与管理ip,查询cmdb数据库(配置管理数据库)中有没有存在本机ip与管理ip,如果不存在则插入,如果存在则检查是否一致,不一致则更新cmdb中的记录。插入与更新cmdb中的记录会发邮件与微信通知dba(数据库管理员)。
关机api会定时全量拉取cmdb数据库服务器ip与管理ip对应关系,并缓存在本地。当收到查询管理ip或者关机请求时,会先从cmdb中查询管理ip,如失败则从本地缓存中取出管理ip。
收到查询管理ip或者关机请求时,会检验用户的密码与权限。检验成功,则执行请求,如收到关机请求,会取出管理ip,多个不同服务器分别部署关机api服务,通过mha管理节点中的mhafailover程序(故障切换程序)同时并发调用所配置的所有关机api通过ipmi(智能管理平台接口)进行远程关机,其中,多个关机api的关机操作是幂等的。并且ipmi远程关机网络与数据库对外通信网络独立,数据库对外通信的网络故障时,ipmi的独立网络仍能与数据库所在服务器通信,从而能够远程关机。例如,优选含有3个关机api服务,防止单点故障关机不成功,只要三个中有一个api关机成功即可。
步骤s330,对所述主库服务器中与写数据相关的操作进行阻止。
在本实施例提供的技术方案中,通过mha管理节点中的mhafailover程序(故障切换程序)同时并发调用所配置的所有关机api通过ipmi(智能管理平台接口)进行远程关机,其中,多个关机api的关机操作是幂等的。只要其中一个api关机成功就能达到关闭主库服务器的目的。
参照图5,图5为本发明数据库故障自动切换方法的第四实施例,包括:
步骤s410,当检测到主库所在的服务器出现故障时,进行故障切换。
步骤s420,在进行故障切换的同时调用关机api关闭主库服务器。
与第一实施例相比,第四实施例包含步骤s430,步骤s440,步骤s450,步骤s460,步骤s470,步骤s480,步骤s490,步骤s4100,其他步骤与第一实施例相同,不再赘述。
步骤s430,自杀进程根据预设时间间隔并发调用预设数量的健康检查服务的健康检查api进行通信健康检查。
在本实施例中,killmysql程序(自杀进程)提供以下功能:1、检查自己是否处于网络孤岛的困境;2、设置本机上所有mysql为只读;3、摘取本机上所有的vip(虚拟ip);4关闭本机上所有mysql实例;5、shutdown(关闭)本机。
自杀进程killmysql根据预设时间间隔并发调用预设数量的健康检查服务(healthcheck服务)的健康检查api,每一轮都是并发请求所有的healthcheck服务的健康检查api,预设时间间隔可优选为3秒,预设数量可优选为3个,即配置3个healthcheck服务。
步骤s440,当所述预设数量的健康检查服务的健康检查api在连续预设次数检查到所述自杀进程与外界通信失败时,则初步判定所述自杀进程处于网络孤岛的困境。
在本实施例中,可优选为当3个健康检查服务的健康检查api在连续5次检查到killmysql程序(自杀进程)与外界通信失败时,则初步判定自杀进程处于网络孤岛的困境。
步骤s450,自杀进程断开所述主库服务器上所有数据库实例的连接,等待预设时间再检查是否有来自应用的连接。
在本实施例中,killmysql程序(自杀进程)断开主库服务器上所有数据库(mysql)实例的连接,可优选为等待30秒再检查是否有来自应用的连接,如果有,则取消认定自杀进程处于网络孤岛的困境;如果没有,则最终认定自己处于网络孤岛的困境。
步骤s460,当检查到没有来自应用的连接时,则最终判定所述自杀进程处于网络孤岛困境。
在本实施例中,当预设时间内检查到自杀进程没有来自应用的连接时,则最终判定自杀进程处于网络孤岛的困境。
步骤s470,设置所述主库服务器上所有数据库实例为只读,不允许变更数据。
在本实施例中,mhamanager(管理节点)设置主库服务器上所有数据库(mysql)实例为只读,不允许变更数据。
执行以下步骤,当某个动作执行失败则继续往下执行动作,直至有一个动作执行成功为止:
步骤s480,摘取所述主库服务器上的所有虚拟ip。
在本实施例中,mhamanager(管理节点)摘取主库服务器上的所有vip(虚拟ip)。
步骤s490,关闭所述主库服务器上所有数据库实例。
在本实施例中,mhamanager(管理节点)关闭主库服务器上所有数据库(mysql)实例。
步骤s4100,关闭所述主库服务器。
在本实施例中,mhamanager(管理节点)关闭主库服务器。
在本实施例提供的技术方案中,由于自杀进程根据预设时间间隔并发调用预设数量的健康检查服务的健康检查api进行通信健康检查;当预设数量的健康检查服务的健康检查api在连续预设次数检查到自杀进程与外界通信失败时,则初步判定自杀进程处于网络孤岛的困境;自杀进程断开主库服务器上所有数据库实例的连接,等待预设时间再检查是否有来自应用的连接;当检查到没有来自应用的连接时,则最终判定自杀进程处于网络孤岛困境;设置所述主库服务器上所有数据库实例为只读,不允许变更数据;执行以下步骤,当某个动作执行失败则继续往下执行动作,直至有一个动作执行成功为止:摘取主库服务器上的所有虚拟ip;关闭主库服务器上所有数据库实例;关闭主库服务器。通过以上步骤保证最大可能避免主库数据可写。
参照图6,图6为本发明数据库故障自动切换方法的第五实施例,包括:
步骤s510,当检测到主库所在的服务器出现故障时,进行故障切换。
步骤s520,在进行故障切换的同时调用关机api关闭主库服务器。
步骤s530,对所述主库服务器中与写数据相关的操作进行阻止。
与第一实施例相比,第五实施例包含步骤s540,其他步骤与第一实施例相同,不再赘述。
步骤s540,当所述故障切换完成后,发送故障切换结果通知。
在本实施例中,当故障切换步骤完成过后,可以通过邮件与微信等发送故障切换结果数据库管理员(dba)。例如,根据上述,将从库slave2切换为新主库,从库slave1、从库slave3指向新主库slave2,将这个切换结果通过邮件与微信发送给数据库管理员。
在本实施例提供的技术方案中,当故障切换步骤完成过后,可以通过邮件与微信等发送故障切换结果数据库管理员(dba)。数据库管理人员第一时间能够接收到故障切换结果,便于后续管理工作的进行。
本发明还提供一种装置,所述装置包括存储器、处理器以及存储在所述存储器并可在所述处理器上运行的数据库故障自动切换程序,所述数据库故障自动切换程序被所述处理器执行时实现如上所述的数据库故障自动切换方法的各个步骤。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有数据库故障自动切换程序,所述数据库故障自动切换程序被处理器执行时实现如上所述的数据库故障自动切换方法的各个步骤。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
应当注意的是,在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的单词“一”或“一个”不排除存在多个这样的部件。本发明可以借助于包括有若干不同部件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
1.一种数据库故障自动切换方法,其特征在于,所述数据库故障自动切换方法包括以下步骤:
当检测到主库所在的服务器出现故障时,进行故障切换;以及以下步骤的至少之一:
在进行故障切换的同时调用关机api关闭主库服务器;
对所述主库服务器中与写数据相关的操作进行阻止。
2.如权利要求1所述的数据库故障自动切换方法,其特征在于,检测主库所在的服务器是否出现故障,包括:
mha管理节点实时检测主库服务器是否可达;
当检测到所述主库服务器不可达时,登录二次检查服务器再次检测所述主库服务器是否可达;
当所述二次检查服务器检测到所述主库服务器不可达时,则判定所述主库服务器出现故障。
3.如权利要求1所述的数据库故障自动切换方法,其特征在于,所述进行故障切换的步骤包括:
保存所述主库的二进制日志事件;
根据预设规则从预设数量的从库中选择出新主库;
从所述新主库中读取差异中继日志复制到剩余从库中;
将所述二进制日志事件复制到所述新主库中;
根据所述新主库中的数据对所述剩余从库进行补全数据操作,并切换为从新主库同步数据。
4.如权利要求3所述的数据库故障自动切换方法,其特征在于,根据预设规则从预设数量的从库中选择出新主库的步骤包括:
从预设数量的从库中选择含有最新数据的从库作为新主库。
5.如权利要求3所述的数据库故障自动切换方法,其特征在于,根据预设规则从预设数量的从库中选择出新主库的步骤包括:
预先从预设数量的从库中指定一个从库作为新主库。
6.如权利要求1所述的数据库故障自动切换方法,其特征在于,调用关机api关闭主库服务器的步骤包括:
mha管理节点并发调用预设数量的关机api对所述主库服务器进行远程关机;
其中,多个关机api的关机操作是幂等的。
7.如权利要求1所述的数据库故障自动切换方法,其特征在于,所述对所述主库服务器中与写数据相关的操作进行阻止的步骤包括:
自杀进程根据预设时间间隔并发调用预设数量的健康检查服务的健康检查api进行通信健康检查;
当所述预设数量的健康检查服务的健康检查api在连续预设次数检查到所述自杀进程与外界通信失败时,则初步判定所述自杀进程处于网络孤岛的困境;
自杀进程断开所述主库服务器上所有数据库实例的连接,等待预设时间再检查是否有来自应用的连接;
当检查到没有来自应用的连接时,则最终判定所述自杀进程处于网络孤岛困境;
设置所述主库服务器上所有数据库实例为只读,不允许变更数据;
执行以下步骤,当某个动作执行失败则继续往下执行动作,直至有一个动作执行成功为止:
摘取所述主库服务器上的所有虚拟ip;
关闭所述主库服务器上所有数据库实例;
关闭所述主库服务器。
8.如权利要求1所述的数据库故障自动切换方法,其特征在于,还包括:
当所述故障切换完成后,发送故障切换结果通知。
9.一种装置,其特征在于,所述装置包括存储器、处理器以及存储在所述存储器并可在所述处理器上运行的数据库故障自动切换程序,所述数据库故障自动切换程序被所述处理器执行时实现如权利要求1-8任一项所述的数据库故障自动切换方法的各个步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有数据库故障自动切换程序,所述数据库故障自动切换程序被处理器执行时实现如权利要求1-8任一项所述的数据库故障自动切换方法的各个步骤。
技术总结