MGR性能初探

1. MGR背景

MySQL Group Replication 是MySQL官方提供的強(qiáng)一致性存儲(chǔ)方案,可以很方便的提供多點(diǎn)寫入,跨機(jī)房等功能。搭建MGR步驟:
MGR搭建

測(cè)試版本: Percona Server 5.7.19

2. 功能測(cè)試

測(cè)試機(jī)器信息

alias hostname ip port
rcdb1 l-rc***db1.uc.cn2 10.****.189 3315
rcdb2 l-rc***db2.uc.cn2 10.****.196 3315
rcdb3 l-rc***db3.uc.cn2 10.****.221 3315
rcdb4 l-rc***db4.uc.cn2 10.****.234 3315
collectdb3 l-collect****db3.dba.cn8 192.****.202 3320

2.1 基本功能測(cè)試

測(cè)試項(xiàng) 結(jié)果 備注
新加入節(jié)點(diǎn)加入組后,數(shù)據(jù)是否一致 ??
group內(nèi)節(jié)點(diǎn)重啟后加入,數(shù)據(jù)是否一致 ??
group內(nèi)節(jié)點(diǎn),直接kill掉,重新加入后數(shù)據(jù)是否一致 ??
清理binlog后,新節(jié)點(diǎn)是否能加入 只要一個(gè)節(jié)點(diǎn)有新增節(jié)點(diǎn)所需的binlog就可以加入組,否則在嘗試 group_replication_recovery_retry_count 次后報(bào)錯(cuò),加入失敗 節(jié)點(diǎn)加入組后無法執(zhí)行 reset master;只能用purge binary logs to 'file';清理binlog

2.2 加入脫離組

2.2.1 已有數(shù)據(jù)節(jié)點(diǎn)加入組
  • 如果新增節(jié)點(diǎn)A落后數(shù)據(jù)很少,可以直接 START GROUP_REPLICATION; 加入組

  • 如果新增節(jié)點(diǎn)A落后數(shù)據(jù)很多,則需要先選擇任意一個(gè)組內(nèi)節(jié)點(diǎn)作為master開啟復(fù)制

CHANGE MASTER TO MASTER_HOST='ip',MASTER_PORT=port,MASTER_USER='replication',MASTER_PASSWORD='***',MASTER_AUTO_POSITION=1;
  • 追上后直接START GROUP_REPLICATION; 加入組(如果直接加入組的話,會(huì)導(dǎo)致組fc)
  • 查看是否成功加入組
SELECT * FROM performance_schema.replication_group_members\G;

查看 MEMBER_STATE 值是否為 ONLINE
2.2.2 通過備份加入組
  • 使用備份數(shù)據(jù)做好數(shù)據(jù)(舊版本innobackupex不支持MySQL 5.7.19 使用的是公司打包的最新版 innobackupex version 2.4.7)
  • 根據(jù)搭建MGR的步驟設(shè)置修改配置文件等(如果是跨機(jī)房需要修改group_replication_ip_whitelist,此參數(shù)默認(rèn)只能同網(wǎng)段節(jié)點(diǎn)加入組,目前多點(diǎn)寫入模式下無法通過備份加入組,但是可以在單主模式加入后,修改為多主)
配置group_replication_ip_whitelist

loose-group_replication_ip_whitelist='192.168.39.0/24,10.90.72.0/24'
  • 根據(jù)xtrabackup_binlog_info 設(shè)置新增節(jié)點(diǎn)A的 gtid_purged (通過備份數(shù)據(jù)啟動(dòng)后的gtid值是落后的)
  • 先選擇任意一個(gè)組內(nèi)節(jié)點(diǎn)作為master開啟復(fù)制
CHANGE MASTER TO MASTER_HOST='ip',MASTER_PORT=port,MASTER_USER='replication',MASTER_PASSWORD='***',MASTER_AUTO_POSITION=1;
  • 追上后直接START GROUP_REPLICATION; 加入組
  • 查看是否成功加入組
SELECT * FROM performance_schema.replication_group_members\G;</pre>

查看MEMBER_STATE 值是否為 ONLINE

2.3 DDL和大事務(wù)操作影響

MGR進(jìn)行alter操作是在主節(jié)點(diǎn)完成后,其他節(jié)點(diǎn)再開始執(zhí)行

2.3.1 DDL對(duì)寫入操作的影響
操作 狀態(tài) 主節(jié)點(diǎn) 其他節(jié)點(diǎn) 備注
alter
主節(jié)點(diǎn)執(zhí)行alter,其他節(jié)點(diǎn)未執(zhí)行 dml可以順利執(zhí)行 可以立刻同步主節(jié)點(diǎn)dml操作 無論是否為alter的表,都可以立刻執(zhí)行,并同步
alter 其他表也可以順利執(zhí)行 主節(jié)點(diǎn)完成后就開始同步 alter一個(gè)表不會(huì)阻塞alter其他表
主節(jié)點(diǎn)完成alter,其他節(jié)點(diǎn)開始執(zhí)行 dml可以順利執(zhí)行 要等到alter操作執(zhí)行完后,才同步dml操作 無論是否為alter的表,都可以立刻執(zhí)行,但要等到完成alter操作后,才會(huì)同步dml
alter 其他表可以順利執(zhí)行 要等當(dāng)前alter執(zhí)行完后,才會(huì)執(zhí)行
2.3.2 DDL中斷的影響
操作 狀態(tài) 主節(jié)點(diǎn) 其他節(jié)點(diǎn) 備注
alter
主節(jié)點(diǎn)執(zhí)行alter,其他節(jié)點(diǎn)未執(zhí)行 不斷對(duì)表進(jìn)行插入操作 可以同步 alter執(zhí)行過程中不影響寫入(不論修改表或者其他表)ctrl+C不會(huì)造成數(shù)據(jù)不一致
主節(jié)點(diǎn)alter進(jìn)行中,重啟主節(jié)點(diǎn) 從讀節(jié)點(diǎn)中選擇一個(gè)作為主節(jié)點(diǎn) 主節(jié)點(diǎn)啟動(dòng)后可以加入group,數(shù)據(jù)一致
主節(jié)點(diǎn)alter進(jìn)行中 讀節(jié)點(diǎn)未執(zhí)行 重啟讀節(jié)點(diǎn) 讀節(jié)點(diǎn)重啟后可以加入組并且數(shù)據(jù)一致
主節(jié)點(diǎn)alter完成, 讀節(jié)點(diǎn)開始執(zhí)行執(zhí)行 重啟讀節(jié)點(diǎn) 讀節(jié)點(diǎn)啟動(dòng)后正常加入組,數(shù)據(jù)一致(這個(gè)是等alter完成后讀節(jié)點(diǎn)才完成關(guān)閉操作)
主節(jié)點(diǎn)alter完成, 讀節(jié)點(diǎn)開始執(zhí)行執(zhí)行 kill讀節(jié)點(diǎn) 重啟后能夠加入group數(shù)據(jù)一致(但是看文檔說可能會(huì)有不一致的情況)

2.3.3 qosc改表

操作 狀態(tài) 主節(jié)點(diǎn) 其他節(jié)點(diǎn) 備注
qosc alter
執(zhí)行改表操作,不斷插入數(shù)據(jù) ctrl+C 無亂是否為修改表,都可以寫入數(shù)據(jù),清理trigger,臨時(shí)表后可以再次qosc改表
讀節(jié)點(diǎn)重啟 加入group后數(shù)據(jù)一致
直接alter其他表 可以正常執(zhí)行并同步
2.3.4 大事務(wù)影響
主節(jié)點(diǎn)session1 主節(jié)點(diǎn)session2 讀節(jié)點(diǎn) 備注
update big_table_1 set val1=1; (報(bào)錯(cuò)超過max_binlog_cache_size) 寫數(shù)據(jù) 對(duì)big_table_1操作被阻塞對(duì)其他表操作順利執(zhí)行,同步
update big_table_1 set val1=100 limit 10000000; (報(bào)錯(cuò)ERROR 3100 (HY000): Error on observer while running replication hook 'before_commit'.) 寫數(shù)據(jù) 鎖不沖突的數(shù)據(jù)都能順利執(zhí)行同步,文檔上說如果傳輸時(shí)間超過5s會(huì)導(dǎo)致失敗
update big_table_1 set val1=100 limit 500000; 與later一樣,分為主節(jié)點(diǎn)執(zhí)行階段,讀節(jié)點(diǎn)執(zhí)行階段: 主節(jié)點(diǎn)執(zhí)行時(shí),只要沒有鎖沖突的dml都可以執(zhí)行并同步讀節(jié)點(diǎn)執(zhí)行階段,因?yàn)橐WC事務(wù)順序一致,此時(shí)主節(jié)點(diǎn)的dml要等完成大事務(wù)后才會(huì)同步

3. 性能測(cè)試

復(fù)制線程為16

buffer_pool 為16G

機(jī)器為SSD

3.1 單點(diǎn)寫入模式

image.png
image.png

3.2 多點(diǎn)寫入

image.png
image.png

3.3 混合讀寫

集群三個(gè)節(jié)點(diǎn)

讀寫為10:4

14個(gè)讀寫操作為一個(gè)事務(wù)

單點(diǎn)寫入

3.3.1 QPS
image.png
image.png
3.3.2 TPS
image.png
image.png

4. 基于MGR的InnoDB Cluster高可用

http://03bff331.wiz03.com/share/s/03L_cN2yvkX52KAoED0dgBk-2q1EdR14rA_02a95kh3ExGXn

5. MGR與PXC性能對(duì)比

MGR與PXC主要參數(shù)

復(fù)制線程為24

5.1 單點(diǎn)寫入對(duì)比

image.png
image.png

5.2 多點(diǎn)寫入

這個(gè)我測(cè)試了很多邊,一直沒想通為啥pxc可以在多點(diǎn)寫入時(shí)性能那么好,感覺都沒受到線程增加影響

mgr隨著線程增加有明顯的下降

image.png
image.png

5.3 混合讀寫

讀寫大概10:4 14個(gè)讀寫操作為一個(gè)事務(wù)

都為三個(gè)節(jié)點(diǎn)

image.png
image.png

綜合上面對(duì)比可以發(fā)現(xiàn),mgr 跟 pxc5.7 整體性能相近,單節(jié)點(diǎn)寫入時(shí)mgr線程數(shù)較多時(shí)性能較佳,多節(jié)點(diǎn)寫入時(shí)pxc5.7在線程數(shù)較多時(shí)性能較佳

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容