MySQL:新的MGR MySQL协议报错BUG

问题

这个问题,在线上环境偶尔遇到如下错误,甚至偶尔连主节点的bootstrap都不行,报错大概就是如下,

2024-05-22T11:53:07.919600+08:00 0 [ERROR] [MY-013780] [Repl] Plugin group_replication reported: 'Failed to establish MySQL client connection in Group Replication. Error establishing connection. Please refer to the manual to make sure that you configured Group Replication properly to work with MySQL Protocol connections.'
2024-05-22T11:53:07.919780+08:00 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The group communication engine failed to test connectivity to the local group communication engine on 192.168.1.86:3320. This may be due to one or more invalid configuration settings. Double-check your group replication 
local address, firewall, SE Linux and TLS configurations and try restarting Group Replication on this server.'

这个报错其实不太明显,我们检查所有的防火墙,SE Linux 和 SSL配置等都没有问题。而我自己模拟的时候,只能关闭掉数据库的SSL支持,然后MGR 使用SSL连接,这个肯定报错,如下,

first,skip ssl ,add tls_version='' in my.cnf to disable ssl .

| have_openssl                                      | DISABLED        |
| have_ssl                                          | DISABLED        |

use mysql 

| group_replication_recovery_use_ssl                  | ON       |
| group_replication_ssl_mode                          | REQUIRED |
| group_replication_communication_stack               | MYSQL                                |
| group_replication_group_seeds                       | 192.168.1.84:3320,192.168.1.85:3320  |
| group_replication_local_address                     | 192.168.1.86:3320                    |

boot first node
set global group_replication_bootstrap_group=on;
start group_replication;

这样就会有类似的报错,但是报错视乎不太明显,当我们使用xcom协议的时候,报错变得很清晰,

2024-05-23T21:30:06.935157+08:00 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] TLS version is invalid: '
2024-05-23T21:30:06.935239+08:00 0 [Note] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error initializing SSL'
2024-05-23T21:30:06.935355+08:00 9 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error starting SSL in the group communication engine.'
2024-05-23T21:30:06.956616+08:00 9 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error initializing the group communication engine.'
2024-05-23T21:30:06.977953+08:00 9 [ERROR] [MY-011674] [Repl] Plugin group_replication reported: 'Unable to initialize the group communication engine'
2024-05-23T21:30:06.977998+08:00 9 [ERROR] [MY-011637] [Repl] Plugin group_replication reported: 'Error on group communication engine initialization'
2024-05-23T21:30:06.978025+08:00 9 [Note] [MY-011649] [Repl] Plugin group_replication reported: 'Requesting to leave the group despite of not being a member'

相关原理

实际上MGR在传递消息给底层XCOM的时候,首先会通过mysql的gcs层将消息打包好,然后传送给本地的XCOM,因为是本地传输,因此消息只需要放入队列就好了,然后通过pipe传递一个消息,然后XCOM收到这些消息后会走paxos协议传递到远端的各个节点,这个地方是需要走网络socket的,而scoket到底走不走ssl协议则是参数group_replication_ssl_mode和group_replication_recovery_use_ssl控制的,如果我们不想MGR连接使用SSL协议可以考虑设置这两个参数为,

  • set persist group_replication_recovery_use_ssl=off;
  • set persist group_replication_ssl_mode=disable;

这是老的方式,叫做XCOM协议。而到了8027,新增了一个参数group_replication_communication_stack(参数默认还是XCOM协议),其可以设置为XCOM何MYSQL,新的MYSQL协议实际上就是在我们上面说的底层XCOM互联的时候使用mysql自己的协议来连接,传输的数据都需要额外封装一层mysql协议,我们可以看看下面的图,发现XCOM的sender_task在连接初始化连接的时候带了mysql的协议,包含了用户名和密码,用的是我们的recovery通道的用户,


image.png

image.png

而到了shell的8031左右,搭建cluster group_replication_communication_stack参数更是会被默认的设置为MYSQL协议,也就是说如果使用cluster在不注意的情况下group_replication_communication_stack已经变成了MYSQL协议,而不是我们传统的XCOM协议,XCOM协议我们已经用了很久了,貌似更稳定一些。

当然MGR在初始化的时候就会进行连接的探测,如果报错提前报错出来,不至于到了XCOM进行连接发送消息的时候才报错,而且会探测所有的本地节点和远端节点,只要不能连接就会报错,大概在这个地方,


image.png

而我们看到XCOM协议报错是比较明显的,而MYSQL协议报错报得不明不白,同时我们考虑使用XCOM协议的时候没有类似问题,因此感觉大概率为封装xcom消息封装MySQL协议后出现的问题。

MySQL协议的握手信息溢出情况

这个问题就是在对上面问题进行debug的时候发现的,大概如下,

Old value = 63487
New value = 18446744072098936831
csm_parse_handshake (ctx=0x7fff027f2ff0) at /pxc/mysql-8.0.36/sql-common/client.cc:6858

code,
 mysql->server_capabilities |= uint2korr((uchar *)end + 5) << 16;

这里有一个明显的溢出,这里就是进行MySQL协议握手的时候客户端接收到服务端的握手信息后解包得到服务端的信息的时候,其中包含了服务端是否支持SSL连接。

如何解决

这个问题我们可以考虑切换为老的XCOM协议看看是否问题还存在,如下

set persist group_replication_communication_stack='xcom';
set persist group_replication_group_seeds='192.168.1.85:33201,192.168.1.84:33201,192.168.1.86:33201';
set persist group_replication_local_address='192.168.1.86:33201';

同时搭建cluster的时候可以指定一下使用XCOM协议。

BUG

最后将一些信息提交给了官方如下,
https://bugs.mysql.com/bug.php?id=115087&thanks=4

当然如果有能稳定重现的方式,也可以告知一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容