说MGR - 全局事务认证模块&异地事务执行模块
admin
2023-01-25 20:02:02
0

全局事务认证模块


全局事务认证模块有一个消息队列,用来存放收到的消息。这些消息主要是事务的Binlog Event,也有一部分状态和控制消息。状态表replication_group_member_stats中的字段COUNT_TRANSACTIONS_IN_QUEUE指的就是这个队列中的事务数量。


全局事务认证模块的核心任务是做冲突检测,识别出那些同时修改了同样数据的事务,并做出相应的处理。冲突检测时需要的信息包括三点。


·主键信息。

·事务执行时数据库的快照版本。

·执行事务的MySQL实例的UUID。



冲突检测需要的信息


MGR的冲突检测中以数据行为单位,两个事务是不是修改了同样的数据,是通过事务所修改的主键值来判断的。当发现两个事务修改了同样的数据后,如何来判断这两个事务是不是同时执行呢?这里用到了数据库快照版本。数据库快照是数据库的一个瞬时状态,每个写操作都会导致数据库状态的变化,不同的状态用不同的快照版本来表示。快照版本是用GTID来表示的,每个写事务都会产生一个唯一的GTID,这个GTID由全局事务认证模块产生,且在事务提交时会被添加到全局变量gtid_executed中。因此,gtid_executed的内容就是MySQL数据库的快照版本。


冲突检测数据库


全局事务认证模块中还维护了一个冲突检测数据库,它是主键哈希+快照版本的列表。快照版本存储的是最后一个修改此主键事务的快照版本加上这个事务的GTID。收到事务信息后,全局事务认证模块会根据Transaction_context_log_event中的主键信息,从冲突检测数据库中检索出所有主键的快照版本和该事务的快照版本进行对比。当前事务的快照版本必须要包含检索出的所有主键快照版本中的GTID,否则就是有冲突。


冲突处理


冲突检测完成后,全局认证模块接下来的处理是有本地事务和异地事务区分的。Transaction_context_log_event中记录了产生这个事务的MySQL实例的UUID。根据这个UUID,就能判断出这是一个本地事务还是异地事务。对于本地事务处理如下。


·如果没有冲突,唤醒这个事务的线程,并且告诉它完成提交操作。

·如果有冲突,唤醒这个事务的线程,并且告诉它发生冲突,需要回滚。

·不论是否有冲突,Binlog Event都会被丢弃。


对于异地事务的处理如下。


·如果没有冲突,将这个事务的Binlog Event写入Relay log中,让group_replication_applier通道去执行。

·如果有冲突,则丢弃这个事务的Binlog Event。



冲突检测数据库的清理


随着使用时间越来越长,冲突检测数据库中维护的主键信息会越来越多,会占用大量内存。为了减少内存的使用并提高查询效率,全局事务认证模块需要定期的清理冲突检测数据库。如果一个事务已经在所有成员上执行了,其它事务的执行肯定不会和它有冲突,因此这个事务的所有主键信息就可以从冲突检测数据库中移除。主键信息的清理是依据成员上的全局变量gtid_executed中的GTID集合来做的。全局认证模块启动了一个广播线程,每60秒将自己的gtid_executed中的GTID集合广播到所有成员上。全局认证模块收到所有成员的GTID集合后,取它们的交集。这个交集中包含的就是那些已经在所有成员上执行了的事务GTID的集合,称作全局完成的GTID集合(replication_group_member_stats表中的TRANSACTIONS_COMMITTED_ALL_MEMBERS显示的就是全局完成的GTID集合。)。全局事务认证模块会将冲突检测数据库所有主键的快照版本和全局完成的GTID集合进行对比,如果快照版本GTID集合是全局完成的GTID集合的子集,则这个主键的信息就会从冲突检测数据库中清除掉。



异地事务执行模块


为了执行异地事务的Binlog Event,MGR会自动创建一个名为group_replication_applier的通道。这个通道的Receiver线程是关闭的,不会从其它成员上去复制Binlog Event。所有的Binlog Event都是由全局事务认证模块通过API写入Relay log的。


事务流程的总结


事务在MGR中的执行过程可以总结为以下三个部分。

·网络传输。

·事务在本地的执行过程。

·事务在异地的执行过程。



网络传输


MGR通过Paxos协议来传播事务信息。Paxos保障所有的事务信息按照同样的顺序传播到所有成员上。


事务在本地成员上的执行过程


事务在本地提交时(prepare之后,写Binlog之前),将事务信息发送至通信模块,然后开始等待事务认证结果。通信模块将事务排序后发送到本地成员的全局事务认证模块。全局事务认证模块做完冲突检测后,唤醒该事务继续执行,或回滚。


事务在异地成员上的执行过程


通讯模块将事务排序后发送到全局事务认证模块。全局事务认证模块认证成功后,将该事务的Binlog Event写入Relay log,由group_replication_applier通道来执行。如果全局事务认证模块认证失败,则会丢弃该事务的Binlog Event。

相关内容

热门资讯

女子身份证丢失后名下出现“吸毒... 四川籍的庞女士定居浙江宁波多年,她怎么也没想到,因丢失身份证一事,竟让她陷入长达7年“自证清白”的困...
省农科院成功研发我省首个高粱全... 近日,记者从省农科院获悉,该院作物资源研究所、农业生物技术研究所联合石家庄博瑞迪生物,成功研制出省内...
消息称AMD与Anthropi... IT之家 7 月 22 日消息,据华尔街日报消息,AMD 与 Anthropic 达成了一项价值数百...
独家!苹果iPhone18系列... 7月22日,中国证券报记者从产业链人士处独家获悉,进入7月,苹果iPhone 18系列手机已在量产,...
29岁的党鑫蕊倒在广西泥泞山路... 7月11日晚一通叮嘱,成了父子最后的对话;几天后父亲在殡仪馆见到一身泥的儿子,才知道“他走得有多难。...
时隔一年,英国国防大臣斯特里廷... 一年前,当时还是英国卫生大臣的韦斯·斯特里廷(Wes Streeting)曾公开指责以色列犯下战争罪...
微软与Mistral宣布扩大战... 【CNMO科技消息】7月22日,据韩媒报道,微软与法国AI企业Mistral正式宣布大幅扩大双方战略...
东方空间引力一号(遥四)运载火... 本报讯 (记者袁传玺)北京时间7月22日10时54分,东方空间引力一号(遥四)·星联体号运载火箭在我...
“你的手上沾满鲜血”,美防长出... 当地时间21日,美国国防部长赫格塞思在出席国会参议院听证会时表示,根据最新估算,美国对伊朗战事的花费...
Kimi K3让美国羡慕又不甘... 北京时间7月17日凌晨,月之暗面公司发布开源大模型Kimi K3。据报道,该模型总参数规模达2.8万...