GreatSQL特性 | 深入淺出MGR
本文介紹GreatSQL的一些關(guān)鍵新特性,相關(guān)特性主要針對GreatSQL 8.0.x版本(不含GreatSQL 5.7.x版本中的相關(guān)特性)。
1. 地理標(biāo)簽
可以對每個節(jié)點設(shè)置地理標(biāo)簽,主要用于解決多機(jī)房數(shù)據(jù)同步的問題。
新增選項 group_replication_zone_id,用于標(biāo)記節(jié)點地理標(biāo)簽。該選項值支持范圍 0 ~ 8,默認(rèn)值為0。
當(dāng)集群中各節(jié)點該選項值設(shè)置為不同的時候,就被認(rèn)定為設(shè)置了不同的地理標(biāo)簽。
在同城多機(jī)房部署方案中,同一個機(jī)房的節(jié)點可以設(shè)置相同的數(shù)值,另一個機(jī)房里的節(jié)點設(shè)置另一個不同的數(shù)值,這樣在事務(wù)提交時會要求每組 group_replication_zone_id 中至少 有個節(jié)點確認(rèn)事務(wù),然后才能繼續(xù)處理下一個事務(wù)。這就可以確保每個機(jī)房的某個節(jié)點里,總有最新的事務(wù)。
System Variable Name | group_replication_zone_id |
Variable Scope | global |
Dynamic Variable | YES |
Permitted Values | [0 ~ 8] |
Default | 0 |
Description | 設(shè)置MGR各節(jié)點不同的地理標(biāo)簽,主要用于解決多機(jī)房數(shù)據(jù)同步的問題。 修改完該選項值之后,要重啟MGR線程才能生效。 |
引入版本 | 8.0.25-15 |
2. 仲裁節(jié)點
該節(jié)點僅參與MGR投票仲裁,不存放實際數(shù)據(jù),也無需執(zhí)行DML操作,因此可以用一般配置級別的服務(wù)器,在保證MGR可靠性的同時還能降低服務(wù)器成本。
新增參數(shù)group_replication_arbitrator用于設(shè)置仲裁節(jié)點。
若想新增一個仲裁節(jié)點,只需在 my.cnf 配置文件中添加如下配置:group_replication_arbitrator = true
當(dāng)集群中只剩下 Arbitrator 節(jié)點時,則會自動退出。
注意:
在有仲裁節(jié)點的情況下,將單主切換成多主模式時,需要把投票節(jié)點先關(guān)閉再機(jī)型切換,否則可能會導(dǎo)致切換失敗,并且仲裁節(jié)點報錯退出MGR。
即便是在關(guān)閉MGR服務(wù)狀態(tài)下,仲裁節(jié)點中也無法執(zhí)任何有數(shù)據(jù)變更的操作。
System Variable Name | group_replication_arbitrator |
Variable Scope | global |
Dynamic Variable | NO |
Permitted Values | 0 |
Default | 0 |
Description | 設(shè)置本節(jié)點是否為仲裁節(jié)點。實例啟動前先設(shè)置好,不可動態(tài)修改 |
引入版本 | 8.0.25-16 |
3. 快速單注
GreatSQL中增加一個新的工作模式:單主快速模式,在這個模式下,不再采用MySQL MGR原有的認(rèn)證數(shù)據(jù)庫方式。新增選項 group_replication_single_primary_fast_mode 用于 設(shè)置是否啟用,以及具體采用哪種模式。
快速單主模式特別適合在跨機(jī)房部署,壓力測試以及內(nèi)存要求不高等多種場景。這種模式弱于傳統(tǒng)的異步復(fù)制,但強于半同步復(fù)制,且沒有MGR默認(rèn)的認(rèn)證數(shù)據(jù)庫可能消耗較大內(nèi)存的問 題。
提醒,啟用快速單主模式時,不支持采用多主模式;所有節(jié)點都得設(shè)置必須相同,否則無法啟動。
選項 group_replication_single_primary_fast_mode 可選值有:0、1、2,不同值分別表示如下:
- 0,表示不采取快速單主模式,這是默認(rèn)值。
- 1,表示采用快速單主模式,支持并并回放。**強烈建議設(shè)置為1,即啟用快速單主模式。**- 2,表示采用快速單主模式,但不支持并行回放,加速relay log落盤,且讓從庫消耗更少的資源。
System Variable Name | group_replication_single_primary_fast_mode |
Variable Scope | Global |
Dynamic Variable | NO |
Permitted Values | 0 1 2 |
Default | 0 |
Description | 設(shè)置是否啟用快速單主模式,強烈建議啟用(即設(shè)置為1)。 |
引入版本 | 8.0.25-16 |
4. 自定義選主策略
完善自動選主機(jī)制,增加基于最新GTID判斷來選主,避免自動選擇沒有最新GTID的節(jié)點作為新主。
默認(rèn)地,MGR根據(jù)以下規(guī)則選主:
- 當(dāng)有MySQL 5.7和MySQL 8.0不同版本的節(jié)點混合部署時,只會選擇運行5.7的節(jié)點作為主節(jié)點。此外,在 <= MySQL 8.0.16 版本時,以主版本號進(jìn)行排序,也就是說 5.7 排在 8.0 前面。在 > MySQL 8.0.17版本中,則是以補丁版本號排序,也就是 8.0.17 排在 8.0.25 前面。
- 當(dāng)所有節(jié)點版本號一致時,則根據(jù)節(jié)點權(quán)重值(選項 group_replication_member_weight 定義權(quán)重值,這個選項5.7版本沒有,8.0開始新增)排序,權(quán)重值高的節(jié)點排在前面。
- 根據(jù)節(jié)點 server_uuid 排序。
在一些情況下,在MGR所有節(jié)點都發(fā)生意外要重新拉起時,不會檢查各節(jié)點事務(wù)應(yīng)用狀態(tài),而錯誤選擇新的主節(jié)點,這時可能會導(dǎo)致丟失一些事務(wù)數(shù)據(jù)。或者當(dāng)原來的主節(jié)點crash需要 重新投票選擇新的主節(jié)點時,可能也會選擇一個權(quán)重值較高,但沒有最新事務(wù)的節(jié)點,也會存在丟失一部分事務(wù)數(shù)據(jù)的風(fēng)險。
在GreatSQL中,新增選項 group_replication_primary_election_mode 用于自定義選主策略,可選值有以下幾個:
- WEIGHT_ONLY,還是按照上述傳統(tǒng)模式自動選主,這是默認(rèn)值。
- GTID_FIRST,優(yōu)先判斷各節(jié)點事務(wù)應(yīng)用狀態(tài),自動選擇擁有最新事務(wù)的節(jié)點作為新的主節(jié)點。推薦設(shè)置為該模式。
- WEIGHT_FIRST,傳統(tǒng)模式優(yōu)先,如果沒有合適的結(jié)果再判斷各節(jié)點事務(wù)狀態(tài)。
提醒,所有節(jié)點都的設(shè)置必須相同,否則無法啟動。
System Variable Name | group_replication_primary_election_mode |
Variable Scope | Global |
Dynamic Variable | NO |
Permitted Values | WEIGHT_ONLY GTID_FIRST WEIGHT_FIRST |
Default | WEIGHT_ONLY |
Description | 當(dāng)MGR集群需要投票選主時,采用何種投票策略。 |
引入版本 | 8.0.25-16 |
5. 并行查詢
根據(jù)B+樹的特點,可以將B+樹劃分為若干子樹,此時多個線程可以并行掃描同一張InnoDB表的不同部分。對執(zhí)行計劃進(jìn)行多線程改造,每個子線程執(zhí)行計劃與MySQL原始執(zhí)行計劃一致, 但每個子線程只需掃描表的部分?jǐn)?shù)據(jù),子線程掃描完成后再進(jìn)行結(jié)果匯總。通過多線程改造,可以充分利用多核資源,提升查詢性能。
優(yōu)化后,在TPC-H測試中表現(xiàn)優(yōu)異,最高可提升30倍,平均提升15倍。該特性適用于周期性數(shù)據(jù)匯總報表之類的SAP、財務(wù)統(tǒng)計等業(yè)務(wù)。
使用限制:
暫不支持子查詢,可想辦法改造成JOIN。
暫時只支持ARM架構(gòu)平臺,X86架構(gòu)平臺優(yōu)化也會盡快完成。
System Variable Name | force_parallel_execute |
Variable Scope | Global |
Dynamic Variable | YES |
Permitted Values | ON |
Default | OFF |
Description | 是否啟用InnoDB并行查詢特性 |
引入版本 | 8.0.25-15 |
更多關(guān)于InnoDB并行查詢相關(guān)選項參考文檔 InnoDB并行查詢優(yōu)化參考(https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/innodb-parallel-execute.md)。
6. GreatSQL VS MySQL社區(qū)版
特性 | GreatSQL 8.0.25-16 | MySQL 8.0.25 社區(qū)版 |
投票節(jié)點/仲裁節(jié)點 | ? | ? |
快速單主模式 | ? | ? |
地理標(biāo)簽 | ? | ? |
全新流控算法 | ? | ? |
InnoDB并行查詢優(yōu)化 | ? | ? |
線程池(Thread Pool) | ? | ? |
審計 | ? | ? |
InnoDB事務(wù)鎖優(yōu)化 | ? | ? |
SEQUENCE_TABLE(N)函數(shù) | ? | ? |
InnoDB表損壞異常處理 | ? | ? |
強制只能使用InnoDB引擎表 | ? | ? |
殺掉空閑事務(wù),避免長時間鎖等待 | ? | ? |
Data Masking(數(shù)據(jù)脫敏/打碼) | ? | ? |
InnoDB碎片頁統(tǒng)計增強 | ? | ? |
支持MyRocks引擎 | ? | ? |
InnoDB I/O性能提升 | ?????????? | ???? |
網(wǎng)絡(luò)分區(qū)異常應(yīng)對 | ?????????? | ?? |
完善節(jié)點異常退出處理 | ?????????? | ?? |
一致性讀性能 | ?????????? | ?? |
提升MGR吞吐量 | ?????????? | ?? |
統(tǒng)計信息增強 | ?????????? | ?? |
slow log增強 | ?????????? | ?? |
大事務(wù)處理 | ???????? | ?? |
修復(fù)多寫模式下可能丟數(shù)據(jù)風(fēng)險 | ?????????? | / |
修復(fù)單主模式下切主丟數(shù)據(jù)風(fēng)險 | ?????????? | / |
MGR集群啟動效率提升 | ?????????? | / |
集群節(jié)點磁盤滿處理 | ?????????? | / |
修復(fù)TCP self-connect問題 | ?????????? | / |
PROCESSLIST增強 | ?????????? | / |