CN109857523B - 一种用于实现数据库高可用性的方法及装置 - Google Patents
一种用于实现数据库高可用性的方法及装置 Download PDFInfo
- Publication number
- CN109857523B CN109857523B CN201711239837.1A CN201711239837A CN109857523B CN 109857523 B CN109857523 B CN 109857523B CN 201711239837 A CN201711239837 A CN 201711239837A CN 109857523 B CN109857523 B CN 109857523B
- Authority
- CN
- China
- Prior art keywords
- database server
- logs
- log
- transaction
- slave
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种用于实现数据库高可用性的方法和装置,其中所述方法包括:主数据库服务器并发向复数个从数据库服务器发送已生成的日志;在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收;若是,所述主数据库服务器完成所述事务提交。本申请可提高事务提交的效率,进而提升主数据库服务器的性能。
Description
技术领域
本申请涉及数据库,具体涉及一种实现数据库高可用性的方法及装置。
背景技术
随着现代计算机科学技术的发展,数据库已逐步成为计算机信息系统的基础和核心,被广泛应用于电信、金融、政府等行业。数据库应用的高可用性也越来越引起人们的关注。
现有技术中,对可用性要求高的用户(如金融用户),其数据库一般采用一主多从架构(如图1所示),来提供高可用性的服务。正常情况下,由主数据库服务器(称为主库)对外服务。如果对外服务的进程执行了对数据的更改,则会在把更改写入数据库存储前,先写入到事务日志中。主数据库服务器产生的日志,不断通过网络连接,发送给从数据库服务器(称为备库)。从数据库服务器接收到日志后,将其进行回放,以使其数据跟主数据库服务器同步。
在主数据库服务器发生宕机等异常情况时,无法对外服务时,需要切换到从数据库服务器,由从数据库服务器继续提供服务,从而实现高可用性。为使切换后从数据库服务器的状态与主数据库服务器的最后状态一致,要保证从数据库服务器已经有主数据库服务器的所有日志。为此,在正常情况下主数据库服务器对外服务时,在提交一个事务的过程中,就要先等待多个从数据库服务器中的至少一个收到完成事务提交前需要发送到从数据库服务器的所有日志,然后才完成提交过程,通知客户端。
现有技术提供的数据库高可用性的方案中存在一些缺陷:在一主多从架构中,主数据库服务器和从数据库服务器之间经常会发生由于网络不稳定(如丢失数据包)、网络瓶颈、或者从数据库服务器达到性能瓶颈(如CPU利用率达到峰值)而导致部分日志无法及时发送到从数据库服务器的现象。这时主库只能等待或不断重试,直到至少一个从数据库服务器收到需要发送到从数据库服务器的所有日志。而事务在此期间也无法完成提交,因此这很大程度上降低了主库的性能。
如图2所示,从数据库服务器1收到了日志1和4,从数据库服务器2收到2和3,其他日志还在发送或重试发送中。此时,主数据库服务器仍要等待日志1到4在从数据库服务器1或2中的一个被全部接收,才能继续日志4对应的事务已提交,这很大程度上降低了主数据库服务器的性能。
发明内容
本申请提供一种实现数据库高可用性的方法,以解决现有由于主数据库服务器和从数据库服务器之间存在网络问题时或从数据库服务器达到性能瓶颈而导致的主库性能降低的问题。
本申请提供的一种用于实现数据库高可用性的方法,包括:
主数据库服务器并发向复数个从数据库服务器发送已生成的日志;
在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收;
若是,所述主数据库服务器完成所述事务提交。
可选的,所述主数据库服务器并发向复数个从数据库服务器发送已生成的日志,包括:
所述主数据库服务器通过并发日志发送进程或线程并发向复数个从数据库服务器发送已生成的日志。
可选的,所述主数据库服务器通过并发日志发送进程或线程并发向复数个从数据库服务器发送已生成的日志,包括:
所述主数据库服务器通过并发日志发送进程或线程以条数为单位并发向复数个从数据库服务器发送已生成的日志;或者
所述主数据库服务器通过并发日志发送进程或线程以字节为单位并发向复数个从数据库服务器发送已生成的日志。
可选的,主数据库服务器并发向复数个从数据库服务器发送已生成的日志,包括:
主数据库服务器通过两个线程并发向复数个从数据库服务器发送新生成的日志,其中一个线程发送奇数日志,另一个线程发送偶数日志。
可选的,所述主数据库服务器并发向复数个从数据库服务器发送已生成的日志,包括:
为每条已生成的日志设置一个状态参数,当一条日志被成功发送到一个从数据库服务器后,则增加此条日志对应的状态参数值。
可选的,所述判断完成所述事务提交前已生成的日志是否全部已被接收,具体为:
将所述并发日志发送进程或线程发送成功的日志集合做并集;
判断所述并集是否包含所述事务的最后一条日志及所有前置日志。
可选的,所述判断完成所述事务提交前已生成的日志是否全部已被接收,具体为:
判断所述事务的最后一条日志及所有前置日志是否全部发送到所述复数个从数据库服务器。
可选的,所述判断所述事务的最后一条日志及所有前置日志是否全部发送到所述复数个从数据库服务器,包括:
判断所述事务的最后一条日志以及所有前置日志对应的状态参数值是否大于预设值;
若是,判断为所述事务的最后一条日志及所有前置日志全部发送到所述复数个从数据库服务器。
可选的,所述方法还包括:
当主数据库服务器无法提供服务时,选取所述复数个从数据库服务器中的一个从数据库服务器作为新的主数据库服务器;
判断所述新的主数据库服务器是否包含所有已生成的日志;若否,所述新的主数据库服务器向其余从数据库服务器请求缺失日志;
若是,进行主数据库服务器与作为新的主数据库服务器的从数据库服务器的更替。
可选的,所述选取所述从数据库服务器中的一个从数据库服务器作为新的主数据库服务器,包括:
选取包含日志号最新的日志的从数据库服务器作为新的主数据库服务器。
可选的,所述进行主数据库服务器与作为新的主数据库服务器的从数据库服务器的更替,包括:
作为新的主数据库服务器的从数据库服务器进行日志回放;
将新的主数据库服务器设置为主数据库服务器。
此外,本申请还提供一种实现数据库高可用性的装置,其包括:
发送单元,用于主数据库服务器并发向复数个从数据库服务器发送已生成的日志;
判断单元,用于在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收;
提交单元,用于当判断单元的输出为是时,若是,所述主数据库服务器完成所述事务提交。
与现有技术相比,本申请具有以下优点:
本申请提供一种实现数据库高可用性的方法,所述方法包括:主数据库服务器并发向复数个从数据库服务器发送已生成的日志;在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收;若是,所述主数据库服务器完成所述事务提交。
本申请提供的实现数据库高可用性的方法,当所述主数据库服务器事务提交时,在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收;,若是,完成所述事务提交,本申请只需所有的从数据库服务器中包含完成所述事务提交前需要保存到从数据库服务器中的日志即可,而不需要等待其中的任何一个从数据库服务器成功接收完成所述事务提交前需要保存到从数据库服务器中的日志,从而提高了事务提交的效率,进而提升了主数据库服务器的性能。
附图说明
图1是一主多从数据库架构的示意图。
图2是主数据库服务器向从数据库服务器发送日志的示意图。
图3是本申请第一实施例提供的一种实现数据库高可用性的方法的流程图。
图4是本申请第一实施例提供的一种实现数据库高可用性的装置的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施的限制。
在本申请实施例中,分别提供了一种实现数据库高可用性的方法以及一种实现数据库高可用性的装置。在下面的实施例中逐一进行详细说明。为了便于理解,先对本申请实施例提供的技术方案作简要说明。
现有技术中,对可用性要求高的用户,其数据库一般采用一主多从架构来提供高可用性的服务。在正常情况下主数据库服务器对外服务时,在提交一个事务的过程中,就要先等待多个备库中的至少一个收到完成事务提交前需要发送到从数据库服务器的所有日志,然后才完成提交过程,通知客户端。
现有技术中一主多从架构中,主数据库服务器和备库之间经常会发生由于网络不稳定(如丢失数据包)、网络瓶颈、或者备库达到性能瓶颈(如CPU利用率达到峰值)而导致部分日志无法及时发送到备库的现象。这时主库只能等待或不断重试,直到至少一个备库收到所有日志。而事务在此期间也无法完成提交,因此这很大程度上降低了主库的性能。
针对现有技术存在的上述问题,本申请实施例提供了一种实现数据库高可用性的方法,本申请提供的方法,在事务提交的过程中,不需要将完成事务提交前需要发送到从数据库服务器的日志放到一个备库中,日志可以并发到多个备库,只要多个从数据库服务器包含完成事务提交前需要发送到从数据库服务器的所有日志即可。例如,某一事务的日志为日志1、日志2、日志3、日志4,现有技术中,需要将日志1至4都发送到同一个从数据库服务器中,如果设置了两个从数据库服务器,其中一个接收到了日志1和2,另一个接收到了日志3和4,如果主数据库服务器和从数据库服务器之间发生了网络不稳定,则主数据库服务器只能等待或不断重试,直到至少一个从数据库服务器收到所有日志,影响了主数据库服务器的性能;但是本申请提供的方法,如果设置了两个从数据库服务器,其中一个接收到了日志1和2,另一个接收到了日志3和4,此时由于两个从数据库服务器接收到的日志并集包含了日志1至4,如果主数据库服务器和从数据库服务器之间发生了网络不稳定,则不需要再等待,即可完成事务提交,提高了主数据库服务器性能。
本申请第一实施例提供了一种实现数据库高可用性的方法。本实施例采用一主多从数据库架构,即包括一个主数据库服务器和多个从数据库服务器。请参考图3,其示出了根据本申请的实施例提供的一种实现数据库高可用性的方法的流程图。以下结合图3进行详细说明。
步骤S301,主数据库服务器并发向复数个从数据库服务器发送已生成的日志。
本步骤主数据库服务器并发向多个从数据库服务器发送已生成的事务日志(以下简称日志),为主数据库服务器发生宕机时,进行主备切换做好了准备。
所述数据库服务器,由运行在局域网中的一台或多台计算机和数据库管理系统软件共同构成,数据库服务器为客户应用提供服务,提供的服务包括查询、更新、事务管理、索引、高速缓存、查询优化、安全及多用户存取控制等。
所述主数据库服务器,直接为客户应用提供服务的数据库服务器。可以为多用户提供事务并发处理。
所述从数据库服务器,接收主数据库服务器发送的日志,用于在主数据库服务器无法提供服务(例如,服务器发生宕机)时,将某一从数据库服务器升级为主数据库服务器,实现数据库的高可用性。为了使数据库服务器尽快地接收主数据库服务器发送的日志,从数据库服务器最少设置为2个,具体数量可以根据需求进行设置。
所述日志,记录了事务中的操作对一条数据记录的修改,其中包含了数据记录的主键,和更新操作的具体信息。每条日志都对应一个事务号。例如,当事务1执行删除指令时,生成了一条记录删除指令具体信息的日志2,则日志2对应的事务为事务1。其中,事务(数据库事务),通常指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个或者全部成功或者全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
所述已生成的日志,可以指用户连接到主数据库服务器后进行操作不断产生的日志,一般是多个用户连接到主数据库服务器进行并发操作不断产生的日志,包括所有事务产生的日志,如果主数据库服务器在并发处理多个事务,则指多个事务的日志。例如,如果主数据库服务器在同时处理三个事务:事务1、事务2、事务3,事务1生成了日志1、3、6;事务2生成了日志2、7、8;事务3生成了日志4、5,则已生成的日志为日志1至8。
所述主数据库服务器并发向复数个从数据库服务器发送已生成的日志,指主数据库服务器向多个从数据库服务器都发送已生成的日志。主数据库服务器在进行事务处理时不断生成日志,主数据库服务器将已经生成的日志并发发送到多个从数据库服务器,从数据库服务器对已生成的日志进行接收并将其存储到从数据库服务器。例如,一主多从架构中,存在一个主数据库服务器,以及从数据库服务器1、从数据库服务器2、从数据库服务器3,在进行事务处理时生成了日志1、日志2、日志3,则主数据库服务器将日志1、日志2、日志3并发给从数据库服务器1、2、3。
在主数据库服务器并发向多个从数据库服务器发送已生成的日志时,可以通过并发日志发送进程或线程进行发送,可以使用某一个线程或进程或某几个线程或进程并发向多个从数据库服务器发送已生成的日志。当使用一个线程或进程发送已生成的日志时,由一个线程并发向所有从数据库服务器发送所有已生成的日志。当使用多个线程并发发送已生成的日志时,由多个线程分担已生成的日志,可以提高发送效率。
在具体实施中,优选的,主数据库服务器通过两个并发日志发送线程向多个从数据库服务器发送所有已生成的日志。其中,一个线程用于发送日志号为奇数的日志,另一个线程用于发送日志号为偶数的日志。例如,线程1用于发送日志号为奇数的日志,则生成的日志号为1、3、5等的奇数日志,通过线程1进行发送,线程2用于发送日志号为偶数的日志,则生成的日志号为2、4、6等的偶数日志,通过线程2进行发送。
主数据库服务器通过并发日志发送进程或线程并发向多个从数据库服务器发送已生成的日志,可以以条数为单位或者以字节为单位并发向多个从数据库服务器发送已生成的日志。当以条数为单位并发向所有从数据库服务器发送已生成的日志,可以设置每次发送的条数,例如1条或5条。当设置每次发送的条数为5条时,当新生成的日志为5条时发送一次。当以字节为单位并发向所有从数据库服务器发送已生成的日志,可以设置每次发送的字节数,例如,设置以1M(兆)或100K字节为单位进行发送,即当新生成的日志大小为1M(兆)或100K字节时,通过线程向所有从数据库服务器发送一次已生成的日志。
具体实施时,开发人员可以根据需求设置并发日志发送进程或线程的数量和发送的方式,只要能实现主数据库服务器并发向所有从数据库服务器发送已生成的日志即可。
通过本步骤,实现了将主数据库服务器生成的日志并发发送到从数据库服务器,从而在从数据库服务器中保留了日志的副本,当主数据库服务器发生宕机时,就可以实现主数据库服务器与从数据库服务器的切换。
步骤S302,在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收,若是,执行步骤S303。
当一个事务所包含的一系列操作成功执行后,就可以完成事务提交以保存已执行的操作产生的结果。其中,事务执行是指对数据的更改、添加等操作,执行的结果一般保存在内存等临时存储介质中。事务提交是指将数据执行的结果保存至数据库,相当于落盘,使得事务执行对数据库的变更永久化,事务提交完成后事务执行的结果将为其它事务可见。
当所述主数据库服务器完成事务提交前,首先判断完成所述事务提交前已生成的日志是否全部已被接收,若是完成事务提交。因为如果完成所述事务提交前需要保存到从数据库服务器中的日志未全部发送到所述复数个从数据库服务器,就完成事务提交,会导致某些日志没有发送到从数据库服务器,在进行主备切换时,产生主备数据库服务器不同步的问题。
完成所述事务提交前已生成的日志,通常指正在提交的事务的最后一条日志及所有前置日志(最后一条日志之前的所有日志),这些日志需要保存到从数据库服务器中,因此判断完成所述事务提交前已生成的日志是否全部已被接收,,可以首先将所述并发日志发送进程或线程发送成功的日志集合做并集;然后判断所述并集是否包含所述事务的最后一条日志及所有前置日志。例如,如果主数据库服务器通过进程1和进程2发送已生成的日志,当前提交的事务的最后一条日志的日志号为100,则所有前置日志为日志号为0至99的日志,只有当进程1成功发送的日志集合和进程2成功发送的日志集合的并集中包含日志号0至100的日志,才能完成事务提交。确定通过日志发送进程发送的日志是否发送成功,可以通过当从数据库收到日志时向进程发送反馈信号来确定。
判断完成所述事务提交前已生成的日志是否全部已被接收,还可以通过判断正在提交的事务的最后一条日志及所有前置日志是否全部发送到所述从数据库服务器来确定。具体的,可以为每条待发送的日志设置一个状态参数,用来表示接收到此日志的从数据库服务器的数量,例如将状态参数名设置为number_set,并设定初始值为0;当某条日志被成功发送到一个从数据库服务器后,则增加此条日志对应的状态参数值。例如有一条新生成的日志5,设置它的number_set为0,当第一个从数据库服务器接收到日志5时,number_set增加1,变为1,当第二个从数据库服务器接收到日志5时,number_set再增加1,变为2,则说明有两个从数据库服务器接收到了日志5。
在为每条待发送的日志设置一个状态参数后,判断完成所述事务提交前的最后一条日志及所有前置日志是否全部发送到所述从数据库服务器,可以通过判断所述正在提交的事务的最后一条日志以及所有前置日志对应的状态参数值是否大于预设值(如果初始值为0,可将预设值设为0)。如果上述每条日志对应的状态参数值都大于预设值,则说明上述的每条日志都成功发送到从数据库服务器,可以完成事务提交;如果某些日志对应的状态参数值等于或小于预设值,则说明还有日志没有成功发送到从数据库服务器,需要继续等待。
例如,设定预设值为0,当事务提交时,如果经过检查正在提交的事务的最后一条日志及所有前置日志的状态参数值都大于0,则完成事务提交;如果经过检查正在提交的事务的最后一条日志的状态参数值为1,其中有一条以上的前置日志的状态参数为0,则说明还有某些日志没有发送成功,需要继续等待全部发送成功后完成事务提交。
通过对步骤S302的介绍,本申请提供的方法只需检查多个从数据库服务器中的日志并集是否包含完成事务提交前需要保存到从数据库服务器的所有日志,而不需要将完成事务提交前需要保存到从数据库服务器的所有日志成功发送到某一个从数据库服务器,提高了事务提交的效率,尤其是在主数据库服务器并发处理多个不同用户的事务时,如果每一个事务提交的效率都提高,会极大提升了主数据库服务器的性能。
步骤S303,所述主数据库服务器完成所述事务提交。
当通过步骤S302判断完成所述事务提交前需要保存到从数据库服务器中的日志全部发送到多个从数据库服务器后,就可以完成事务提交,否则需要继续等待,直到上述所有日志全部发送到多个从数据库服务器后再完成提交。
当主数据库服务器无法提供服务需要切换到从数据库服务器时,从多个从数据库服务器中选取一个从数据库服务器作为新的主数据库服务器。检查该从数据库服务器是否包含所有日志(即含有最新日志号之前的所有日志),如果有缺失日志,则向其他从数据库服务器请求缺失日志。待该从数据库服务器接收到所有日志并回放后,则进行主备切换,将该从数据库服务器设置为主数据库服务器,对外提供服务。所述回放,指当主数据库服务器无法提供服务需要切换到从数据库服务器时,需要对事务涉及到的数据进行“整理”,实现整理的过程称之为“日志回放”。通过从后向前回放日志,直到找到commit点为止,这样就保证了数据一致性。
优选方案中,选取包含最新日志号(最大日志号)的日志的从数据库服务器作为新的主数据库服务器。因为包含最新日志号的日志的从数据库服务器可能会包含所有日志,省去了向其他从数据库服务器请求缺失日志的步骤,提高了效率。
至此,对本实施例提供的一种实现数据库高可用性的方法的实施方式进行了详细说明。本申请提供的方法,在事务提交的过程中,不需要将完成事务提交前需要发送到从数据库服务器的日志放到某一个从数据库服务器中,日志可以并发到多个从数据库服务器,只要多个从数据库服务器包含完成事务提交前需要发送到从数据库服务器的所有日志即可,提高了事务提交的效率,尤其是主数据库服务器和从数据库服务器之间发生了网络不稳定等问题时,主数据库服务器省去了等待或不断重试的时间,提升了主数据库服务器的性能。
与上述实现数据库高可用性的方法相对应的,本申请还提供了一种实现数据库高可用性的装置。由于所述装置的实施例基本相似于方法的实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。所述一种实现数据库高可用性的装置实施例如下:
请参考图4,其示出了根据本申请的第二实施例提供的一种实现数据库高可用性的装置的示意图。
所述实现数据库高可用性的装置,包括:发送单元401,判断单元402,提交单元403。
发送单元401,用于主数据库服务器并发向复数个从数据库服务器发送已生成的日志;
判断单元402,用于在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收;
提交单元403,用于当判断单元的输出为是时,若是,所述主数据库服务器完成所述事务提交。
可选的,所述发送单元,具体用于:
所述主数据库服务器通过并发日志发送进程或线程并发向复数个从数据库服务器发送已生成的日志。
可选的,所述发送单元中的所述进程或线程的数量至少为一个。
可选的,所述发送单元,包括:
条数发送子单元,用于所述主数据库服务器通过并发日志发送进程或线程以条数为单位并发向复数个从数据库服务器发送已生成的日志;或者
字节发送子单元,用于所述主数据库服务器通过并发日志发送进程或线程以字节为单位并发向复数个从数据库服务器发送已生成的日志。
可选的,所述发送单元,具体用于:
主数据库服务器通过两个线程并发向复数个从数据库服务器发送新生成的日志,其中一个线程发送奇数日志,另一个线程发送偶数日志。
可选的,所述装置,还包括:
设置单元,用于为每条已生成的日志设置一个状态参数,当一条日志被成功发送到一个从数据库服务器后,则增加此条日志对应的状态参数值。
可选的,所述判断单元,具体用于:
在所述主数据库服务器完成事务提交之前,将所述并发日志发送进程或线程发送成功的日志集合做并集;
判断所述并集是否包含所述事务的最后一条日志及所有前置日志。
可选的,所述判断单元,具体用于:
在所述主数据库服务器完成事务提交之前,判断所述事务的最后一条日志及所有前置日志是否全部发送到所述从数据库服务器。
可选的,所述判断单元,具体用于:
判断所述事务的最后一条日志以及所有前置日志对应的状态参数值是否大于预设值;
若是,判断为所述事务的最后一条日志及所有前置日志全部发送到所述复数个从数据库服务器。
可选的,所述装置还包括:
选取单元,用于当主数据库服务器无法提供服务时,选取所述复数个从数据库服务器中的一个从数据库服务器作为新的主数据库服务器;
判断单元,用于判断所述新的主数据库服务器是否包含所有已生成的日志;请求单元,用于当判断单元的输出为否时,所述新的主数据库服务器向其余从数据库服务器请求缺失日志;
更替单元,用于当判断单元的输出为是时,进行主数据库服务器与作为新的主数据库服务器的从数据库服务器的更替。
可选的,所述选取单元,具体用于:
选取包含日志号最新的日志的从数据库服务器作为新的主数据库服务器。
可选的,所述更替单元,包括:
回放子单元,用于作为新的主数据库服务器的从数据库服务器进行日志回放;
升级子单元,用于将新的主数据库服务器设置为主数据库服务器。
本发明虽然以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和修改,因此本发明的保护范围应当以本发明权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (9)
1.一种用于实现数据库高可用性的方法,其特征在于,包括:
主数据库服务器并发向复数个从数据库服务器发送已生成的日志;
在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收;
若是,所述主数据库服务器完成所述事务提交;
其中,所述主数据库服务器并发向复数个从数据库服务器发送已生成的日志,包括:
所述主数据库服务器通过并发日志发送进程或线程并发向复数个从数据库服务器发送已生成的日志;
所述判断完成所述事务提交前已生成的日志是否全部已被接收,具体为:
将所述并发日志发送进程或线程发送成功的日志集合做并集;判断所述并集是否包含所述事务的最后一条日志及所有前置日志判断所述事务的最后一条日志及所有前置日志是否全部发送到所述复数个从数据库服务器;
或,所述判断完成所述事务提交前已生成的日志是否全部已被接收,具体为:
判断所述事务的最后一条日志及所有前置日志是否全部发送到所述复数个从数据库服务器。
2.根据权利要求1所述的方法,其特征在于,所述主数据库服务器通过并发日志发送进程或线程并发向复数个从数据库服务器发送已生成的日志,包括:
所述主数据库服务器通过并发日志发送进程或线程以条数为单位并发向复数个从数据库服务器发送已生成的日志;或者
所述主数据库服务器通过并发日志发送进程或线程以字节为单位并发向复数个从数据库服务器发送已生成的日志。
3.根据权利要求1所述的方法,其特征在于,主数据库服务器并发向复数个从数据库服务器发送已生成的日志,包括:
主数据库服务器通过两个线程并发向复数个从数据库服务器发送新生成的日志,其中一个线程发送奇数日志,另一个线程发送偶数日志。
4.根据权利要求1-3任一所述的方法,其特征在于,所述主数据库服务器并发向复数个从数据库服务器发送已生成的日志,包括:
为每条已生成的日志设置一个状态参数,当一条日志被成功发送到一个从数据库服务器后,则增加此条日志对应的状态参数值。
5.根据权利要求1所述的方法,其特征在于,所述判断所述事务的最后一条日志及所有前置日志是否全部发送到所述复数个从数据库服务器,包括:
判断所述事务的最后一条日志以及所有前置日志对应的状态参数值是否大于预设值;
若是,判断为所述事务的最后一条日志及所有前置日志全部发送到所述复数个从数据库服务器。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当主数据库服务器无法提供服务时,选取所述复数个从数据库服务器中的一个从数据库服务器作为新的主数据库服务器;
判断所述新的主数据库服务器是否包含所有已生成的日志;若否,所述新的主数据库服务器向其余从数据库服务器请求缺失日志;
若是,进行主数据库服务器与作为新的主数据库服务器的从数据库服务器的更替。
7.根据权利要求6所述的方法,其特征在于,所述选取所述从数据库服务器中的一个从数据库服务器作为新的主数据库服务器,包括:
选取包含日志号最新的日志的从数据库服务器作为新的主数据库服务器。
8.根据权利要求6所述的方法,其特征在于,所述进行主数据库服务器与作为新的主数据库服务器的从数据库服务器的更替,包括:
作为新的主数据库服务器的从数据库服务器进行日志回放;
将新的主数据库服务器设置为主数据库服务器。
9.一种用于实现数据库高可用性的装置,其特征在于,包括:
发送单元,用于主数据库服务器并发向复数个从数据库服务器发送已生成的日志;
判断单元,用于在所述主数据库服务器完成事务提交之前,判断完成所述事务提交前已生成的日志是否全部已被接收;
提交单元,用于当判断单元的输出为是时,若是,所述主数据库服务器完成所述事务提交;
其中,所述主数据库服务器并发向复数个从数据库服务器发送已生成的日志,包括:
所述主数据库服务器通过并发日志发送进程或线程并发向复数个从数据库服务器发送已生成的日志;
所述判断完成所述事务提交前已生成的日志是否全部已被接收,具体为:
将所述并发日志发送进程或线程发送成功的日志集合做并集;
判断所述并集是否包含所述事务的最后一条日志及所有前置日志判断所述事务的最后一条日志及所有前置日志是否全部发送到所述复数个从数据库服务器;
或,所述判断完成所述事务提交前已生成的日志是否全部已被接收,具体为:
判断所述事务的最后一条日志及所有前置日志是否全部发送到所述复数个从数据库服务器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711239837.1A CN109857523B (zh) | 2017-11-30 | 2017-11-30 | 一种用于实现数据库高可用性的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711239837.1A CN109857523B (zh) | 2017-11-30 | 2017-11-30 | 一种用于实现数据库高可用性的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109857523A CN109857523A (zh) | 2019-06-07 |
CN109857523B true CN109857523B (zh) | 2023-05-09 |
Family
ID=66888340
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711239837.1A Active CN109857523B (zh) | 2017-11-30 | 2017-11-30 | 一种用于实现数据库高可用性的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857523B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112822227B (zh) * | 2019-11-15 | 2022-02-25 | 北京金山云网络技术有限公司 | 分布式存储系统的数据同步方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536971A (zh) * | 2014-12-02 | 2015-04-22 | 北京锐安科技有限公司 | 一种具备高可用性的数据库 |
CN106462449A (zh) * | 2014-06-26 | 2017-02-22 | 亚马逊科技公司 | 具有多项目事务支持的多数据库日志 |
CN106802892A (zh) * | 2015-11-26 | 2017-06-06 | 阿里巴巴集团控股有限公司 | 用于主备数据一致性校验的方法和设备 |
CN106815094A (zh) * | 2015-12-02 | 2017-06-09 | 阿里巴巴集团控股有限公司 | 一种用于实现主备同步模式下事务提交的方法与设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7831574B2 (en) * | 2006-05-12 | 2010-11-09 | Oracle International Corporation | Apparatus and method for forming a homogenous transaction data store from heterogeneous sources |
US20080140734A1 (en) * | 2006-12-07 | 2008-06-12 | Robert Edward Wagner | Method for identifying logical data discrepancies between database replicas in a database cluster |
-
2017
- 2017-11-30 CN CN201711239837.1A patent/CN109857523B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462449A (zh) * | 2014-06-26 | 2017-02-22 | 亚马逊科技公司 | 具有多项目事务支持的多数据库日志 |
CN104536971A (zh) * | 2014-12-02 | 2015-04-22 | 北京锐安科技有限公司 | 一种具备高可用性的数据库 |
CN106802892A (zh) * | 2015-11-26 | 2017-06-06 | 阿里巴巴集团控股有限公司 | 用于主备数据一致性校验的方法和设备 |
CN106815094A (zh) * | 2015-12-02 | 2017-06-09 | 阿里巴巴集团控股有限公司 | 一种用于实现主备同步模式下事务提交的方法与设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109857523A (zh) | 2019-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3968175B1 (en) | Data replication method and apparatus, and computer device and storage medium | |
CN110442560B (zh) | 一种日志重演方法、装置、服务器和存储介质 | |
US11768820B2 (en) | Elimination of log file synchronization delay at transaction commit time | |
US20120323849A1 (en) | Method For Maximizing Throughput And Minimizing Transaction Response Times On The Primary System In The Presence Of A Zero Data Loss Standby Replica | |
US10831741B2 (en) | Log-shipping data replication with early log record fetching | |
CN110019514B (zh) | 数据同步方法、装置以及电子设备 | |
EP4213038A1 (en) | Data processing method and apparatus based on distributed storage, device, and medium | |
US20110137874A1 (en) | Methods to Minimize Communication in a Cluster Database System | |
WO2020025049A1 (zh) | 数据同步的方法、装置、数据库主机及存储介质 | |
US7353285B2 (en) | Apparatus, system, and method for maintaining task prioritization and load balancing | |
CN106815094B (zh) | 一种用于实现主备同步模式下事务提交的方法与设备 | |
CN112883045B (zh) | 数据库事务拆分执行方法及装置 | |
US9330153B2 (en) | System, method, and computer readable medium that coordinates between devices using exchange of log files | |
WO2023116419A1 (zh) | 数据同步方法、设备及计算机可读存储介质 | |
CN115994053A (zh) | 数据库备机的并行回放方法、装置、电子设备及介质 | |
CN110121694B (zh) | 一种日志管理方法、服务器和数据库系统 | |
US20180121531A1 (en) | Data Updating Method, Device, and Related System | |
US10140183B2 (en) | Efficient state tracking for clusters | |
CN109857523B (zh) | 一种用于实现数据库高可用性的方法及装置 | |
US20180246949A1 (en) | Early thread return with secondary event writes | |
US20230137609A1 (en) | Data synchronization method and apparatus | |
CN114490540A (zh) | 数据存储方法、介质、装置和计算设备 | |
CN114661690A (zh) | 多版本并发控制和日志清除方法、节点、设备和介质 | |
JP6788188B2 (ja) | 制御装置および制御プログラム | |
CN112559457A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |