MySQL Case-使用Wireshark窥探异步复制、半同步、组复制

我们知道异步复制、5.6版本半同步和MySQL 5.7出来的增强半同步,还有MGR在主从复制的过程中流程是不同的,那么我们能不能通过tcpdump或wireshrk看下其中的异同呢?

创建一张a表插入一条数据,进行捕获,只捕获insert操作。

insert into test.a values(1);

异步复制

异步复制的流程如下,在主库二阶段 write binlog后,将binlog event发送给从库的IO Thread然后进行写reloy log,并不会管IO Thread返回ACK信息,那么从wireshark中看到的现象是这样的吗?

wireshark信息如下

步骤2的信息只是步骤1的反馈,不带有任何数据信息这个我们会与增强半同步进行对比,This is an ACK to the segment in frame:1

而步骤1通过Follow TCP Stream可以大致的看到binlog events事务信息内容与insert into test.a values (1)大致匹配。

半同步after_sync和after_commit

如下图是我们说的5.7版本的alter_sync增强半同步,在write binlog后将binlog events 发送给从库的IO Thread,IO Thread apply应用完后,发送ACK反馈给主库然后才能进行提交,注意这里的ACK是带有信息的,不管是after_commit还是after_sync,我这里看到的tcpdump内容一致,我们以after_sync为例。

mysql> show variables like '%rpl_semi_sync_master_wait_point%';
+---------------------------------+------------+
| Variable_name                   | Value      |
+---------------------------------+------------+
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+---------------------------------+------------+
1 row in set (0.02 sec)

tcpdump信息

我们再来看,2是给1的反馈,但是2的ACK带有PSH,是带有信息的

那么2给1的反馈的内容是什么呢,查看Follow TCP stream,内容是主库写binlog的位置,

查看主库当前的binlog信息,正在写29号日志,所以说步骤2就是增强版同步从库给主库的ACK反馈,而不是那个异步复制中不带任何信息的ACK。

-rw-r----- 1 mysql mysql 1074107316 Aug 24 13:36 mysql-bin.000023
-rw-r----- 1 mysql mysql 1074093810 Aug 24 13:48 mysql-bin.000024
-rw-r----- 1 mysql mysql 1073843110 Aug 24 14:04 mysql-bin.000025
-rw-r----- 1 mysql mysql 1075629275 Aug 24 14:14 mysql-bin.000026
-rw-r----- 1 mysql mysql 1073806081 Aug 24 14:28 mysql-bin.000027
-rw-r----- 1 mysql mysql 1073924039 Aug 24 14:40 mysql-bin.000028
-rw-r----- 1 mysql mysql  286247619 Aug 27 13:38 mysql-bin.000029

步骤1携带的信息与异步一样,可以参考上面异步复制步骤1的内容

Group Replication

MGR没有使用异步复制的Binlog Event传输机制,也不使用MySQL的服务端口来进行通信。MGR创建了一个独立的TCP端口来进行通信,各个MySQL服务器上的Group Replication插件通过这个端口连接在一起,两两之间可以直接通信。

下面我们再看看MGR的复制内容

tcpdump抓取的端口和主从不同,主从抓取的端口是master host和master port对应的IP和port,而MGR是复制用的ip和port是loose-group_replication_local_address = 'master:33061'所指定

tcpdump -i any -s 0 'port 33061 and host 192.168.239.57' -w ./8.0mgr.cap

在不进行事务操作时,可以看到mgr内部的通信,主库57发送信息给两个只读从节点58和59,同样58和59会回复ACK内容

第二个完整的TCP流

通过TCP Stream可以看到57给58发送的内容包含CGR、CGS、CGU信息

58给57回复CGR、CGS、CGT、CGU、CGV、CGW等信息,如下

至于MGR Paxos内部通信具体这些信息具体代表什么含义,实则较为复杂,笔者目前尚不能做出明确的分析和答案

如上是我通过tcpdump观测传统异步复制、半同步复制、MGR之间的区别

更多文章欢迎关注本人公众号,搜dbachongzi或扫二维码

作者:姚崇 Oracle OCM、MySQL OCP、Oceanbase OBCA、PingCAP PCTA认证,擅长基于Oracle、MySQL Performance Turning及多种关系型 NoSQL数据库

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
MySQL Case-使用Wireshark窥探异步复制、半同步、组复制
我们知道异步复制、5.6版本半同步和MySQL 5.7出来的增强半同步,还有MGR在主从复制的过程中流程是不同的,那么我们能不能通过tcpdump或wiresh...
<<上一篇
下一篇>>