CN113254528A - 高可用数据库系统的实现方法及相关设备 - Google Patents
高可用数据库系统的实现方法及相关设备 Download PDFInfo
- Publication number
- CN113254528A CN113254528A CN202110516971.1A CN202110516971A CN113254528A CN 113254528 A CN113254528 A CN 113254528A CN 202110516971 A CN202110516971 A CN 202110516971A CN 113254528 A CN113254528 A CN 113254528A
- Authority
- CN
- China
- Prior art keywords
- physical page
- computing node
- target
- database system
- engine
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/219—Managing data history or versioning
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库技术领域,公开了一种高可用数据库系统的实现方法及相关设备。所述方法包括:实时检测所述计算节点运行过程中是否发生故障;当所述计算节点运行过程中发生故障时,从所述云主机资源池中选取一个云主机作为新计算节点;将所述分布式存储挂载至所述新计算节点,并在所述新计算节点启动新的数据库实例;对所述数据库实例执行快速崩溃恢复操作,并在执行快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务。本发明实现一种单机高可用数据库系统,无需采用主备架构,进而降低了数据库的运营成本。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种高可用数据库系统的实现方法及相关设备。
背景技术
数据库系统所处的整个软硬件栈中,硬件和软件都有可能发生故障;如果是单机数据库系统,系统故障需要较长的处理时间,从而造成数据库服务较长时间的不可用。因而单机数据库系统满足不了企业级数据库的应用需求。
高可用数据库系统是目前市面上企业级数据库的主流解决方案之一,它的工作原理是通过冗余的数据库节点和自动容灾机制,实现对数据库故障的自动处理和快速恢复,即使数据库系统中的某个节点出现问题导致不可用以后,数据库系统依然能够作为整体对外正常提供数据库服务。
近几年来,在云计算平台上,计算和存储分离技术的出现,促使计算层和存储层解耦,实现了计算资源和存储资源的池化,从而进一步增强了云资源的弹性和容灾能力。比如,现阶段实现了计算和存储分离的云主机产品,可以将之前需持久化到本地硬盘的数据,持久化到远端高性能云盘,从而让云主机成为一个无状态的计算节点(只有CPU和内存)。在这种计算和存储分离架构下,云主机的容灾能力有大幅提升。
发明内容
本发明的主要目的在于提供一种高可用数据库系统的实现方法及相关设备,旨在解决传统高可用数据库运营成本过高的技术问题。
本发明第一方面提供了一种高可用数据库系统的实现方法,所述高可用数据库系统包括一个计算节点、一个分布式存储以及还包括至少一个云主机资源池,所述云主机资源池包括多个云主机,每个所述云主机的物理配置规格与所述计算节点相同,所述高可用数据库系统的实现方法包括:
实时检测所述计算节点运行过程中是否发生故障;
当所述计算节点运行过程中发生故障时,从所述云主机资源池中选取一个云主机作为新计算节点;
将所述分布式存储挂载至所述新计算节点,并在所述新计算节点启动新的数据库实例;
对所述数据库实例执行快速崩溃恢复操作,并在执行所述快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务。
可选的,在本发明第一方面的第一种实现方式中,所述对所述数据库实例执行快速崩溃恢复操作包括:
从所述分布式存储的重做日志文件中加载未被应用的重做日志,并对所述未被应用的重做日志进行解析,将解析结果存入预置哈希表中;
从所述分布式存储中读取预置必要数据对应的物理页至所述新计算节点的内存中进行版本更新,并将版本更新后的所述物理页写入所述分布式存储中,其中,所述必要数据包括:数据字典元数据、最大事务ID、全局唯一ID;
根据更新后的所述物理页和所述物理页中更新后的回滚日志,以DDL操作为单位,对所述必要数据进行版本恢复,以使所述必要数据的版本与所述计算节点发生故障时保持一致,其中,当所述必要数据进行版本恢复后,所述高可用数据库系统对外提供服务;
根据更新后的所述物理页和所述物理页中更新后的回滚日志,以事务为单位,对所述高可用数据库系统的表记录进行版本恢复,以使所述表记录的版本与所述计算节点发生故障时保持一致。
可选的,在本发明第一方面的第二种实现方式中,所述在执行所述快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务包括:
在执行所述快速崩溃恢复操作时,通过所述新计算节点所在的SQL引擎接收外部客户端发送的数据库服务请求,并确定所述数据库服务请求需要处理的目标表记录以及包含所述目标表记录的目标物理页;
通过所述SQL引擎向表记录引擎发起所述目标表记录的第一获取请求,通过所述表记录引擎向物理页引擎发起包含所述目标表记录的目标物理页的第二获取请求;
若所述物理页引擎的物理页缓存池中不存在所述目标物理页,则通过所述物理页引擎向所述分布式存储发起所述目标物理页的第三获取请求;
当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中;
通过所述物理页引擎从所述物理页缓存池中读取所述目标物理页并返回至所述表记录引擎,以响应所述第二获取请求;
通过所述表记录引擎判断所述目标物理页中需要读取的目标表记录是否存在未处理的挂起事务;
若不存在未处理的挂起事务,则通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;若存在未处理的挂起事务,则加载对应的回滚日志,并利用加载的回滚日志将未处理的挂起事务进行回滚或提交处理后,通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;
基于所述目标表记录,通过所述SQL引擎对所述数据库服务请求进行处理,并将处理结果返回至所述外部客户端。
可选的,在本发明第一方面的第三种实现方式中,所述从所述分布式存储的重做日志文件中加载未被应用的重做日志,并对所述未被应用的重做日志进行解析,将解析结果存入预置哈希表中包括:
在所述新计算节点启动新的数据库实例时,从所述分布式存储的重做日志文件中加载未被应用的重做日志;
对所述未被应用的重做日志进行解析,得到所述未被应用的重做日志的物理页编号;
以所述物理页编号为关键字、以所述物理页编号对应物理页的重做日志为值,构建由物理页编号和重做日志组成的键值对,将所述键值对插入预置哈希表中。
可选的,在本发明第一方面的第四种实现方式中,在所述哈希表中,相同物理页编号的重做日志存储在同一个单向链表中。
可选的,在本发明第一方面的第五种实现方式中,所述当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中包括:
当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页;
根据所述目标物理页的物理页编号,检索所述哈希表,得到所述目标物理页中未被应用的重做日志;
根据所述目标物理页中未被应用的重做日志,对所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中。
可选的,在本发明第一方面的第六种实现方式中,所述高可用数据库系统的实现方法还包括:
在所述高可用数据库系统对外提供服务后,根据所述哈希表对应物理页的重做日志,对除所述必要数据之外的其他数据的物理页进行版本更新,以使所述其他数据的物理页版本与所述计算节点发生故障时保持一致。
本发明第二方面提供了一种高可用数据库系统的实现装置,所述高可用数据库系统包括一个计算节点、一个分布式存储以及还包括至少一个云主机资源池,所述云主机资源池包括多个云主机,每个所述云主机的物理配置规格与所述计算节点相同,所述高可用数据库系统的实现装置包括:
检测模块,用于实时检测所述计算节点运行过程中是否发生故障;
选取模块,用于当所述计算节点运行过程中发生故障时,从所述云主机资源池中选取一个云主机作为新计算节点;
切换模块,用于将所述分布式存储挂载至所述新计算节点,并在所述新计算节点启动新的数据库实例;
服务模块,用于对所述数据库实例执行快速崩溃恢复操作,并在执行所述快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务。
可选的,在本发明第二方面的第一种实现方式中,所述服务模块包括:
崩溃恢复单元,用于从所述分布式存储的重做日志文件中加载未被应用的重做日志,并对所述未被应用的重做日志进行解析,将解析结果存入预置哈希表中;从所述分布式存储中读取预置必要数据对应的物理页至所述新计算节点的内存中进行版本更新,并将版本更新后的所述物理页写入所述分布式存储中,其中,所述必要数据包括:数据字典元数据、最大事务ID、全局唯一ID;根据更新后的所述物理页和所述物理页中更新后的回滚日志,以DDL操作为单位,对所述必要数据进行版本恢复,以使所述必要数据的版本与所述计算节点发生故障时保持一致,其中,当所述必要数据进行版本恢复后,所述高可用数据库系统对外提供服务;根据更新后的所述物理页和所述物理页中更新后的回滚日志,以事务为单位,对所述高可用数据库系统的表记录进行版本恢复,以使所述表记录的版本与所述计算节点发生故障时保持一致。
可选的,在本发明第二方面的第二种实现方式中,所述服务模块还包括:
服务单元,用于在执行所述快速崩溃恢复操作时,通过所述新计算节点所在的SQL引擎接收外部客户端发送的数据库服务请求,并确定所述数据库服务请求需要处理的目标表记录以及包含所述目标表记录的目标物理页;通过所述SQL引擎向表记录引擎发起所述目标表记录的第一获取请求,通过所述表记录引擎向物理页引擎发起包含所述目标表记录的目标物理页的第二获取请求;若所述物理页引擎的物理页缓存池中不存在所述目标物理页,则通过所述物理页引擎向所述分布式存储发起所述目标物理页的第三获取请求;当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中;通过所述物理页引擎从所述物理页缓存池中读取所述目标物理页并返回至所述表记录引擎,以响应所述第二获取请求;通过所述表记录引擎判断所述目标物理页中需要读取的目标表记录是否存在未处理的挂起事务;若不存在未处理的挂起事务,则通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;若存在未处理的挂起事务,则加载对应的回滚日志,并利用加载的回滚日志将未处理的挂起事务进行回滚或提交处理后,通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;基于所述目标表记录,通过所述SQL引擎对所述数据库服务请求进行处理,并将处理结果返回至所述外部客户端。
可选的,在本发明第二方面的第三种实现方式中,所述崩溃恢复单元还用于:
对所述未同步的重做日志进行解析,得到所述未同步的重做日志的物理页编号;以所述物理页编号为关键字、以所述物理页编号对应物理页的重做日志为值,构建由物理页编号和重做日志组成的键值对,将所述键值对插入预置哈希表中。
可选的,在本发明第二方面的第四种实现方式中,所述服务单元还用于:
当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页;根据所述目标物理页的物理页编号,检索所述哈希表,得到所述目标物理页中未被应用的重做日志;根据所述目标物理页中未被应用的重做日志,对所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中。
可选的,在本发明第二方面的第五种实现方式中,在所述哈希表中,相同物理页编号的重做日志存储在同一个单向链表中。
可选的,在本发明第二方面的第六种实现方式中,所述崩溃恢复单元还用于:
在所述高可用数据库系统对外提供服务后,根据所述哈希表对应物理页的重做日志,对除所述必要数据之外的其他数据的物理页进行版本更新,以使所述其他数据的物理页版本与所述计算节点发生故障时保持一致。
本发明第三方面提供了一种计算机设备,所述计算机设备包括:存储器和至少一个处理器,所述存储器中存储有指令;
所述至少一个处理器调用所述存储器中的所述指令,以使得所述计算机设备执行上述的高可用数据库系统的实现方法。
本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述的高可用数据库系统的实现方法。
本发明提供的一种高可用数据库系统的实现方法及相关设备,本发明的数据库系统包括一个计算节点、一个分布式存储、至少一个云主机资源池。当计算节点运行过程中发生故障时,从云主机资源池中选取一个云主机作为新计算节点;将分布式存储挂载至新计算节点,并在新计算节点启动新的数据库实例;对数据库实例执行快速崩溃恢复操作,并在执行快速崩溃恢复操作时,采用新计算节点对外提供数据库服务。本发明不仅能保证在计算节点故障后采用新计算节点迅速进行接管,对外正常提供数据库服务,同于由于采用云主机资源池中的云主机作为新计算节点,无需采用主备架构,进而降低了数据库系统的运营成本。
附图说明
图1为本发明高可用数据库系统的实现方法的一个实施例流程示意图;
图2为本发明高可用数据库系统一个实施例技术架构示意图;
图3为本发明高可用数据库系统一实施例实现过程示意图;
图4为本发明高可用数据库系统的实现方法中对数据库实例执行快速崩溃恢复操作的一实施例流程示意图;
图5为本发明高可用数据库系统的实现方法中在执行快速崩溃恢复操作时对外提供数据库服务的一实施例流程示意图;
图6为本发明高可用数据库系统的实现装置的一个实施例功能模块示意图;
图7为本发明计算机设备的一个实施例硬件结构示意图。
具体实施方式
本发明实施例提供了一种高可用数据库系统的实现方法及相关设备。本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,本发明中的高可用数据库的实现方法在原理上适用于所有类型的数据库系统,例如:MySQL、PGSQL、MongoDB等,在不同的类型的数据库系统中,数据库的基本概念可能存在一些差异,此处不作过多介绍。
在介绍本发明实施例之前,以MySQL数据库系统为例,引入一些数据库技术中的基本概念:
表:数据库系统存储同一类数据的基本结构。一张表存储多条表记录(Record),每条表记录有若干字段构成。
物理页(Page):存储表记录的数据对象。物理页的大小固定(如16KB),一个物理页可存储一张表的多条表记录。
物理页缓存池(Page Buffer Pool):数据库系统在内存中维护的,对物理页的缓存池。
事务:一个数据库事务包含多条SQL语句,同时数据库的事务机制会保证这些SQL语句要么全部被正确执行(如果事务中所有SQL语句执行完成,则事务提交成功),要么全部不被执行(如果事务中部分SQL语句没有执行成功、则事务没有提交成功或事务被回滚)。
重做日志(Redolog):数据库系统针对每一次物理页的修改操作,都生成对应的重做日志,重做日志忠实记录了事务对物理页的修改。
回滚日志(Undolog):数据库系统插入、修改、删除每一条表记录时,都生成对应的回滚日志。回滚日志记录了这条表记录在被事务操作之前的版本。在事务提交后,这些回滚日志将被删除;在事务进行回滚时,数据库系统将利用这些回滚日志对修改的表记录进行回滚,撤销该事务对表记录的修改。
需要说明的是,回滚日志也是存储在物理页中,一个物理页中存储有多条回滚日志;即物理页(Page)不仅是存储表记录(Record)的数据对象,也是存储回滚日志(Undolog)的数据对象。
SQL引擎:SQL引擎的数据都是无需持久化的缓存数据,因此崩溃恢复时不需要对SQL引擎数据做恢复。
表记录引擎:表记录引擎管理和维护的数据为表记录。在崩溃恢复时,需要对表记录做恢复,使其最终和系统故障时刻保持事务层面的一致。
物理页引擎:物理页引擎管理和维护的数据为物理页。在崩溃恢复时,需要对物理页数据做恢复,使其最终和系统故障时刻保持一致。
数据字典:数据字典管理和维护的数据为库表索引元数据。元数据本身是以表记录形式存在,存储在物理页中。
为便于理解,下面结合本发明实施例进行具体描述。
本发明实施例中的高可用数据库系统包括一个计算节点、一个分布式存储以及还包括至少一个云主机资源池,云主机资源池包括多个云主机,每个云主机的物理配置规格与计算节点相同。
请参阅图1和图2,图1为本发明高可用数据库系统的实现方法的一个实施例流程示意图,图2为本发明高可用数据库系统的一个实施例架构示意图;本实施例中,高可用数据库系统的实现方法包括以下步骤:
S10:实时检测所述计算节点运行过程中是否发生故障;
当高可用数据库系统正常运行时,计算节点接收和处理客户的读写请求,向分布式存储写入物理页(Page)和重做日志(Redolog)。
当高可用数据库系统的计算节点故障时,由于此时计算节点发生故障处于不可用的状态,停止向分布式存储写入和读取数据(此时停止写入Page和Redolog)。
S20:当所述计算节点运行过程中发生故障时,从所述云主机资源池中选取一个云主机作为新计算节点;
当计算节点故障时,高可用数据库系统的容灾管控系统检测到故障事件,并从云主机资源池中挑选出一台与故障计算节点配置相同的云主机,作为新计算节点并进行部署。
S30:将所述分布式存储挂载至所述新计算节点,并在所述新计算节点启动新的数据库实例;
从云主机资源池中挑选一台云主机并部署为新计算节点后,将分布式存储由故障计算节点切换挂载至新计算节点,并在新计算节点部署并启动一个新的数据库实例。
S40:对所述数据库实例执行快速崩溃恢复操作,并在执行所述快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务。
请参阅图3,图3为本发明高可用数据库系统的实现过程示意图。本发明高可用数据库系统的实现流程分为三个阶段:①高可用数据库系统正常运行;②高可用数据库系统发生故障异常,并部署新计算节点;③新计算节点挂载分布式存储,对外提供数据库服务。
具体地,①表示一个单机高可用数据库系统正常运行的状态。此时,计算节点接收和处理客户的读写请求,向分布式存储写入物理页(Page)和重做日志(Redolog)。②表示高可用数据库系统发生故障异常的状态。此时计算节点因为发生故障处于不可用的状态,停止向分布式存储写入和读取数据(此时停止写入Page和Redolog)。同时,高可用数据库系统的容灾管控系统检测到故障事件,并从云主机资源池中挑选出一台与故障计算节点配置相同的云主机,作为新计算节点并进行部署。③表示从云主机资源池中挑选一台云主机并部署为新计算节点后,将分布式存储由故障计算节点切换挂载至新计算节点,并在新计算节点部署并启动一个新的数据库实例。通过对数据库实例执行快速崩溃恢复操作,新计算节点可对外提供数据库服务。
本发明提供的一种高可用数据库系统的实现方法,可实现一种单机高可用数据库系统,当计算节点运行过程中发生故障时,从云主机资源池中选取一个云主机作为新计算节点;将分布式存储挂载至新计算节点,并在新计算节点启动新的数据库实例;对数据库实例执行快速崩溃恢复操作,并在执行快速崩溃恢复操作时,采用新计算节点对外提供数据库服务;不仅能保证在计算节点故障后采用新计算节点迅速进行接管,对外正常提供数据库服务,同于由于采用云主机资源池中的云主机作为新计算节点,无需采用主备架构,进而降低了数据库的运营成本。
请参阅图4,图4为本发明高可用数据库系统的实现方法中对数据库实例执行快速崩溃恢复操作的一实施例流程示意图,具体包括以下步骤:
S401:从所述分布式存储的重做日志文件中加载未被应用的重做日志,并对所述未被应用的重做日志进行解析,将解析结果存入预置哈希表中;
本发明的高可用数据库系统在运行过程中,当计算节点发生故障不可用时,计算节点存在未完成的事务,此时需要从分布式存储的重做日志文件中加载未被应用的重做日志,同时进一步地对未被应用的重做日志进行解析,然后将解析结果存入预置哈希表中。
可选的,在一实施例中,步骤S401具体包括:
在所述新计算节点启动新的数据库实例时,从所述分布式存储的重做日志文件中加载未被应用的重做日志;
对所述未被应用的重做日志进行解析,得到所述未被应用的重做日志的物理页编号;
以所述物理页编号为关键字、以所述物理页编号对应物理页的重做日志为值,构建由物理页编号和重做日志组成的键值对,将所述键值对插入预置哈希表中。
具体地,在键值对插入的预置哈希表中,具备相同的物理页标号的重做日志会存储在一个单向链表中;当指定一个物理页的物理页编号时,就可以找到该物理页所有未应用的重做日志,从而快速地实现新计算节点与故障时刻的计算节点一致,进一步结合进行数据恢复工作,实现数据库在对外提供服务的同时,依然保持崩溃恢复进行。
S402:从所述分布式存储中读取预置必要数据对应的物理页至所述新计算节点的内存中进行版本更新,并将版本更新后的所述物理页写入所述分布式存储中,其中,所述必要数据包括:数据字典元数据、最大事务ID、全局唯一ID;
具体地,高可用数据库系统要正常对外提供服务,也即客户端发起的SQL读写请求要被正确处理,依赖于两个条件:一是必要的数据,比如数据字典元数据、最大事务ID、全局唯一ID;二是和故障时刻一致性的物理页,包括Record物理页和Undolog物理页。只要满足这两个条件,高可用数据库系统即可对外提供服务。
因此,需要从分布式存储中读取预置必要数据对应的物理页至新计算节点的内存中进行版本更新,并将版本更新后的物理页写入分布式存储中。
此时,不仅分布式存储中的物理页实现了与故障时刻的计算节点一致;同时,回滚日志也隐式地实现了与故障时刻一致(因为回滚日志存储在物理页中,当物理页实现一致,回滚日志自然实现一致)。
S403:根据更新后的所述物理页和所述物理页中更新后的回滚日志,以DDL操作为单位,对所述必要数据进行版本恢复,以使所述必要数据的版本与所述计算节点发生故障时保持一致,其中,当所述必要数据进行版本恢复后,所述高可用数据库系统对外提供服务;
具体地,根据S402中更新后的物理页和更新后的回滚日志,以DDL(DataDefinition Language)操作为单位,对数据字典的元数据进行恢复,使其与故障时刻时保持事务层面上的一致;当数据字典的元数据恢复完成后,数据库系统才能使用正确的元数据执行读写操作。将必要数据恢复为与计算节点发生故障时保持一致后,高可用数据库系统即可对外提供服务。
可选的,在一实施例中,高可用数据库系统的实现方法还包括:
S404:在所述高可用数据库系统对外提供服务后,根据所述哈希表对应物理页的重做日志,对除所述必要数据之外的其他数据的物理页进行版本更新,以使所述其他数据的物理页版本与所述计算节点发生故障时保持一致。
本实施例中,在高可用数据库系统恢复对外服务后,进一步根据写入哈希表中物理页编号对应物理页中的重做日志,对未恢复的其他数据对应物理页进行版本更新。具体启动重做日志刷新物理页的线程组,利用哈希表中的重做日志对剩余未刷新的物理页进行刷新,再将刷新后的物理页写入到分布式存储,从而使分布式存储中的物理页逐渐保持和主数据库实例故障时一致。
S405:根据更新后的所述物理页和所述物理页中更新后的回滚日志,以事务为单位,对所述高可用数据库系统的表记录进行版本恢复,以使所述表记录的版本与所述计算节点发生故障时保持一致。
对高可用数据库系统的表记录进行版本恢复的操作可以异步进行,即在一边提供服务的同时,一边对表记录进行恢复;实现高可用数据库在进行快速崩溃恢复操作同时,可正常对外提供服务,不必要等待漫长的崩溃恢复流程完成。
请参阅图5,图5为本发明高可用数据库系统的实现方法中在执行快速崩溃恢复操作时对外提供数据库服务的一实施例的流程示意图,具体包括以下步骤:
S411:在执行所述快速崩溃恢复操作时,通过所述新计算节点所在的SQL引擎接收外部客户端发送的数据库服务请求,并确定所述数据库服务请求需要处理的目标表记录以及包含所述目标表记录的目标物理页;
具体地,当外部客户端向SQL引擎发送SQL语句(数据库服务请求)时,SQL引擎为该语句生成执行计划并执行,并确定需要处理的目标表记录以及包含目标表记录的目标物理页。
S412:通过所述SQL引擎向表记录引擎发起所述目标表记录的第一获取请求,通过所述表记录引擎向物理页引擎发起包含所述目标表记录的目标物理页的第二获取请求;
具体地,在执行过程中通过调用表记录引擎获取目标表记录,通过表记录引擎调用物理页引擎获取目标物理页。
S413:若所述物理页引擎的物理页缓存池中不存在所述目标物理页,则通过所述物理页引擎向所述分布式存储发起所述目标物理页的第三获取请求;
具体地,当在执行快速崩溃恢复操作时,整个数据库系统处于初始化状态,物理页引擎中物理页缓存池中不存在目标物理页,此时需要通过物理页引擎向分布式存储发出获取请求,尝试读取该物理页。
S414:当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中;
具体地,分布式存储响应物理页引擎的获取请求,返回目标物理页(此时的目标物理页为故障时刻前的版本)时,截留该目标物理页并进行更新(此时的目标物理页为故障时刻时计算节点的版本),并将更新后的目标物理页存入物理页缓存池中。
S415:通过所述物理页引擎从所述物理页缓存池中读取所述目标物理页并返回至所述表记录引擎,以响应所述第二获取请求;
具体地,当更新后的目标物理页存入物理页缓存池后,物理页引擎向物理页缓存池中读取目标物理页,并返回至表记录引擎,响应步骤S412中的第二获取请求。
S416:通过所述表记录引擎判断所述目标物理页中需要读取的目标表记录是否存在未处理的挂起事务;
具体地,表记录引擎判断目标物理页中需要读取的目标表记录;
若无法判断该目标表记录是否为故障时刻时的表记录,则直接向SQL引擎返回该目标表记录,供SQL引擎进行读写;
若读取的目标表记录中存在未处理的挂起事务(此时说明该表记录为故障时刻时的表记录),此时不向SQL引擎返回该目标表记录(若SQL引擎需要写入),或者从回滚日志中找到故障时刻前的表记录版本向SQL引擎返回(若SQL引擎需要读取)。
S417:若不存在未处理的挂起事务,则通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;若存在未处理的挂起事务,则加载对应的回滚日志,并利用加载的回滚日志将未处理的挂起事务进行回滚或提交处理后,通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;
S418:基于目标表记录,通过所述SQL引擎对所述数据库服务请求进行处理,并将处理结果返回至所述外部客户端。
可选的,在一实施例中,步骤S414具体包括:
当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页;
根据所述目标物理页的物理页编号,检索所述哈希表,得到所述目标物理页中未被应用的重做日志;
根据所述目标物理页中未被应用的重做日志,对所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中。
具体地,通过截留目标物理页,并根据目标物理页的物理页编号在哈希表中进行检索,能迅速在目标物理页中准确获取到未被应用的重做日志,进一步地更新目标物理页(更新为故障时刻时计算节点的版本)。
本实施例中的高可用数据库系统的实现方法,可实现一种高可用数据库系统,可以在一边快速进行崩溃修复,同时一边对外提供数据库服务,区别于传统的高可用数据库系统需要等待崩溃恢复完成后才能对外提供服务。
上面对本发明实施例中高可用数据库系统的实现方法进行了描述,下面对本发明实施例中高可用数据库系统的实现装置进行描述,请参阅图6,图6为本发明高可用数据库系统的实现装置一个实施例的功能模块示意图,本实施例中,高可用数据库系统的实现装置包括:
检测模块401,用于实时检测所述计算节点运行过程中是否发生故障;
选取模块402,用于当所述计算节点运行过程中发生故障时,从所述云主机资源池中选取一个云主机作为新计算节点;
切换模块403,用于将所述分布式存储挂载至所述新计算节点,并在所述新计算节点启动新的数据库实例;
服务模块404,用于对所述数据库实例执行快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务。
可选的,在一实施例中,所述服务模块404包括:
崩溃恢复单元4041,用于从所述分布式存储的重做日志文件中加载未被应用的重做日志,并对所述未被应用的重做日志进行解析,将解析结果存入预置哈希表中;从所述分布式存储中读取预置必要数据对应的物理页至所述新计算节点的内存中进行版本更新,并将版本更新后的所述物理页写入所述分布式存储中,其中,所述必要数据包括:数据字典元数据、最大事务ID、全局唯一ID;根据更新后的所述物理页和所述物理页中更新后的回滚日志,以DDL操作为单位,对所述必要数据进行版本恢复,以使所述必要数据的版本与所述计算节点发生故障时保持一致,其中,当所述必要数据进行版本恢复后,所述高可用数据库系统对外提供服务;根据更新后的所述物理页和所述物理页中更新后的回滚日志,以事务为单位,对所述高可用数据库系统的表记录进行版本恢复,以使所述表记录的版本与所述计算节点发生故障时保持一致。
服务单元4042,用于在执行所述快速崩溃恢复操作时,通过所述新计算节点所在的SQL引擎接收外部客户端发送的数据库服务请求,并确定所述数据库服务请求需要处理的目标表记录以及包含所述目标表记录的目标物理页;通过所述SQL引擎向表记录引擎发起所述目标表记录的第一获取请求,通过所述表记录引擎向物理页引擎发起包含所述目标表记录的目标物理页的第二获取请求;若所述物理页引擎的物理页缓存池中不存在所述目标物理页,则通过所述物理页引擎向所述分布式存储发起所述目标物理页的第三获取请求;当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中;通过所述物理页引擎从所述物理页缓存池中读取所述目标物理页并返回至所述表记录引擎,以响应所述第二获取请求;通过所述表记录引擎判断所述目标物理页中需要读取的目标表记录是否存在未处理的挂起事务;若存在未处理的挂起事务,则加载对应的回滚日志,并利用加载的回滚日志将未处理的挂起事务进行回滚或提交处理后,通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;基于所述目标表记录,通过所述SQL引擎对所述数据库服务请求进行处理,并将处理结果返回至所述外部客户端。
可选的,在一实施例中,所述崩溃恢复单元4041还用于:
对所述未同步的重做日志进行解析,得到所述未同步的重做日志的物理页编号;以所述物理页编号为关键字、以所述物理页编号对应物理页的重做日志为值,构建由物理页编号和重做日志组成的键值对,将所述键值对插入预置哈希表中。
可选的,在一实施例中,所述服务单元4042还用于:
当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页;根据所述目标物理页的物理页编号,检索所述哈希表,得到所述目标物理页中未被应用的重做日志;根据所述目标物理页中未被应用的重做日志,对所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中。
本发明实施例实现了一种单机高可用数据库系统,当计算节点运行过程中发生故障时,从云主机资源池中选取一个云主机作为新计算节点;将分布式存储挂载至新计算节点,并在新计算节点启动新的数据库实例;对数据库实例执行快速崩溃恢复操作,并在执行快速崩溃恢复操作时,采用新计算节点对外提供数据库服务;不仅能保证在计算节点故障后采用新计算节点迅速进行接管,对外正常提供数据库服务,同于由于采用云主机资源池中的云主机作为新计算节点,无需采用主备架构,进而降低了数据库的运营成本。
上面从模块化功能实体的角度对本发明实施例中的高可用数据库系统的实现装置进行详细描述,下面从硬件处理的角度对本发明实施例中计算机设备进行详细描述。
请参照图7,图7为本发明实施例提供的一种计算机设备的硬件结构示意图,该计算机设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对计算机设备500中的一系列指令操作。更进一步地,处理器510可以设置为与存储介质530通信,在计算机设备500上执行存储介质530中的一系列指令操作。
计算机设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图7示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种计算机设备,所述计算机设备包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行上述各实施例中的所述高可用数据库系统的实现方法的步骤。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述高可用数据库系统的实现方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种高可用数据库系统的实现方法,其特征在于,所述高可用数据库系统包括一个计算节点、一个分布式存储以及还包括至少一个云主机资源池,所述云主机资源池包括多个云主机,每个所述云主机的物理配置规格与所述计算节点相同,所述高可用数据库系统的实现方法包括:
实时检测所述计算节点运行过程中是否发生故障;
当所述计算节点运行过程中发生故障时,从所述云主机资源池中选取一个云主机作为新计算节点;
将所述分布式存储挂载至所述新计算节点,并在所述新计算节点启动新的数据库实例;
对所述数据库实例执行快速崩溃恢复操作,并在执行所述快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务。
2.根据权利要求1所述的高可用数据库系统的实现方法,其特征在于,所述对所述数据库实例执行快速崩溃恢复操作包括:
从所述分布式存储的重做日志文件中加载未被应用的重做日志,并对所述未被应用的重做日志进行解析,将解析结果存入预置哈希表中;
从所述分布式存储中读取预置必要数据对应的物理页至所述新计算节点的内存中进行版本更新,并将版本更新后的所述物理页写入所述分布式存储中,其中,所述必要数据包括:数据字典元数据、最大事务ID、全局唯一ID;
根据更新后的所述物理页和所述物理页中更新后的回滚日志,以DDL操作为单位,对所述必要数据进行版本恢复,以使所述必要数据的版本与所述计算节点发生故障时保持一致,其中,当所述必要数据进行版本恢复后,所述高可用数据库系统对外提供服务;
根据更新后的所述物理页和所述物理页中更新后的回滚日志,以事务为单位,对所述高可用数据库系统的表记录进行版本恢复,以使所述表记录的版本与所述计算节点发生故障时保持一致。
3.根据权利要求1或2所述的高可用数据库系统的实现方法,其特征在于,所述在执行所述快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务包括:
在执行所述快速崩溃恢复操作时,通过所述新计算节点所在的SQL引擎接收外部客户端发送的数据库服务请求,并确定所述数据库服务请求需要处理的目标表记录以及包含所述目标表记录的目标物理页;
通过所述SQL引擎向表记录引擎发起所述目标表记录的第一获取请求,通过所述表记录引擎向物理页引擎发起包含所述目标表记录的目标物理页的第二获取请求;
若所述物理页引擎的物理页缓存池中不存在所述目标物理页,则通过所述物理页引擎向所述分布式存储发起所述目标物理页的第三获取请求;
当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中;
通过所述物理页引擎从所述物理页缓存池中读取所述目标物理页并返回至所述表记录引擎,以响应所述第二获取请求;
通过所述表记录引擎判断所述目标物理页中需要读取的目标表记录是否存在未处理的挂起事务;
若不存在未处理的挂起事务,则通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;若存在未处理的挂起事务,则加载对应的回滚日志,并利用加载的回滚日志将未处理的挂起事务进行回滚或提交处理后,通过所述表记录引擎将所述目标表记录返回所述SQL引擎,以响应所述第一获取请求;
基于所述目标表记录,通过所述SQL引擎对所述数据库服务请求进行处理,并将处理结果返回至所述外部客户端。
4.根据权利要求3所述的高可用数据库系统的实现方法,其特征在于,所述从所述分布式存储的重做日志文件中加载未被应用的重做日志,并对所述未被应用的重做日志进行解析,将解析结果存入预置哈希表中包括:
在所述新计算节点启动新的数据库实例时,从所述分布式存储的重做日志文件中加载未被应用的重做日志;
对所述未被应用的重做日志进行解析,得到所述未被应用的重做日志的物理页编号;
以所述物理页编号为关键字、以所述物理页编号对应物理页的重做日志为值,构建由物理页编号和重做日志组成的键值对,将所述键值对插入预置哈希表中。
5.根据权利要求4所述的高可用数据库系统的实现方法,其特征在于,在所述哈希表中,相同物理页编号的重做日志存储在同一个单向链表中。
6.根据权利要求4所述的高可用数据库系统的实现方法,其特征在于,所述当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中包括:
当所述分布式存储响应所述第三获取请求并返回所述目标物理页时,截留所述目标物理页;
根据所述目标物理页的物理页编号,检索所述哈希表,得到所述目标物理页中未被应用的重做日志;
根据所述目标物理页中未被应用的重做日志,对所述目标物理页进行版本更新,并将版本更新后的所述目标物理页存入所述物理页缓存池中。
7.根据权利要求3所述的高可用数据库系统的实现方法,其特征在于,所述高可用数据库系统的实现方法还包括:
在所述高可用数据库系统对外提供服务后,根据所述哈希表对应物理页的重做日志,对除所述必要数据之外的其他数据的物理页进行版本更新,以使所述其他数据的物理页版本与所述计算节点发生故障时保持一致。
8.一种高可用数据库系统的实现装置,其特征在于,所述高可用数据库系统包括一个计算节点、一个分布式存储以及还包括至少一个云主机资源池,所述云主机资源池包括多个云主机,每个所述云主机的物理配置规格与所述计算节点相同,所述高可用数据库系统的实现装置包括:
检测模块,用于实时检测所述计算节点运行过程中是否发生故障;
选取模块,用于当所述计算节点运行过程中发生故障时,从所述云主机资源池中选取一个云主机作为新计算节点;
切换模块,用于将所述分布式存储挂载至所述新计算节点,并在所述新计算节点启动新的数据库实例;
服务模块,用于对所述数据库实例执行快速崩溃恢复操作,并在执行所述快速崩溃恢复操作时,采用所述新计算节点对外提供数据库服务。
9.一种计算机设备,其特征在于,所述计算机设备包括:存储器和至少一个处理器,所述存储器中存储有指令;
所述至少一个处理器调用所述存储器中的所述指令,以使得所述计算机设备执行如权利要求1-7中任一项所述的高可用数据库系统的实现方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,其特征在于,所述指令被处理器执行时实现如权利要求1-7中任一项所述的高可用数据库系统的实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110516971.1A CN113254528A (zh) | 2021-05-12 | 2021-05-12 | 高可用数据库系统的实现方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110516971.1A CN113254528A (zh) | 2021-05-12 | 2021-05-12 | 高可用数据库系统的实现方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113254528A true CN113254528A (zh) | 2021-08-13 |
Family
ID=77223029
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110516971.1A Pending CN113254528A (zh) | 2021-05-12 | 2021-05-12 | 高可用数据库系统的实现方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113254528A (zh) |
-
2021
- 2021-05-12 CN CN202110516971.1A patent/CN113254528A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230205786A1 (en) | System and method for persistence and replication of changes to a data store | |
US9798792B2 (en) | Replication for on-line hot-standby database | |
Zhou et al. | Foundationdb: A distributed unbundled transactional key value store | |
US7200626B1 (en) | System and method for verification of a quiesced database copy | |
US7636741B2 (en) | Online page restore from a database mirror | |
CN108664359B (zh) | 一种数据库恢复方法、装置、设备及存储介质 | |
US20080276239A1 (en) | Recovery and restart of a batch application | |
US9465698B2 (en) | Systems and/or methods for data recovery in distributed, scalable multi-tenant environments | |
Goel et al. | Fast database restarts at facebook | |
US8244682B2 (en) | Saving snapshot of a knowledge base without blocking | |
US20100169289A1 (en) | Two Phase Commit With Grid Elements | |
US12007971B2 (en) | Pageable hash index for document store | |
Qin et al. | Scalable replay-based replication for fast databases | |
US8181180B1 (en) | Managing jobs in shared file systems | |
US11176004B2 (en) | Test continuous log replay | |
US9998544B2 (en) | Synchronization testing of active clustered servers | |
US8041690B2 (en) | Storing information for dynamically enlisted resources in a transaction | |
CN113297173B (zh) | 分布式数据库集群管理方法及装置、电子设备 | |
US20220004664A1 (en) | Data integrity procedure | |
WO2021237190A1 (en) | Distributed transaction execution in distributed databases | |
US20170139980A1 (en) | Multi-version removal manager | |
CN113254528A (zh) | 高可用数据库系统的实现方法及相关设备 | |
US11301341B2 (en) | Replication system takeover with handshake | |
CN114756408A (zh) | 元数据备份恢复方法、装置、电子设备及存储介质 | |
US9471409B2 (en) | Processing of PDSE extended sharing violations among sysplexes with a shared DASD |
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 |