实现OpenGauss数据库高可用集群的方法与流程

文档序号:29264552发布日期:2022-03-16 13:25阅读:725来源:国知局
实现OpenGauss数据库高可用集群的方法与流程
实现opengauss数据库高可用集群的方法
技术领域
1.本发明属于关系型数据库管理及操作系统技术领域,尤其涉及一种实现opengauss数据库高可用集群的方法及其用途。


背景技术:

2.opengauss是一款开源关系型数据库管理系统,其内核源自postgresql,作为一个开源、免费的数据库平台,旨在鼓励社区贡献、合作。目前,opengauss数据库已支持对预写式日志(wal)进行流式物理复制(流复制),数据库用户可以通过流复制,实现备库过程中一边从主库接收wal,一边回放接收到的wal,从而构建只读备库,当只读备库被设定为同步备库时,可以保证每一个事务成功提交后,主库与同步备库的wal是完全一致的。如果后续流程中主库发生故障不能提供服务,则用户可以在备库执行opengauss的failover命令,把备库提升为主库,新主库即可接替旧主库提供服务。
3.但是,上述操作方式存在以下三个问题:
4.(1)由于针对opengauss数据库是否发生故障无法进行快速检测,因而会导致数据库长时间暂停服务的情况发生。
5.(2)当存在多个供选择备库时,无法确定并自动选择最合适的新主库。
6.(3)failover命令需要人工执行,存在较大的误操作可能性。
7.鉴于此,如果在opengauss数据库中设计一种高可用集群方案,使之能够自动检测数据库可用性状态,并且当主库不可用时自动计算并选择最合适的备库,并及时把该备库提升为主库,则可以极大地提高数据库的可靠性,降低故障对数据库使用的不利影响,为数据库性能的正常发挥提供有力的技术保障。


技术实现要素:

8.为了克服opengauss数据库在主库故障自动检测及备库提升操作中存在的上述不足,本发明提供了一种解决方案。本发明的目的是为opengauss数据库设计一种高可用方案,并在此基础上搭建opengauss高可用集群,同时在该高可用集群内支持数据库可用性状态自动检测以及节点故障快速处理功能。
9.具体而言,本发明提供了一种实现opengauss数据库高可用集群的方法,通过创建一个独立于opengauss数据库之外的监控程序,由该监控程序对opengauss数据库进行状态检测和状态记录,并根据检测获得的数据库状态进行相应的处理,本方法包括以下过程:
10.(1)利用opengauss数据库的流式物理复制(流复制)搭建一个主库和至少一个备库,实现数据冗余;
11.(2)利用etcd(一种高可用的key/value存储系统,主要用于分享配置和服务发现)的特性,实现分布式锁(leader key),该leader key由所述监控程序创建并且设置租期,持有leader key的监控程序负责定期续租,当租期到达后,leader key自动被释放;
12.(3)当集群内不存在leader key持有者(leader)时,所述监控程序作为一个etcd
客户端,监控程序判断自身监控的数据库是否为最健康节点,当获得肯定答案时,则尝试获取leader key;
13.(4)当所述监控程序获取到leader key后,通过执行failover命令把自身监控的opengauss数据库提升为主库,相反,如果所述监控程序获取不到或失去了leader key,则把自身监控的opengauss数据库以备库的方式启动。
14.进一步地,上述实现opengauss数据库高可用集群的方法包括以下步骤:
15.(1)主库和备库流式物理复制环境配置
16.通过opengauss数据库的gs_basebackup工具从主库生成一个基础备份,编辑数据库配置文件,添加replconninfo参数,并以备库方式启动数据库;
17.(2)创建监控程序
18.创建一个独立于opengauss数据库之外的监控程序,该监控程序是一个不断循环运行的程序,在每一个循环内执行故障检测以及故障处理功能;
19.(3)集群故障检测
20.高可用集群判断集群是否存在故障的依据是通过监控程序访问etcd,并检查leader key是否存在,当leader key不存在时,则判定集群出现故障;
21.(4)集群故障自动处理
22.当集群出现故障导致主库不可用或不存在主库时,监控程序则先判断自身监控的数据库是否为最健康节点,判断逻辑是通过对比集群内所有节点的lsn(log sequence number,即opengauss数据库当前已产生或接收的wal日志的大小),如果本数据库节点的lsn最大,则说明本数据库是最健康节点,此时监控程序尝试获取leader key,并设置leader key的租期,设置租期的作用在于当主库宕机后能够自动释放leader key,并触发集群故障自动处理机制;获取leader key成功后,执行opengauss数据库的failover命令把本数据库提升为主库;
23.(5)备库故障检测
24.在高可用集群内,每个备库都是主库的一个副本,在主库不可用时被提升为主库,判定备库是否出现故障的依据是通过监控程序检测opengauss进程的pid文件是否存在;
25.(6)备库故障处理
26.对备库故障的处理,监控程序执行opengauss数据库的build命令,先进行增量build,当增量build失败后执行全量build,build命令执行完成后重新启动备库。
27.进一步地,上述实现opengauss数据库高可用集群的方法中第(2)步创建一个独立于opengauss数据库之外的监控程序,该监控程序是一个不断循环运行的程序,在每一个循环内执行故障检测以及故障处理功能,其每个步骤的执行主体均是监控程序,每个循环内的处理流程包括以下分步骤:
28.(a)监控程序访问etcd进程,检查leader key是否存在,如果存在,进入步骤(b),如果不存在,进入步骤(e);
29.(b)监控程序判断自身是否持有leader key,如果持有,说明本节点是集群的主节点,则直接结束本次循环,如果未持有,则进入步骤(c);
30.(c)监控程序检测作为监控对象的opengauss数据库进程是否正常运行,如果监控对象运行正常,则该监控对象继续以备库的方式运行,监控程序结束本次循环,如果监控对
象运行不正常,则进入步骤(d);
31.(d)监控程序执行opengauss数据库提供的gs_ctl build命令修复监控对象,监控对象以备库的方式运行,监控程序结束本次循环;
32.(e)监控程序判断监控对象是否为集群内最健康节点,判断逻辑是通过对比集群内所有节点的lsn,如果本数据库节点的lsn最大,则说明本数据库是最健康节点,如果监控对象是最健康节点,则进入步骤(f),否则进入步骤(g);
33.(f)监控程序访问etcd进程,尝试获取leader key(即在etcd内创建leader key路径),如果获取leader key成功,则执行opengauss数据库提供的gs_ctl failover命令把监控对象提升为主库,监控程序结束本次循环,否则进入步骤(g);
34.(g)监控程序等待集群内新的leader key持有者(leader)产生,当新的leader key持有者产生后,监控程序执行opengauss数据库提供的gs_ctl build命令修复备库,监控对象以备库的方式运行,监控程序结束本次循环。
35.此外,本发明还涉及上述实现opengauss数据库高可用集群的方法在关系型数据库管理或操作系统中的用途。
36.综上,本发明首次提出了一种实现opengauss数据库高可用集群的方法,本方法具有以下优点:
37.(1)在一个正在运行的opengauss数据库高可用集群内,当主库不可用时,数据库集群能自动检测确认主库故障并及时生成新的主库,有效避免了数据库长时间暂停服务情况的发生。
38.(2)当存在多个供选择备库时,能够自动计算并选择最合适的备库,并及时把该备库提升为新主库。
39.(3)在一个正在运行的opengauss数据库高可用集群内,当备库不可用时,数据库集群能自动检测确认备库故障并及时修复备库。
40.(4)通过监控程序全程自动化执行,避免了人工误操作的发生。
附图说明
41.为了更清楚地说明本发明实施例的技术方案,下面对本发明实施例中需要使用的附图作简要介绍,显而易见地,下述附图仅是本发明中记载的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
42.图1为本发明方法中监控程序每个循环内的处理流程示意图。
具体实施方式
43.为使本发明的目的、技术方案和优点更加清楚,下面将结合具体实施例及相应的附图对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例,本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
44.同时,应理解,本发明的保护范围并不局限于下述特定的具体实施方案;还应当理解,本发明实施例中使用的术语是为了描述特定的具体实施方案,而不是为了限制本发明
的保护范围。
45.实施例1:一种实现opengauss数据库高可用集群的方法,本方法通过创建一个独立于opengauss数据库之外的监控程序,由该监控程序对opengauss数据库进行状态检测和状态记录,并根据检测获得的数据库状态进行相应的处理,本方法按照以下进程予以实施:利用opengauss数据库的流复制搭建一个主库和至少一个备库,实现数据冗余;利用etcd的特性,实现分布式锁(leader key),该leader key由监控程序创建并且设置租期,持有leader key的监控程序负责定期续租,当租期到达后,leader key自动被释放;当集群内不存在leader key持有者时,监控程序作为一个etcd客户端,监控程序判断自身监控的数据库是否为最健康节点,如果是,则尝试获取leader key;当监控程序获取到leader key后,通过执行failover命令把自身监控的opengauss数据库提升为主库,相反,如果监控程序获取不到或失去了leader key,则把自身监控的opengauss数据库以备库的方式启动。
46.具体而言,本发明实现opengauss数据库高可用集群的方法包括以下步骤:
47.(1)主库和备库流式物理复制环境配置
48.通过opengauss数据库的gs_basebackup工具从主库生成一个基础备份,编辑数据库配置文件,添加replconninfo参数,并以备库方式启动数据库。
49.(2)创建监控程序
50.创建一个独立于opengauss数据库之外的监控程序,该监控程序是一个不断循环运行的程序,在每一个循环内执行故障检测以及故障处理功能;监控程序在每个循环内的处理流程包括以下分步骤(参见图1):
51.(a)监控程序访问etcd进程,检查leader key是否存在,如果存在,进入步骤(b),如果不存在,进入步骤(e);
52.(b)监控程序判断自身是否持有leader key,如果持有,说明本节点是集群的主节点,则直接结束本次循环,如果未持有,则进入步骤(c);
53.(c)监控程序检测作为监控对象的opengauss数据库进程是否正常运行,如果监控对象运行正常,则该监控对象继续以备库的方式运行,监控程序结束本次循环,如果监控对象运行不正常,则进入步骤(d);
54.(d)监控程序执行opengauss数据库提供的gs_ctl build命令修复监控对象,监控对象以备库的方式运行,监控程序结束本次循环;
55.(e)监控程序判断监控对象是否为集群内最健康节点,判断逻辑是通过对比集群内所有节点的lsn,如果本数据库节点的lsn最大,则说明本数据库是最健康节点,如果监控对象是最健康节点,则进入步骤(f),否则进入步骤(g);
56.(f)监控程序访问etcd进程,尝试获取leader key(即在etcd内创建leader key路径),如果获取leader key成功,则执行opengauss数据库提供的gs_ctl failover命令把监控对象提升为主库,监控程序结束本次循环,否则进入步骤(g);
57.(g)监控程序等待集群内新的leader key持有者(leader)产生,当新的leader key持有者产生后,监控程序执行opengauss数据库提供的gs_ctl build命令修复备库,监控对象以备库的方式运行,监控程序结束本次循环。
58.(3)集群故障检测
59.高可用集群判断集群是否存在故障的依据是通过监控程序访问etcd,并检查
leader key是否存在,当leader key不存在时,则判定集群出现故障。
60.(4)集群故障自动处理
61.当集群出现故障导致主库不可用或不存在主库时,监控程序则先判断自身监控的数据库是否为最健康节点,判断逻辑是通过对比集群内所有节点的lsn,如果本数据库节点的lsn最大,则说明本数据库是最健康节点,此时监控程序尝试获取leader key,并设置leader key的租期,设置租期的作用在于当主库宕机后能够自动释放leader key,并触发集群故障自动处理机制;获取leader key成功后,执行opengauss数据库的failover命令把本数据库提升为主库。
62.(5)备库故障检测
63.在高可用集群内,每个备库都是主库的一个副本,在主库不可用时被提升为主库,判定备库是否出现故障的依据是通过监控程序检测opengauss进程的pid文件是否存在。
64.(6)备库故障处理
65.对备库故障的处理,监控程序执行opengauss数据库的build命令,先进行增量build,当增量build失败后执行全量build,build命令执行完成后重新启动备库。
66.以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、替换等,均应包含在本发明的权利要求保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1