数仓GaussDB(DWS)GTM总结
1 GTM概述:
GTM全称为全局事务管理器,是系统中的常驻进程,主要作用是分发xid(事务ID)、snapshot(快照)、sequence(序列)等信息。为了保证事务标识的一致性和全局唯一性,在集群中只有一个主GTM提供服务,并采用了主备方式,从而实现了高可用。在连接方面,GTM是被动连接的,它不关心连接方的节点类型(是CN还是DN),只会根据接收到的报文信息,进行相应处理,并返回消息。一般情况下,CN会在事务执行阶段连接GTM获取XID和snapshot,DN在AutoVaccumWork时获取XID,CM在仲裁GTM时获取状态信息。GTM在架构中的关系如图1所示。
图1 GTM在架构中的关系图
注:
a) Coordination:名为协调者,是所有客户端(gsql,jdbc,odbc)的入口,执行解析器、优化器、分布式事务等。
b) CM:名为集群管理,保障各个组件自动化协同工作。
c) DN:名为数据节点,是数据存储引擎,支持行存和列存、HDFS存储、向量化引擎和HA等。
d) xid:事务ID,具有全局一致性。
e) snapshot: 快照,用来判断给定的事务是否还在运行,如果一个事务在快照之中,那么即使该事务已经结束了也会被认为是正在运行
f) Sequence:序列,是用来产生唯一整数的数据库对象。序列的值是按照一定规则单挑自增的整数。因为自增所以不重复,因此sequence具有唯一性,常用于做主键。
二 GTM工具和文件简述
2.1 GTM工具
GTM二进制常用工具有两个:gtm_ctl和gtm_initgtm。该类工具都是单线程执行,不存在多线程并发。
gtm_ctl通过信号控制GTM的进程,包括GTM的启停和升主降备,GTM的switchover和failover,以及GTM的状态查询和同步设置等命令。例如GTM启动命令:gtm_ctl -Z gtm -D ../gtm start。
gs_initgtm主要在集群安装时用于生产GTM配置文件。例如gtm.control,gtm.conf等文件。
2.2 GTM文件
gtm.conf是GTM的配置文件,GTM启动时会解析该文件的参数,具体参数含义如表1。
表1 gtm.conf参数表
gtm.control:是GTM控制文件,用来存放xid、timeline,文件格式如下:
xid
timeline
transaction_num (默认是1)
gtm.sequence:存放GTM的uuid和sequence文件,数据行数不定,文件格式如下:
uuid
seq1 info (包括sequence的基本属性值)
seq2 info
。。。。
gtm.pid:存储GTM的进程号和数据目录等。
gtm.opts:存储GTM启动arguments参数。
三GTM的HA机制
3.1 GTM的状态
在GTM的HA机制,我们将GTM分为三种类型的状态,分别为主机状态、连接状态和同步状态,下面简要介绍三种类型的状态。
GTM 主机状态有四种:
1:Pending:初始启动状态,GTM待仲裁状态。
2:Priamry:主GTM状态表示。
3:Standby:备GTM状态表示。
4:Unknow:GTM进程不在的状态。
GTM连接状态,表示主GTM与备GTM或ETCD的连接状态。
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大的为主GTM,xid小的为备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_SyncGXIDFlag为true时才可进行同步。Sequence的同步也要满足curval(当前值)>=backupVak(备份值)的条件,sequence创建时会默认同步一次。此外还需要处于相应的同步模式下才可以,有三种同步模式:
a) sync auto:异步同步模式。GTM以pending模式启动后,所呈现的初始同步模式。
b) sync on:强同步模式。当GTM主备启动后,CM_Server接收到CM_Agent上报的主备GTM连接正常的消息时,会将GTM主备的同步状态从sync auto置为sync on。
c) sync off:GTM主备不同步并且主GTM也不与ETCD同步。Sync off默认不使用。
注:
1 在主备从无ETCD集群中,如果主备连接异常,主GTM的同步状态会变为most available。而在有ETCD的集群中,无论主备是否连接异常或挂掉,ETCD是否挂掉,都不会切换最大可用模式。
2 只有GTM处于sync on模式下,failover和switchover操作才可进行。
- 点赞
- 收藏
- 关注作者
评论(0)