南大通用GBase 8c多模多态数据库,支持单机、主备式、分布式部署形态。无论主备式或分布式形态均支持高可用。GBase 8c的分布式设计依托于南大通用均衡多方因素沉淀得出的技术和经验。GBase 8c分布式高可用支持全组件级冗余,即所有节点都支持高可用部署。本文对南大通用GBase 8c分布式高可用做简单介绍,分布式架构可参见如下:

南大通用GBase 8c数据库之分布式高可用部署架构说明_Server

可以看到,南大通用GBase 8c分布式数据库实际包含CN、DN、GTM和HA管理组件,各个组件具体介绍如下:

  • CN:协调器,采用完全对等的部署方式。对外提供接口,负责进行SQL解析和优化、生成执行计划,并协调数据节点进行数据查询和写入。在功能上CN上只存储系统的全局元数据,并不存储实际的业务数据;在部署上,CN多个节点完全对等的部署方式,每个节点在同一时间对外都提供相同的数据库视图,所以我们的CN节点高可用可以根据实际的业务需求,部署1个或多个都可以,多个CN节点可以部署在同机房、同城、异地都可以。
  • DN:数据节点,采用主备的高可用架构,主备之间可以配置同步或异步方式。用于处理存储本节点相关的元数据,每个节点还存储它所在的业务数据的分片。在功能上,DN节点负责完成执行协调器节点分发的执行请求,完成数据存储和本地数据查询和写入;在部署上,DN节点每个高可用组采用主从备份的方式,可以部署单主、一主一从以及一主多从的部署方式均可,主从之间可以配置为同步的备份方式也可以配置为异步的备份方式,也可以在一个高可用组内同时存在同步和异步的节点,一般同机房同城的节点之间采用同步的备份方式,异地的节点之间采用异步的备份方式。
  • GTM:全局事务管理器,采用主备的高可用架构,主备之间可以配置同步或异步方式。主要是做分布式事务,负责生成并维护全局时间戳,保证集群数据一致性。在部署上,GTM的与DN节点的部署类似,也是一主多从的备份方式,节点间可以采用同步的备份方式也可以采用异步的备份方式。
  • HA Center(等效于ETCD):集群状态管理器,采用Raft的复制协议。存储各个节点的高可用状态,负责在故障情况下判断集群各个节点状态。
  • GHA Server(等效于patroni):集群管理器,采用主备的高可用架构,主备之间可以配置同步或异步方式。用以管理整个集群各个节点的高可用状态(主备、死活等)。GHA Server的主备信息与DN类似,也是将leader信息存在HA Center上,谁先写谁就是主,需要周期更新,如果超过TTL没更新就会删掉leader信息,其他节点去写就能写进去就变成leader了。
  • GHA Agent跟着每个CN和DN上都有,作为代理,接收GHA Server的消息并处理。

具体在server服务器上体现的是高可用进程:

gha_server是主要运行在管理节点的服务进程,管理整个集群节点间进程和集群状态,具体工作原理如下:

  • rpc:消息通信,gha_ctl所有消息都是通过rpc发给gha_server,gha_server处理完之后通过rpc发给gha_agent,gha_agent返给gha_server再返出去
  • arbiter:决策进程,是gha_server最繁忙的进程。 用来决策节点死活、断网等。
  • leader checker:gha_server本身是主备的架构,为了防止出现双主的情况,做了主的检测。leader ping所有的ha center节点,如果都失败说明孤岛了,就自己把leader让出来。
  • cluster_info_publisher:网络拓扑信息通信,周期发给gha_agent。
  • dcs_updater:因为gha_server内部存的状态信息会频繁变化,有时候往ha center上写会写失败,写失败就放到dcs_updater里面置个标志位,接着往下写(为了保证ha center上的状态都是最新的是正确的)

gha_agent运行在每个节点上,执行由gha_server进程下发或主动监控上报消息给gha_server,具体工作原理如下:

  • rpc:和gha_server进行消息通信
  • reporter:周期查询数据库状态,会周期(3秒)更新给gha_server的arbiter。
  • state reporter:取自己节点的pgxcnode表周期更新给gha_server,gha_server跟自己的网络拓扑对比,发现跟自己的网络拓扑不一样就做查缺补漏
  • ha state reporter:为了防止出现DN双主,现在的高可用系统在判断DN主坏掉的过程是gha_server收不到gha_agent的消息了。但是如果是断网的情况,就会有主备倒换的误操作(DN主没坏,只是跟gha_server通不上信了),就会双主。为了防止出现双主的情况, ha state reporter用于DN备机与DN主机周期通信,需要半数以上DN备机判断DN主失联才会触发主备倒换。
  • leader checker:DN或者GTM的主发现自己进入孤岛,就会自动把自己的leader让出来并重启。

同时,高可用模块参考模块:

  • etcd:运行RAFT协议,用于存储各个高可用组的内部状态,各个高可用组据此执行切换等操作。
  • patroni:采用Python开发,支持原生PG高可用的开源工具,只支持一个高可用组,在本系统中需加以改进,以支持多个高可用组。Patroni作为一个代理,运行在每一个节点上,监控当前节点的健康状况,并反映到etcd上,同时通过etcd了解其它节点的健康状况,据此实现主备切换等操作。
    从上面的介绍可以看到,GBase 8c分布式架构已经充分考虑了自身组件的高可用,在实际部署中,我们可以根据部署服务器资源灵活设计高可用部署架构,保障自己数据的可靠性和安全性。