确定数据库主从差异的方法、装置及切换控制方法、装置
技术领域
本发明涉及计算机技术,更具体地,涉及一种确定数据库主从差异的方法、装置及切换控制方法、装置。
背景技术
如图1所示,数据库一般采用一主一从的主从架构来提供高可用性的服务。正常情况下,由主数据库实例(简称为主库)对外服务。如果对外服务的进程执行了对数据的更改(一般是通过一个“事务”来进行),则会在把更改写入数据库存储前,由日志写入与发送模块先写入到事务日志中,一般是以日志文件的形式保存,在一个日志文件写满后再写下一个日志文件。所述日志写入与发送模块不断通过网络连接,将主库产生的日志发送给从数据库实例(简称为从库,也可称为备库)。从库接收到日志后,将其进行回放,以使其数据与主库同步。在主库发生宕机等异常,无法对外服务时,需要切换到从库,由从库继续提供服务,从而实现高可用性。
主从如果采用同步的事务提交机制,则在一个数据库事务完成时,主库要等到事务日志到达从库后,才回复用户连接事务提交完成。但这种模式因事务完成时间较长导致性能较低。所以主从一般采用异步的事务提交机制,即在完成一个事务时,主库不等待日志发送到从库,即回复用户提交已完成。异步模式在出现主库宕机时,可能产生有些日志未从主库发到从库,导致主从数据差异的情况。因此,在主库宕机,准备切换到从库时,要判断主从之间的数据差异情况,如果数据差异过大,可以放弃切换。
相关的判断数据差异的办法是主库将当前时间对应的时间戳不断写入一个心跳表,此心跳表的内容也会不断同步给从库。当主从切换时,查看从库现有心跳表里的时间戳数据,与最后更新到主库的时间戳的差异,即可算出主从之间的数据差异对应多长时间的延迟,即可以用该时间延迟来表征主从之间的数据差异。
上述心跳表方案有如下缺点:
一,在主库更新心跳表时,需要连接数据库并执行更新操作,因此占用了用户可用的连接数(一般数据库都有最大连接数限制),当用户连接数达到上限时,将无法连接到主库更新心跳表,此时,如果有主从切换,无法准确判定主从数据差异;
二,此方案要求从库在切换前允许连接和查询心跳表。但某些数据库,例如Greenplum的Standby节点,在切换前是不允许连接的,因此无法实现查询心跳表。
三,对于长期以读操作为主的数据库,更新心跳表,本身会造成额外的日志写入、IO操作等。
发明内容
本发明实施例提供了一种确定数据库主从差异的方法,包括:
在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟。
本发明实施例还提供了一种确定数据库主从差异的确定装置,包括:
时间获取模块,设置为:在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
差异确定模块,设置为:将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟。
本发明实施例还提供了一种确定数据库主从差异的确定装置,包括存储器和处理器,其中:
所述存储器设置为:保存程序代码;
所述处理器设置为:读取所述程序代码以执行以下处理:
在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟。
上述方案既能较准确地确定主从切换时主从数据库的差异,又无需连接数据库执行更新操作,也无需数据库执行额外操作,具有更好的性能。
本发明实施例还提供了一种数据库主从切换的控制方法,包括:
按照如上所述述的确定数据库主从差异的方法确定数据库主从差异,得到数据库主从差异对应的时间延迟;
判断所述时间延迟是否大于设定的时间延迟阈值,如果是,不进行主从切换,如果否,进行主从切换。
本发明实施例还提供了一种数据库主从切换的控制装置,包括如上所述的数据库主从差异的确定装置以及切换判定模块,其中:所述切换判定模块设置为:判断所述确定装置确定的时间延迟是否大于设定的时间延迟阈值,如果是,不进行主从切换,如果否,进行主从切换。
本发明实施例还提供了一种数据库主从切换的控制装置,包括存储器和处理器,其中:
所述存储器设置为:保存程序代码;
所述处理器设置为:读取所述程序代码以执行以下处理:
在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟;
判断所述时间延迟是否大于设定的时间延迟阈值,如果是,不进行主从切换,如果否,进行主从切换。
上述方案既能确定主从切换时主从数据库的差异并用于切换判定,又无需连接数据库执行更新操作,也无需数据库执行额外操作,具有更好的性能。
附图说明
图1是数据库主从架构的示意图;
图2是本发明实施例一确定数据库主从差异的方法的流程图;
图3是本发明实施例一数据库主从差异确定装置的模块图;
图4是本发明实施例二数据库主从切换的控制方法的流程图;
图5是本发明实施例二数据库主从切换的控制装置的模块图;
图6是本发明实施例三数据库主从切换的控制方法的流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
实施例一
本实施例提供一种确定数据库主从库差异的方法,应用于数据库主从库差异的确定装置,如图2所示,所述方法包括:
步骤110,在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
本申请是针对主从采用异步的事务提交机制的情况。如前所述,主库是在机器上运行的主数据库实例,主库正常运行时,在一个数据库事务完成时会将该事件的信息写入主库最新日志文件,该日志文件的修改时间戳即主库最后一次更新日志的时间。此外,主库正常运行时,会向从库同步日志,而从库最新日志文件的修改时间戳也是从库最后一次更新日志的时间。
主库故障可能是因为主库所在机器硬件或操作系统故障导致的,此时主库和主库所在操作系统均无法使用。主库故障也可能是被主库所在机器的操作系统挂起而无法继续运行或者主库本身出现错误而无响应即主库宕机(非操作系统宕机),此时主库无法使用但主库所在机器的操作系统仍可工作。
本实施例中,在所述主库工作时,按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳并记录。在所述主库故障时,将最后记录的主库最新日志文件的修改时间戳作为T0。因为主库故障时主库所在机器的操作系统也可能同时故障,无法再获取主库最新日志文件的修改时间戳。因此本实施例在本库工作时即按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳并记录,这里设定的时间间隔如可以是秒数一级,这可以根据对主从差异精度、可用性等要求而自行设定。另外设定的时间间隔可以总是相等的,也可以不相等如在不同时段采用不同的间隔。
在另一实施例中,在所述主库工作时,也按照设定的时间间隔从所述主库所在机器的操作系统获取主库最新日志文件的修改时间戳并记录;但在主库故障时,如果从所述主库所在机器的操作系统获取到主库最新日志文件的修改时间戳,将获取的修改时间戳作为T0,否则将最后记录的主库最新日志文件的修改时间戳作为T0。该实施例在主库故障时仍尝试从主库所在机器的操作系统获取主库最新日志文件的修改时间戳,如果操作系统仍可工作,则能获取到,而且获取到的该时间戳可能比最后记录的主库最新日志文件的修改时间戳更晚(说明主库又写入了新的日志),将其作为T0计算的时间延迟也就更为准确。
本实施例中,在主库故障时,获取从库最新日志文件的修改时间戳T1,包括:在所述主库故障时,从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1。在某些情况下,主库故障时,从库所在机器的操作系统可能暂时性地连接不上,因此在另一实施例中,在所述主库工作时,按照设定的时间间隔从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳并记录;在所述主库故障时,如果从所述从库所在机器的操作系统获取到从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1,否则将最后记录的从库最新日志文件的修改时间戳作为T1。
按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳,可以采用但不局限于以下几种方式中的一种:
按照设定的时间间隔不断登陆主库所在机器的操作系统,查询主库最新日志文件的修改时间戳;
与主库所在机器的操作系统建立长连接,按照设定的时间间隔不断向主库所在机器的操作系统查询主库最新日志文件的修改时间戳;
在主库所在机器增加一个代理程序,按照设定的时间间隔不断向主库所在机器的操作系统查询主库最新日志文件的修改时间戳并传递出来。
按照设定的时间间隔从从库所在机器的操作系统获取从库最新日志文件的修改时间戳的方法类似,不再赘述。
步骤120,将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟。
主从最新日志文件的修改时间戳的差异可以从时间跨度上体现主从之间的日志差异情况,因此可以作为衡量主从数据差异的参数。主库和从库所在机器的操作系统可以读取到其最新日志文件的修改时间戳。
本实施例还提供了一种确定数据库主从差异的确定装置,包括:
时间获取模块10,设置为:在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
差异确定模块20,设置为:将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟。
本实施例中,
所述确定装置还包括:主库记录模块,设置为:在所述主库工作时,按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳并记录;
所述时间获取模块在主库故障时,获取主库最新日志文件的修改时间戳T0,包括:在所述主库故障时,将所述主库记录模块最后记录的主库最新日志文件的修改时间戳作为T0。
本实施例中,
所述确定装置还包括:时间记录模块,设置为:在所述主库工作时,按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳并记录;
所述时间获取模块在主库故障时,获取主库最新日志文件的修改时间戳T0,包括:在所述主库故障时,如果从所述主库所在机器的操作系统获取到主库最新日志文件的修改时间戳,将获取的修改时间戳作为T0,否则将最后记录的主库最新日志文件的修改时间戳作为T0。
本实施例中,
所述时间获取模块在主库故障时,获取从库最新日志文件的修改时间戳T1,包括:在所述主库故障时,从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1。
本实施例中,
所述确定装置还包括:从库记录模块,设置为:在所述主库工作时,按照设定的时间间隔从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳并记录;
所述时间获取模块在主库故障时,获取从库最新日志文件的修改时间戳T1,包括:在所述主库故障时,如果从所述从库所在机器的操作系统获取到从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1,否则将所述从库记录模块最后记录的从库最新日志文件的修改时间戳作为T1。
上述模块执行的功能可参见本实施例方法中的处理。
本实施例还提供了一种数据库主从差异的确定装置,包括存储器和处理器,其中:
所述存储器设置为:保存程序代码;
所述处理器设置为:读取所述程序代码以执行以下处理:
在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟。
上述处理器执行的获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1的处理,可以采用本实施例方法中描述的各种方式来实现,这里不再赘述。
本实施例方案既能较准确地确定主从切换时主从数据库的差异,又无需连接数据库执行更新操作,也无需数据库执行额外操作,具有更好的性能。
以下的两个实施例提供一种数据库主从切换的控制方法,所述控制方法可以采用实施例一中的方法确定数据库主从差异对应的时间延迟,再根据该时间延迟与相应阈值的比较结果判定是否进行主从切换。
实施例二
本实施例数据库主从切换的控制方法如图4所示,包括:
步骤210,在所述主库工作时,按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳并记录;
本步骤可参见实施例一的相应说明。
按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳,可以采用但不局限于以下几种方式中的一种:
按照设定的时间间隔不断登陆主库所在机器的操作系统,查询主库最新日志文件的修改时间戳;
与主库所在机器的操作系统建立长连接,按照设定的时间间隔不断向主库所在机器的操作系统查询主库最新日志文件的修改时间戳;
在主库所在机器增加一个代理程序,按照设定的时间间隔不断向主库所在机器的操作系统查询主库最新日志文件的修改时间戳并传递出来。
步骤220,在所述主库故障时,将最后记录的主库最新日志文件的修改时间戳作为T0,并从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1;
本步骤可参见实施例一的相应说明。
步骤230,判断T0和T1的时间差是否大于设定的时间延迟阈值,如果是,执行步骤240,否则,执行步骤250;
步骤240,不进行主从切换,结束;
步骤250,进行主从切换,结束。
对于上述阈值的取值本发明不做局限,可以根据系统的实际情况来选择并可以根据运行情况进行调整。在T0和T1的时间差大于时间延迟阈值时不进行切换,可以避免较大量的数据丢失量,且保持一定的高可用性。
本实施例还提供了一种数据库主从切换的控制装置,如图5所示,包括:
时间获取模块50,设置为:在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
差异确定模块60,设置为:将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟;
切换判定模块70,设置为:判断所述确定装置确定的时间延迟是否大于设定的时间延迟阈值,如果是,不进行主从切换,如果否,进行主从切换。
本实施例中,
所述确定装置还包括:主库记录模块,设置为:在所述主库工作时,按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳并记录;
所述时间获取模块在主库故障时,获取主库最新日志文件的修改时间戳T0,包括:在所述主库故障时,将最后记录的主库最新日志文件的修改时间戳作为T0。
本实施例中,
所述时间获取模块在主库故障时,获取从库最新日志文件的修改时间戳T1,包括:在所述主库故障时,从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1。
本实施例方法获取从库最新日志文件的修改时间戳T1的方式也可以采用实施例一中的方式,即:在所述主库工作时,按照设定的时间间隔从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳并记录;在所述主库故障时,如果从所述从库所在机器的操作系统获取到从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1,否则将最后记录的从库最新日志文件的修改时间戳作为T1。
本实施例方案既能确定主从切换时主从数据库的差异并用于切换判定,又无需连接数据库执行更新操作,也无需数据库执行额外操作,具有更好的性能。
实施例三
本实施例数据库主从切换的控制方法在获取主库最新日志文件的修改时间戳T0时与实施例二不同,如图6所示,本实施例方法包括:
步骤310,在所述主库工作时,按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳并记录;
本步骤可参见实施例一的相应说明。
按照设定的时间间隔从主库所在机器的操作系统获取主库最新日志文件的修改时间戳,可以采用但不局限于以下几种方式中的一种:
按照设定的时间间隔不断登陆主库所在机器的操作系统,查询主库最新日志文件的修改时间戳;
与主库所在机器的操作系统建立长连接,按照设定的时间间隔不断向主库所在机器的操作系统查询主库最新日志文件的修改时间戳;
在主库所在机器增加一个代理程序,按照设定的时间间隔不断向主库所在机器的操作系统查询主库最新日志文件的修改时间戳并传递出来。
步骤320,在所述主库故障时,如果从所述主库所在机器的操作系统获取到主库最新日志文件的修改时间戳,将获取的修改时间戳作为T0,否则将最后记录的主库最新日志文件的修改时间戳作为T0;及,从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1;
步骤330,判断T0和T1的时间差是否大于设定的时间延迟阈值,如果是,执行步骤240,否则,执行步骤250;
步骤340,不进行主从切换,结束;
步骤350,进行主从切换,结束。
对于上述阈值的取值本发明不做局限,可以根据系统的实际情况来选择并可以根据运行情况进行调整。在T0和T1的时间差大于时间延迟阈值时不进行切换,可以避免较大量的数据丢失量,且保持一定的高可用性。
本实施例还提供了一种数据库主从切换的控制装置与实施例二基本相同,区别在于:所述时间获取模块在主库故障时,获取主库最新日志文件的修改时间戳T0的方式是:在所述主库故障时,如果从所述主库所在机器的操作系统获取到主库最新日志文件的修改时间戳,将获取的修改时间戳作为T0,否则将最后记录的主库最新日志文件的修改时间戳作为T0。
本实施例方法获取从库最新日志文件的修改时间戳T1的方式也可以采用实施例一中的方式,即:在所述主库工作时,按照设定的时间间隔从所述从库所在机器的操作系统获取从库最新日志文件的修改时间戳并记录;在所述主库故障时,如果从所述从库所在机器的操作系统获取到从库最新日志文件的修改时间戳,将获取的修改时间戳作为T1,否则将最后记录的从库最新日志文件的修改时间戳作为T1。
本实施例方案既能确定主从切换时主从数据库的差异并用于切换判定,又无需连接数据库执行更新操作,也无需数据库执行额外操作,具有更好的性能。
实施例四
本实施例提供了一种数据库主从切换的控制装置,包括存储器和处理器,其中:
所述存储器设置为:保存程序代码;
所述处理器设置为:读取所述程序代码以执行以下处理:
在主库故障时,获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1;
将所述T0和T1的时间差确定为数据库主从差异对应的时间延迟;
判断所述时间延迟是否大于设定的时间延迟阈值,如果是,不进行主从切换,如果否,进行主从切换。
上述处理器执行的获取主库最新日志文件的修改时间戳T0,及获取从库最新日志文件的修改时间戳T1的处理,可以采用本实施例方法中描述的各种方式来实现,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。