⭐openGauss日志共识框架大揭秘⭐

发布时间:2022-07-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了⭐openGauss日志共识框架大揭秘⭐脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

❤️‍大家好,我是Gauss松鼠会,欢迎进来学习啦~❤️‍

👇👇👇

分布式一致性算法是一个分布式系统的基础性问题,所要解决的是一个分布式系统如何就某个值(决议)达成强一致,进而解决系统的高可用问题。Paxos是最重要的分布式一致性算法,很多人都把它作为“分布式一致性协议”的代名词。

虽然Paxos理论已经提出了很多年,使用Paxos及其各变种协议的产品也层出不穷,但是真正工业级的、第三方独立库还是很少见,开的项目更是少之又少,参考Paxos协议的常见开源产品有ZookeePEr、etcd,但是其协议并不能支持一个高吞吐的状态机复制,且没有提供独立的第三方库,可供其他系统快速接入使用。

为此,我们设计并实现了DCF特性,用于支持openGauss涉及到的分布式强一致场景。

1.什么是DCFF1f;

DCF全称是Distributed Consensus Framework,即分布式一致性共识框架。解决分布式一致性问题典型算法是Paxos、Raft等,DCF实现了Paxos算法。使用DCF可以提供日志复制、集群高可用等能力。DCF提供了基于Paxos多种角色节点类型,并能进行调整。日志复制支持动态流量调整,支持少数派强起能力,自选主能力。

DCF是一款高性能、高度成熟可靠、易扩展、易使用的独立基础库,其他系统通过接口与DCF简单对接,就能够轻松拥有Paxos算法赋予的强一致、高可用、自动容灾等能力。

⭐openGauss日志共识框架大揭秘⭐

DCF功能架构图如上图所示主要包括:算法模块、存储模块、通信模块、服务层等。

算法模块:

算法模块是基于multi-paxos协议实现,同时结合自身业务场景、及高性能和生态的需求,DCF做了很多功能扩展和性能优化,使其相对于基础的multi-paxos,功能变的更加丰富,在多种部署场景下性能都有明显的提升。其主要包括:Leader选举模块,日志复制模块,元数据模块,以及集群管理模块等。

存储模块:

出于特定业务场景和极致高性能考虑,DCF将日志存储单独抽取出一套公共接口,并实现了一个默认的高性能存储模块,有特定场景或极致高性能及成本需求的用户,可以结合已有的存储系统,对接DCF的日志存储接口来实现其特定需求,这也是DCF作为第三方独立库的优势之一。

通信模块:

通信模块主要是基于MEC实现(Message Exchange component),提供整个DCF组件实例间通信能力,以及异步@R_360_1988@框架,主要功能有:可扩展的多种通信协议,单播、广播、环回的发送接口,消息异步处理的框架,支持多channel机制和多优先级队列,支持压缩和批量发送等。

服务层:

服务层是驱动整个DCF运行的基础,提供程序运行所需要的各种基础服务,例如:锁、任务异步调度、线程池服务、定时器能力等。

2. DCF能做什么?

2.1 支持在线添加、删除节点,在线转让Leader能力

DCF在标准的multi-paxos基础上,支持在线添加、删除节点,支持在线将leader能力转让给其他节点,这更适合广泛业务场景,构建开发的生态。

2.2 支持优先级选主和策略化多数派

策略化多数派:经典Paxos 理论中,多数派达成一致后数据就可以提交,而多数派是非特定的,并不能保证某个或某些节点一定能得到完整的数据,在实际应用中,往往是地理位置较近的节点会拥有强一致的数据,而地理位置较远的节点,一直处于非强一致的状态,在发生城市级容灾的时候无法激活为主节点,形同虚设。策略化多数派能力,可以让用户通过动态配置,指定某个或某些节点必须保有强一致的数据,在出现容灾需求的时,可以立即激活为主节点。

优先级选主:用户可以指定各个节点的优先级,DCF严格按照指定的优先级选主,只有在优先级高的节点全部不可用时,才会激活优先级低的节点。

2.3 支持节点角色多样性

DCF除了可以提供经典的Leader、Follow、Candidate角色外,还可以提供定制化的角色,例如Passive角色(有日志,有数据,没有被选举权,不参与多数派投票),LOG角色(有日志,没有数据,没有被选举权,参与多数派投票),有了这些节点角色的支持,DCF可以支持节点同步、同异步混合部署等多集群部署方式。

2.4 Batch & Pipeline

Batch:DCF支持多级batch操作,主要包括:1)将多个日志合并成单个消息进行发送;2)将多个日志合并写磁盘;3)将多个日志合并复制。Batch可以有效的降低消息粒度带来的额外损耗,提升吞吐。

Pipeline:是指在上一个消息返回结果以前,并发的发送下一个消息到对应节点的机制,通过提高并发发送消息数量(Pipeline数量),可以有效的降低并发单请求延迟,提升性能;DCF在日志持久化、网络发送、日志复制等多个阶段采用纯异步方式,将Pipeline性能发挥至极致。

2.5 高效流控算法

Batching、Pipelining虽然能够提升系统整体吞吐量和性能,但是过大Batch也容易造成单请求时延过大,导致并发请求数过高,继而影响吞吐和请求时延,为此DCF设计实现了一套高效自适应的流控算法,自动探测网络带宽、网络发送时延、请求并发量等参数,并适时调整Batch和Pipeline参数,控制业务流量的注入。

流控算法主要流程:

⭐openGauss日志共识框架大揭秘⭐

核心算法流程如下:

  1. DCF主节点周期性采样和计算共识信息:这里的共识信息主要是端到端达成共识的时延、端到端达成共识的日志带、系统整体日志回放带宽。

  2. 计算控制量:主节点根据本次采样结果和历史结果,得出性能变化趋势,根据历史控制量的值和变化趋势调整本次控制方向和控制步长,朝更优性能方向计算得出新的控制量。

  3. 控制周期到达后,更新控制量。

  4. 控制量持续作用到业务流量,控制业务流量注入的频率。

  5. @H_621_126@

    DCF将持续在数据通讯、多日志流、并行大容量复制等场景中演进,以此为用户提供高效、可靠、易管理的日志多副本复制、备份能力,满足用户对数据库容灾、高可用方面的需求。

    3. DCF使用

    假设集群三个节点,ip分别为,192.168.0.11,192.168.0.12,192.168.0.13。node id分别为1,2,3;节点角色分别为LEADER,FOLLOWER,FOLLOWER。

    使用DCF组件能力需要在使用OM安装部署阶段开启开关enable_dcf,值为on,默认是关闭的。示例如下:

    script/gspylib/etc/conf/centralized/cluster_config_template_HA.XMl获取XML文件模板。

    加粗字体内容为示例,可自行替换。每行信息均有注释进行说明。

    <?xml version="1.0" encoding="UTF-8"?><ROOT>  <!-- 整体信息 -->  <CLUSTER>  <!-- 数据库名称 -->    <PARAM name="clusterName" value="Sample1" />    <!-- 数据库节点名称(hostname) -->    <PARAM name="nodenames" value="node1,node2,node3" />  <!-- 节点IP,与nodeNames一一对应 -->    <PARAM name="backIp1s" value="192.168.0.11,192.168.0.12,192.168.0.13"/>  <!-- 数据库安装目录-->    <PARAM name="gauSSDbAppPath" value="/opt/huawei/newSQL/app" />  <!-- 日志目录-->    <PARAM name="gaussdblogPath" value="/opt/huawei/logs/gaussdb" />  <!-- 临时文件目录-->    <PARAM name="tmpMppdbPath" value="/opt/huawei/logs/temp" />  <!--数据库工具目录-->    <PARAM name="gaussdBToolPath" value="/opt/huawei/tools" />  <!-- 集群数据库类型,此处示例为非分布式,即集中式类型-->    <PARAM name="clusterType" value="single-inst"/>  <!-- 是否开启DCF模式, 开启:on,关闭:off -->    <PARAM name="enable_dcf" value="on/off"/> <!-- DCF config配置信息 -->    <PARAM name="dcf_config" value="[{&quot;stream_id&quot;:1,&quot;node_id&quot;:1,&quot;ip&quot;:&quot;192.168.0.11&quot;,&quot;port&quot;:17783,&quot;role&quot;:&quot;LEADER&quot;},{&quot;stream_id&quot;:1,&quot;node_id&quot;:2,&quot;ip&quot;:&quot;192.168.0.12&quot;,&quot;port&quot;:17783,&quot;role&quot;:&quot;FOLLOWER&quot;},{&quot;stream_id&quot;:1,&quot;node_id&quot;:3,&quot;ip&quot;:&quot;192.168.0.13&quot;,&quot;port&quot;:17783,&quot;role&quot;:&quot;FOLLOWER&quot;}]"/>  </CLUSTER>

    3.1 安装完成后查询集群状态

    使用gs_ctl查询集群状态

    # gs_ctl query –D <data_dir># gs_ctl query -D /NVMe0/gaussdb/cluster/nvme0/dn1

    ⭐openGauss日志共识框架大揭秘⭐

    其中,dcf_replication_info表示当前节点dcf信息。

    • role:表示当前节点角色,角色一共有如下几种,LEADER、FOLLOWER、LOGGER、PASSIVE、PRE_CANDICATE、CANDIDATE、UNKNOW。从上图可以看出当前节点是LEADER节点。
    • term:选举任期。
    • run_mode:DCF运行模式,当前0表示自动选举模式,2表示关闭自动选举模式。
    • work_mode:DCF工作模式。
    • hb_interval:DCF节点间心跳间隔时间,单位ms。
    • elc_timeout:DCF选举超时时间,单位ms。
    • applied_index:被应用到状态机的日志位置。
    • commIT_index:已被大多数DCF节点保存的日志位置,此commit_index之前日志均已持久化。
    • First_index:DCF节点保存的首条日志位置,此位置会随着DN调用dcf_truncate而向后推进,之前的日志会被清理。
    • last_index:DCF节点保存的最后一条日志位置,此日志位置包含DCF节点存储在内存里但是没有持久化的日志,故而last_index >= commit_index。
    • cluster_min_apply_idx:集群最小已应用的日志位置。
    • leader_id:leader节点ID。
    • leader_ip:leader节点IP。
    • leader_port:leader节点端口,DCF内部使用 。
    • nodes:集群其他节点信息。

    3.2 集群规模在线调整

    若在线增加副本,执行以下一条命令即可。

    # gs_ctl member --opration=add --nodeid=<node_id> --ip=<ip> --port=<port> -D <data_dir>

    若需在线降副本,执行下面命令:

    # gs_ctl member --operation=remove --nodeid=<node_id> -D <data_dir>

    在集群状态正常的情况下,5分钟就可以完成删除单个副本的任务。

    3.3 集群支持少数派强起功能

    在多数派故障场景下,按正常的Paxos协议无法达成一致,系统无法继续提供服务。为了提供紧急服务能力,需在少数派情况下紧急启动提供服务。

    使用命令如下:

    # cm_ctl setrunmode –n <node_id> -D <data_dir> --xmode=;minority --votenum=<num>

    在集群3副本的情况下,2副本故障,只需1副本达成一致即可提交。

    3.4 主动switchover操作

    支持一主多备部署模式下切换数据库主备实例,实现AZ间的相互切换。switchover为维护操作,需确保数据库实例状态正常,所有业务结束并使用pgxc_get_senders_catchup_time()视图查询无主备追赶后,再进行switchover操作。

    例如节点备升主操作命令:

    # cm_ctl switchover –n <node_id> -D <data_dir>

    3.5 备机重建功能

    支持主备模式下全量build能力,实现过程是当主DN收到全量build的请求后,阻塞主DN回收DCF日志,备DN从主DN复制xlog日志和数据文件,在备DN拉起kernel后设置DCF开始复制日志点。

    命令示例如下:

    # gs_ctl build –b full –Z datanode –D <new_node_data_dir>

    此次开源的DCF 特性是openGauss在分布式领域的又一次探索,也是对开源技的又一次实质性贡献。

    @H_283_304@

    脚本宝典总结

    以上是脚本宝典为你收集整理的⭐openGauss日志共识框架大揭秘⭐全部内容,希望文章能够帮你解决⭐openGauss日志共识框架大揭秘⭐所遇到的问题。

    如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。