数仓GaussDB(DWS)GTM总结

举报
KevinMV 发表于 2020/09/30 14:57:32 2020/09/30
【摘要】 GTM全称为全局事务管理器,是系统中的常驻进程,主要作用是分发xid(事务ID)、snapshot(快照)、sequence(序列)等信息。为了保证事务标识的一致性和全局唯一性,在集群中只有一个主GTM提供服务,并采用了主备方式,从而实现了高可用。在连接方面,GTM是被动连接的,它不关心连接方的节点类型(是CN还是DN),只会根据接收到的报文信息,进行相应处理,并返回消息。

1 GTM概述:

    GTM全称为全局事务管理器,是系统中的常驻进程,主要作用是分发xid(事务ID)snapshot(快照)sequence(序列)等信息。为了保证事务标识的一致性和全局唯一性,在集群中只有一个主GTM提供服务,并采用了主备方式,从而实现了高可用。在连接方面,GTM是被动连接的,它不关心连接方的节点类型(是CN还是DN),只会根据接收到的报文信息,进行相应处理,并返回消息。一般情况下,CN会在事务执行阶段连接GTM获取XIDsnapshotDNAutoVaccumWork时获取XIDCM在仲裁GTM时获取状态信息。GTM在架构中的关系如图1所示。


1 GTM在架构中的关系图

 注:

        a)        Coordination:名为协调者,是所有客户端(gsqljdbcodbc)的入口,执行解析器、优化器、分布式事务等。

        b)        CM:名为集群管理,保障各个组件自动化协同工作。

        c)        DN:名为数据节点,是数据存储引擎,支持行存和列存、HDFS存储、向量化引擎和HA等。

        d)       xid:事务ID,具有全局一致性。

        e)        snapshot: 快照,用来判断给定的事务是否还在运行,如果一个事务在快照之中,那么即使该事务已经结束了也会被认为是正在运行

        f)         Sequence:序列,是用来产生唯一整数的数据库对象。序列的值是按照一定规则单挑自增的整数。因为自增所以不重复,因此sequence具有唯一性,常用于做主键。

              

GTM工具和文件简述

2.1 GTM工具

GTM二进制常用工具有两个:gtm_ctlgtm_initgtm。该类工具都是单线程执行,不存在多线程并发。

gtm_ctl通过信号控制GTM的进程,包括GTM的启停和升主降备,GTMswitchoverfailover,以及GTM的状态查询和同步设置等命令。例如GTM启动命令:gtm_ctl -Z gtm -D ../gtm start

gs_initgtm主要在集群安装时用于生产GTM配置文件。例如gtm.controlgtm.conf等文件。

 

2.2 GTM文件

       gtm.confGTM的配置文件,GTM启动时会解析该文件的参数,具体参数含义如表1

 1 gtm.conf参数表

gtm.control:是GTM控制文件,用来存放xidtimeline,文件格式如下:

     xid

     timeline

     transaction_num (默认是1

gtm.sequence:存放GTMuuidsequence文件,数据行数不定,文件格式如下:

    uuid

    seq1 info (包括sequence的基本属性值)

    seq2 info 

    。。。。

gtm.pid:存储GTM的进程号和数据目录等。

gtm.opts:存储GTM启动arguments参数。

 

GTMHA机制  

3.1 GTM的状态

       GTMHA机制,我们将GTM分为三种类型的状态,分别为主机状态、连接状态和同步状态,下面简要介绍三种类型的状态。

GTM 主机状态有四种:

    1:Pending:初始启动状态,GTM待仲裁状态。

    2:Priamry:主GTM状态表示。

    3:Standby:备GTM状态表示。

    4:UnknowGTM进程不在的状态。

GTM连接状态,表示主GTM与备GTMETCD的连接状态。

    1:Connection ok:主备连接正常或与ETCD连接正常。

    2:Connetion bad:主备连接异常。

GTM同步状态,表示GTM的同步逻辑。

    1:Most available:最大可用模式。当无ETCD,且主备GTM连接异常时,主GTM的同步状态为该状态。

    2:Sync:同步状态。

 

3.2 GTM的状态切换流程简述

GTM的状态切换流程如图2所示。CM拉起的GTM状态初始都是Pending状态,然后通过比较xid决定主备,xid大的为主GTMxid小的为备GTM。当主备连接异常且无ETCD时,主GTM的同步状态会变为most_available。当主GTM出现问题时,CM会仲裁备GTM,通过failover升主GTM,如果无ETCD,那么同步状态变为most available。也可以通过switchover进行主备GTM转换,此时同步状态不会变化。

 

2 GTM状态切换流程图

 

3.3 GTM同步机制

       GTM的同步需要满足相应的同步条件并处于对应的同步模式才可以进行。例如xid的同步需要满足curval(当前值)>=backupVak(备份值)GTM_SyncGXIDFlagtrue时才可进行同步。Sequence的同步也要满足curval(当前值)>=backupVak(备份值)的条件,sequence创建时会默认同步一次。此外还需要处于相应的同步模式下才可以,有三种同步模式:

        a)        sync auto:异步同步模式。GTMpending模式启动后,所呈现的初始同步模式。

        b)       sync on:强同步模式。当GTM主备启动后,CM_Server接收到CM_Agent上报的主备GTM连接正常的消息时,会将GTM主备的同步状态从sync auto置为sync on

        c)        sync offGTM主备不同步并且主GTM也不与ETCD同步。Sync off默认不使用。

    注:

        1 在主备从无ETCD集群中,如果主备连接异常,主GTM的同步状态会变为most available。而在有ETCD的集群中,无论主备是否连接异常或挂掉,ETCD是否挂掉,都不会切换最大可用模式。

        2 只有GTM处于sync on模式下,failoverswitchover操作才可进行。

 

 

 

 

 

 

 

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。