MySQL:新的MGR MySQL協(xié)議報(bào)錯(cuò)BUG

問題

這個(gè)問題潮尝,在線上環(huán)境偶爾遇到如下錯(cuò)誤榕吼,甚至偶爾連主節(jié)點(diǎn)的bootstrap都不行,報(bào)錯(cuò)大概就是如下勉失,

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.'

這個(gè)報(bào)錯(cuò)其實(shí)不太明顯友题,我們檢查所有的防火墻,SE Linux 和 SSL配置等都沒有問題戴质。而我自己模擬的時(shí)候度宦,只能關(guān)閉掉數(shù)據(jù)庫的SSL支持,然后MGR 使用SSL連接告匠,這個(gè)肯定報(bào)錯(cuò)戈抄,如下,

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;

這樣就會(huì)有類似的報(bào)錯(cuò)后专,但是報(bào)錯(cuò)視乎不太明顯划鸽,當(dāng)我們使用xcom協(xié)議的時(shí)候,報(bào)錯(cuò)變得很清晰戚哎,

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'

相關(guān)原理

實(shí)際上MGR在傳遞消息給底層XCOM的時(shí)候裸诽,首先會(huì)通過mysql的gcs層將消息打包好,然后傳送給本地的XCOM型凳,因?yàn)槭潜镜貍鬏斦啥虼讼⒅恍枰湃腙?duì)列就好了,然后通過pipe傳遞一個(gè)消息甘畅,然后XCOM收到這些消息后會(huì)走paxos協(xié)議傳遞到遠(yuǎn)端的各個(gè)節(jié)點(diǎn)埂蕊,這個(gè)地方是需要走網(wǎng)絡(luò)socket的往弓,而scoket到底走不走ssl協(xié)議則是參數(shù)group_replication_ssl_mode和group_replication_recovery_use_ssl控制的,如果我們不想MGR連接使用SSL協(xié)議可以考慮設(shè)置這兩個(gè)參數(shù)為蓄氧,

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

這是老的方式函似,叫做XCOM協(xié)議。而到了8027喉童,新增了一個(gè)參數(shù)group_replication_communication_stack(參數(shù)默認(rèn)還是XCOM協(xié)議)撇寞,其可以設(shè)置為XCOM何MYSQL,新的MYSQL協(xié)議實(shí)際上就是在我們上面說的底層XCOM互聯(lián)的時(shí)候使用mysql自己的協(xié)議來連接堂氯,傳輸?shù)臄?shù)據(jù)都需要額外封裝一層mysql協(xié)議蔑担,我們可以看看下面的圖,發(fā)現(xiàn)XCOM的sender_task在連接初始化連接的時(shí)候帶了mysql的協(xié)議祖灰,包含了用戶名和密碼钟沛,用的是我們的recovery通道的用戶,


image.png

image.png

而到了shell的8031左右局扶,搭建cluster group_replication_communication_stack參數(shù)更是會(huì)被默認(rèn)的設(shè)置為MYSQL協(xié)議恨统,也就是說如果使用cluster在不注意的情況下group_replication_communication_stack已經(jīng)變成了MYSQL協(xié)議,而不是我們傳統(tǒng)的XCOM協(xié)議三妈,XCOM協(xié)議我們已經(jīng)用了很久了畜埋,貌似更穩(wěn)定一些。

當(dāng)然MGR在初始化的時(shí)候就會(huì)進(jìn)行連接的探測畴蒲,如果報(bào)錯(cuò)提前報(bào)錯(cuò)出來悠鞍,不至于到了XCOM進(jìn)行連接發(fā)送消息的時(shí)候才報(bào)錯(cuò),而且會(huì)探測所有的本地節(jié)點(diǎn)和遠(yuǎn)端節(jié)點(diǎn)模燥,只要不能連接就會(huì)報(bào)錯(cuò)咖祭,大概在這個(gè)地方,


image.png

而我們看到XCOM協(xié)議報(bào)錯(cuò)是比較明顯的蔫骂,而MYSQL協(xié)議報(bào)錯(cuò)報(bào)得不明不白么翰,同時(shí)我們考慮使用XCOM協(xié)議的時(shí)候沒有類似問題,因此感覺大概率為封裝xcom消息封裝MySQL協(xié)議后出現(xiàn)的問題辽旋。

MySQL協(xié)議的握手信息溢出情況

這個(gè)問題就是在對(duì)上面問題進(jìn)行debug的時(shí)候發(fā)現(xiàn)的浩嫌,大概如下,

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;

這里有一個(gè)明顯的溢出补胚,這里就是進(jìn)行MySQL協(xié)議握手的時(shí)候客戶端接收到服務(wù)端的握手信息后解包得到服務(wù)端的信息的時(shí)候码耐,其中包含了服務(wù)端是否支持SSL連接。

如何解決

這個(gè)問題我們可以考慮切換為老的XCOM協(xié)議看看是否問題還存在溶其,如下

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';

同時(shí)搭建cluster的時(shí)候可以指定一下使用XCOM協(xié)議骚腥。

BUG

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

當(dāng)然如果有能穩(wěn)定重現(xiàn)的方式握联,也可以告知一下桦沉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末每瞒,一起剝皮案震驚了整個(gè)濱河市金闽,隨后出現(xiàn)的幾起案子纯露,更是在濱河造成了極大的恐慌,老刑警劉巖代芜,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埠褪,死亡現(xiàn)場離奇詭異,居然都是意外死亡挤庇,警方通過查閱死者的電腦和手機(jī)钞速,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫡秕,“玉大人渴语,你說我怎么就攤上這事±パ剩” “怎么了驾凶?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掷酗。 經(jīng)常有香客問我调违,道長,這世上最難降的妖魔是什么泻轰? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任技肩,我火速辦了婚禮,結(jié)果婚禮上浮声,老公的妹妹穿的比我還像新娘虚婿。我一直安慰自己,他們只是感情好泳挥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布然痊。 她就那樣靜靜地躺著,像睡著了一般羡洁。 火紅的嫁衣襯著肌膚如雪玷过。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天筑煮,我揣著相機(jī)與錄音辛蚊,去河邊找鬼。 笑死真仲,一個(gè)胖子當(dāng)著我的面吹牛袋马,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秸应,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虑凛,長吁一口氣:“原來是場噩夢啊……” “哼碑宴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桑谍,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤延柠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锣披,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贞间,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年雹仿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了增热。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胧辽,死狀恐怖峻仇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邑商,我是刑警寧澤摄咆,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站奠骄,受9級(jí)特大地震影響豆同,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜含鳞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一影锈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝉绷,春花似錦鸭廷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桅狠,卻和暖如春讼载,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背中跌。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工咨堤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漩符。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓一喘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗜暴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凸克,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容