這篇文章總結(jié)了之前對(duì)Galera replication的調(diào)研,內(nèi)容包括Galera特性,原理,Galera cluster配置,參數(shù)及性能等
Galera replication是什么
MySQL DBA及開發(fā)應(yīng)該都知道MySQL源生復(fù)制及semi-sync半同步復(fù)制,它們都基于MySQL binlog,原生復(fù)制是完全異步的,master不需要保證slave接收并執(zhí)行了binlog,能夠保證master最大性能,但是slave可能存在延遲,主備數(shù)據(jù)無(wú)法保證一致性,在不停服務(wù)的前提下如果master宕機(jī)讓slave頂上,就會(huì)丟失數(shù)據(jù),semi-sync在異步復(fù)制基礎(chǔ)上增加了數(shù)據(jù)保護(hù)的考慮,master必須確認(rèn)slave收到binlog后(但不保證slave執(zhí)行了事務(wù))才能最終提交事務(wù),在沒有退化(延遲較大時(shí)可能發(fā)生)成異步復(fù)制之前可以保證數(shù)據(jù)安全,此時(shí)master掛掉之后,slave可以在apply完所有relay log后切換成master提供讀寫服務(wù)
Galera replication是 codership
提供的MySQL同步復(fù)制方案,它將多個(gè)MySQL節(jié)點(diǎn)組織成一個(gè)cluster并提供一下特性:
1. 同步復(fù)制,主備無(wú)延遲
2. 支持多主同時(shí)讀寫,保證數(shù)據(jù)一致性
3. 集群中各節(jié)點(diǎn)保存全量數(shù)據(jù)
4. 節(jié)點(diǎn)添加/刪除,自動(dòng)檢測(cè)和配置
5. 行級(jí)別并行復(fù)制
6. 不需要寫binlog
相對(duì)于MySQL源生復(fù)制和semi-sync,Galera replication比較有吸引力的特性:
1. 同步復(fù)制,主備無(wú)延遲,master宕機(jī)后slave可以 立即
頂上并提供服務(wù)(semi-sync需要apply完所有relay log)
2. 事務(wù)沖突檢測(cè)保證數(shù)據(jù)一致性,多個(gè)節(jié)點(diǎn)可以同時(shí)讀寫數(shù)據(jù),可以極大簡(jiǎn)化數(shù)據(jù)訪問
目前可用的產(chǎn)品: MariaDB Galera Cluster
和 Percona XtraDB Cluster
Galera replication原理
Galera replication是一種Certification based replication,保證one-copy serializability,理論基于這兩篇論文
Don’t be lazy, be consistent 和 Database State Machine Approach
算法示意圖(來自上面兩篇論文)
算法偽代碼
事務(wù)執(zhí)行協(xié)議
遵守deferred update replication,事務(wù)在commit時(shí)才復(fù)制到其他節(jié)點(diǎn),執(zhí)行過程分為4個(gè)階段:
1.Local read phase
a) 本地(client連接到的節(jié)點(diǎn))執(zhí)行事務(wù)Ti,但不真正提交,真正提交之前進(jìn)入Send phase
2.Send phase
a) 若事務(wù)只讀,直接提交,結(jié)束(多版本,只讀事務(wù)不加鎖)
b) 將事務(wù)的寫操作封裝成WS(Write Set,基于行),廣播到所有節(jié)點(diǎn)(包括自身)
3.Lock / Certificaion phase
a) 對(duì)收到的WS中的每個(gè)WSi(X)
i. 若X沒有被加鎖,對(duì)X加鎖
ii. 若X已被Tj加鎖且Tj處于Local read phase/Send phase,回滾Tj,對(duì)X加鎖
iii. Certification based conflict detect
4.Write phase
a) 若檢測(cè)出沖突,回滾Ti
b) 否則,執(zhí)行WS,提交事務(wù)后釋放鎖資源
c) 對(duì)于源節(jié)點(diǎn),提交事務(wù)并向client返回結(jié)果
|
客戶端/Galera節(jié)點(diǎn)信息交互圖
Galera replication采取的是樂觀策略,即事務(wù)在一個(gè)節(jié)點(diǎn)提交時(shí),被認(rèn)為與其他節(jié)點(diǎn)上的事務(wù)沒有沖突,首先在本地“執(zhí)行”(之所以帶引號(hào),是因?yàn)槭聞?wù)沒有執(zhí)行完)后再發(fā)送到所有節(jié)點(diǎn)做沖突檢測(cè),存在兩種情況下需要回滾事務(wù):
1. WS復(fù)制到其它節(jié)點(diǎn),被加到每個(gè)節(jié)點(diǎn)的slave trx queue中,與queue中前面的trxs在做certification test時(shí)發(fā)現(xiàn)沖突
2. WS通過了certification test后被保證一定會(huì)執(zhí)行,在它執(zhí)行過程中,如果該節(jié)點(diǎn)上有與其沖突的local trxs(Local phase),回滾local trxs
Galera提供了兩個(gè)狀態(tài)參數(shù)記錄沖突:
1. wsrep_local_cert_failures:certification test中未通過的trx數(shù)目
2. wsrep_local_bf_aborts:apply trxs(已經(jīng)通過certification test)時(shí),回滾的local trxs(open but not commit)數(shù)目
因此事務(wù)在commit節(jié)點(diǎn)廣播后, 節(jié)點(diǎn)之間不交換“是否沖突”的信息,各個(gè)節(jié)點(diǎn)獨(dú)立異步的處理該事務(wù)
,certification based replication協(xié)議保證:
1. 事務(wù)在所有節(jié)點(diǎn)上要么都commit,要么都rollback/abort
2. 事務(wù)在所有節(jié)點(diǎn)的執(zhí)行順序一致
certification based replication所依賴的基礎(chǔ)技術(shù):
Group Communication System
1) Atomic delivery (事務(wù)傳輸要么成功傳給了所有節(jié)點(diǎn),要么都失敗)
2) Total order (事務(wù)在所有節(jié)點(diǎn)中的順序一致)
3) Group maintenance (每個(gè)節(jié)點(diǎn)知道所有節(jié)點(diǎn)的狀態(tài))
傳統(tǒng)的2PC(兩階段提交)做法
1. 2PC 事務(wù)結(jié)束時(shí),所有節(jié)點(diǎn)數(shù)據(jù)達(dá)到一致
2. 協(xié)調(diào)者與參與者之間通信,參與者之間無(wú)連接
3. 受網(wǎng)絡(luò)狀態(tài)影響較大
4. 兩次通信,需要得到每個(gè)參與者的反饋后才能決定是否提交事務(wù)
因此Galera replicateion相對(duì)于2PC減少了網(wǎng)絡(luò)傳輸次數(shù),消除了等待節(jié)點(diǎn)返回“決定是否沖突”的時(shí)間,從而可以提高了性能
Galera replication原理總結(jié)
1. 事務(wù)在本地節(jié)點(diǎn)執(zhí)行時(shí)采取樂觀策略,成功廣播到所有節(jié)點(diǎn)后再做沖突檢測(cè)
2. 檢測(cè)出沖突時(shí),本地事務(wù)優(yōu)先被回滾
3. 每個(gè)節(jié)點(diǎn)獨(dú)立、異步執(zhí)行隊(duì)列中的WS
4. 事務(wù)T在A節(jié)點(diǎn)執(zhí)行成功返回客戶端后,其他節(jié)點(diǎn)保證T一定會(huì)被執(zhí)行,因此有可能存在延遲,即虛擬同步
Galera flow control
galera是同步復(fù)制(虛擬同步)方案,事務(wù)在本地節(jié)點(diǎn)(客戶端提交事務(wù)的節(jié)點(diǎn))上提交成功時(shí),其它節(jié)點(diǎn)保證執(zhí)行該事務(wù)。在提交事務(wù)時(shí),本地節(jié)點(diǎn)把事務(wù)復(fù)制到所有節(jié)點(diǎn)后,之后各個(gè)節(jié)點(diǎn)獨(dú)立異步地進(jìn)行certification test、事務(wù)插入待執(zhí)行隊(duì)列、執(zhí)行事務(wù)。然而由于不同節(jié)點(diǎn)之間執(zhí)行事務(wù)的速度不一樣,長(zhǎng)時(shí)間運(yùn)行后,慢節(jié)點(diǎn)的待執(zhí)行隊(duì)列可能會(huì)越積越長(zhǎng),最終可能導(dǎo)致事務(wù)丟失。
galera內(nèi)部實(shí)現(xiàn)了flow control,作用就是協(xié)調(diào)各個(gè)節(jié)點(diǎn),保證所有節(jié)點(diǎn)執(zhí)行事務(wù)的速度大于隊(duì)列增長(zhǎng)速度,從而避免丟失事務(wù)。實(shí)現(xiàn)原理和簡(jiǎn)單:整個(gè)galera cluster中,同時(shí)只有一個(gè)節(jié)點(diǎn)可以廣播消息(數(shù)據(jù)),每個(gè)節(jié)點(diǎn)都會(huì)獲得廣播消息的機(jī)會(huì)(獲得機(jī)會(huì)后也可以不廣播),當(dāng)慢節(jié)點(diǎn)的待執(zhí)行隊(duì)列超過一定長(zhǎng)度后,它會(huì)廣播一個(gè)FC_PAUSE消息,所以節(jié)點(diǎn)收到消息后都會(huì)暫緩廣播消息,直到該慢節(jié)點(diǎn)的待執(zhí)行隊(duì)列長(zhǎng)度減小到一定長(zhǎng)度后,galera cluster數(shù)據(jù)同步又開始恢復(fù)
flow control相關(guān)參數(shù):
gcs.fc_limit:待執(zhí)行隊(duì)列長(zhǎng)度超過該值時(shí),flow control被觸發(fā),對(duì)于Master-Slave模式(只在一個(gè)節(jié)點(diǎn)寫)的galera cluster,可以配置一個(gè)較大的值,對(duì)啟動(dòng)多寫的galera cluster,較小的值比較合適,因?yàn)檩^大待執(zhí)行隊(duì)列長(zhǎng)度意味著更大的沖突,默認(rèn)值16
gcs.fc_factor:當(dāng)待執(zhí)行隊(duì)列長(zhǎng)度開始小于(gcs.fc_factor*gcs.fc_limit)時(shí),數(shù)據(jù)同步恢復(fù),默認(rèn)0.5
gcs.fc_master_slave:galera cluster是否為Master-Slave模式,默認(rèn)
安裝MariaDB Galera Cluster
安裝準(zhǔn)備:
1. MariaDB Galera Cluster 5.5.28a RC
1) https://downloads./mariadb-galera/5.5.28a/
2) patched MariaDB 5.5.28,代碼中增加了Galera Library API(wsrep API),并在事務(wù)、鎖、handler等模塊添加/修改了調(diào)用邏輯
2. Galera wsrep provider
1) https:///galera/+download
2) Galera Library的實(shí)現(xiàn),其中實(shí)現(xiàn)了group communication system, certification
編譯安裝
1. MariaDB Galera Cluster 5.5.28a RC
1) 與MariaDB基本相同,cmake時(shí)增加兩項(xiàng):-DWITH_WSREP=ON , -DWITH_INNODB_DISALLOW_WRITES=1.
2. Galera wsrep provider: 源碼編譯后得到libgalera_smm.so(需要用到scons)
參數(shù)配置(每個(gè)節(jié)點(diǎn))
wsrep_provider = /path/to/libgalera_smm.so
wsrep_cluster_address = cluster connection URL(后面詳細(xì)介紹)
binlog_format = ROW
default_storage_engine = INNODB
innodb_autoinc_lock_mode = 2
innodb_locks_unsafe_for_binlog = 1
選配:(可以提高性能,galera保證不丟數(shù)據(jù))
innodb_flush_log_at_trx_commit = 2
構(gòu)建集群(三個(gè)節(jié)點(diǎn))
3-node-cluster
節(jié)點(diǎn)名稱 |
ip地址 |
galera_node1 |
10.0.0.11 |
galera_node2 |
10.0.0.22 |
galera_node3 |
10.0.0.33 |
新建Galera Cluster
以galera_node1作為第一個(gè)節(jié)點(diǎn)新建集群,在my.cnf中配置參數(shù):
wsrep_cluster_address = gcomm://
wsrep_cluster_name = galera_cluster
wsrep_node_address = 10.0.0.11
wsrep_node_name = galera_node1
wsrep_sst_method = rsync
|
添加galera_node2節(jié)點(diǎn)
在my.cnf中配置wsrep_cluster_address為node1的ip或者h(yuǎn)ostname
wsrep_cluster_address = gcomm://10.0.0.11
wsrep_cluster_name = galera_cluster
wsrep_node_address = 10.0.0.22
wsrep_node_name = galera_node2
wsrep_sst_method = rsync
|
添加galera_node3節(jié)點(diǎn)
在my.cnf中配置wsrep_cluster_address為node1的ip或者h(yuǎn)ostname
wsrep_cluster_address = gcomm://10.0.0.11
wsrep_cluster_name = galera_cluster
wsrep_node_address = 10.0.0.33
wsrep_node_name = galera_node3
wsrep_sst_method = rsync
|
多實(shí)例配置
因?yàn)闇y(cè)試機(jī)器資源有限,需要在同一臺(tái)機(jī)器上啟動(dòng)多個(gè)mysqld實(shí)例,為每個(gè)mysqld配置兩個(gè)端口號(hào)(一個(gè)是mysql server端口號(hào),默認(rèn)3306;另外一個(gè)是wsrep端口號(hào),默認(rèn)4567),并修改部分wsrep配置參數(shù),例如:
galera-cluster
節(jié)點(diǎn)名稱 |
ip地址 |
server port |
wsrep port |
wsrep配置 |
galera_node1 |
127.0.0.1 |
3306 |
4405 |
wsrep_cluster_address=gcomm:// wsrep_node_address=127.0.0.1:4405 port=3306 |
galera_node2 |
127.0.0.1 |
3307 |
4407 |
wsrep_cluster_address=gcomm://127.0.0.1:4405 wsrep_node_address=127.0.0.1:4407 port=3307 |
galera_node3 |
127.0.0.1 |
308 |
4409 |
wsrep_cluster_addres=gcomm:// 127.0.0.1:4405 wsrep_node_address=127.0.0.1:4409 port=3308 |
啟動(dòng)后在每個(gè)節(jié)點(diǎn)執(zhí)行:
mysql> show status like ‘wsrep%’;
|
當(dāng)看到下述狀態(tài)時(shí):
wsrep_connected=ON
wsrep_ready=ON
wsrep_cluster_status =Primary
wsrep_cluster_size=3(節(jié)點(diǎn)個(gè)數(shù))
|
則galera集群建立成功,如下圖所示:
說明:
1. MariaDB Galera Cluster 5.5.28a RC源碼安裝,在編譯時(shí)若沒有打開-DWITH_WSREP=ON, -DWITH_INNODB_DISALLOW_WRITES=1,或者沒有配置任何wsrep相關(guān)參數(shù),它運(yùn)行時(shí)就是一個(gè)普通的mysqld實(shí)例
2. Galera cluster復(fù)制不依賴于binlog文件,因此mysql-binlog和log-slave-updates都可以不配置,當(dāng)然如果需要記錄binlog,也可以打開
3. 需要以wsrep_cluster_address = gcomm://啟動(dòng)第一個(gè)節(jié)點(diǎn)后,才能相繼添加其他節(jié)點(diǎn)
Galera相關(guān)參數(shù)配置
InnoDB 相關(guān)參數(shù)
galera補(bǔ)丁版的mysql在cmake時(shí)需要指定:
-DWITH_WSREP=ON , -DWITH_INNODB_DISALLOW_WRITES=1
galera 目前只支持Innodb/xtradb/mariad存儲(chǔ)引擎
default_storage_engine = INNODB
為了降低沖突,下列兩項(xiàng)需要設(shè)置
innodb_autoinc_lock_mode = 2
innodb_locks_unsafe_for_binlog = 1(gap不加鎖)
選配:(可以提高性能,galera保證不丟數(shù)據(jù))
innodb_flush_log_at_trx_commit = 2
選配:galera可以不寫binlog,注釋binlog路徑理論上可以提高性能
#log-bin
#log-slave-updates=1
wsrep 相關(guān)參數(shù)
wsrep參數(shù)都是以wsrep_開頭的(30+個(gè)),其中有一個(gè)字符串參數(shù)(wsrep_provider_options)可以配置50+個(gè)更底層的參數(shù)。
可以通過“show variables like wsrep%”查看,wsrep_開頭參數(shù)
詳情:http://www./wiki/doku.php?id=mysql_options_0.8
列舉幾個(gè)重要的參數(shù):
wsrep_auto_increment_control:控制auto_increment_increment=#nodes和auto_increment_offset=#node_id,默認(rèn)ON
wsrep_causal_reads:默認(rèn)是在本地節(jié)點(diǎn)讀,讀到的可能不是最新數(shù)據(jù),開啟后將讀到最新數(shù)據(jù),但會(huì)增加響應(yīng)時(shí)間,默認(rèn)OFF
wsrep_certify_nonPK:為沒有顯示申明主鍵的表生成一個(gè)用于certification test的主鍵,默認(rèn)ON
wsrep_cluster_address: 啟動(dòng)節(jié)點(diǎn)時(shí)需要指定galera cluster的地址,作為cluster中第一個(gè)啟動(dòng)的節(jié)點(diǎn),wsrep_cluster_address=gcomm://,對(duì)于后續(xù)啟動(dòng)的節(jié)點(diǎn),wsrep_cluster_address=gcomm://node1,node2,node3
wsrep_cluster_name: 所有node必須一樣, 默認(rèn)my_test_cluster
wsrep_convert_LOCK_to_trx:將LOCK/UNLOCK TABLES轉(zhuǎn)換成BEGIN/COMMIT,默認(rèn)OFF
wsrep_data_home_dir:galera會(huì)生成一些文件,默認(rèn)使用mysql_data_dir,默認(rèn)mysql_data_dir
wsrep_node_name:節(jié)點(diǎn)名稱
wsrep_on:session/global,設(shè)置為OFF時(shí),事務(wù)將不會(huì)復(fù)制到其他節(jié)點(diǎn),默認(rèn)ON
wsrep_OSU_method:Online Schema Update設(shè)置,TOI/RSU(MySQL >= 5.5.17),默認(rèn)TOI
wsrep_provider:libgalera_smm.so的路徑,若沒有配置,galera復(fù)制不會(huì)啟動(dòng),默認(rèn)none
wsrep_provider_options:很長(zhǎng)的字符串變量,可以配置很多group communication system相關(guān)參數(shù),很長(zhǎng)很長(zhǎng)...
wsrep_retry_autocommit:事務(wù)在沖突時(shí)重新嘗試的次數(shù),默認(rèn)1
wsrep_slave_threads:并行復(fù)制的slave線程數(shù),默認(rèn)4
wsrep_sst_method:Snapshot State Transter方法:mysqldump/rsync/xt,默認(rèn)mysqldump
|
wsrep_provider_options
該參數(shù)是一個(gè)字符串,包含了group communication system中很多參數(shù)設(shè)置,配置時(shí)使用分號(hào)隔開:
wsrep_provider_options=”key_a=value_a;key_b=value_b;key_c=value_c”
詳情:http://www./wiki/doku.php?id=galera_parameters
列舉其中部分重要參數(shù):
evs.send_window:節(jié)點(diǎn)一次可以發(fā)送的消息數(shù)目,默認(rèn)4
evs.user_send_window:其與evs.send_window之間的差別類似于max_connections與max_user_connection,默認(rèn)2
gcs.fc_factor:flow control參數(shù),默認(rèn)0.5
gcs.fc_limit:flow control參數(shù),默認(rèn)16
gcs.fc_master_slave:flow control參數(shù),默認(rèn)NO
gcs.recv_q_hard_limit:接收隊(duì)列的占用的最大內(nèi)存,默認(rèn)LLONG_MAX
gcs.recv_q_soft_limit:當(dāng)接收隊(duì)列占用內(nèi)存超過(gcs.recv_q_hard_limit*gcs.recv_q_soft_limit),復(fù)制被延遲,默認(rèn)0.25
gmcast.listen_addr:節(jié)點(diǎn)用于接收其它節(jié)點(diǎn)消息的地址,默認(rèn)tcp://0.0.0.0:4567
pc.checksum:是否對(duì)發(fā)送的消息做checksum,默認(rèn)true
pc.ignore_sb:是否忽略split brain,默認(rèn)false
|
一個(gè)例子
binlog_format=row
default-storage-engine = INNODB
innodb_autoinc_lock_mode = 2
innodb_locks_unsafe_for_binlog = 1
wsrep_provider = /u01/mariadb-galera/lib/libgalera_smm.so
wsrep_cluster_address = "gcomm://192.168.xxx.01"
wsrep_cluster_name = galera
wsrep_node_address = 192.168.xxx.xxx
wsrep_node_name = slave
wsrep_sst_method = rsync
wsrep_slave_threads = 16
wsrep_provider_options="gcache.page_size=128M;gcache.size=2G;gcs.fc_limit=512;gcs.fc_factor=0.9;evs.send_window=256;evs.user_send_window=128"
|
Galera status variables
Galera提供了很多以wsrep_開頭狀態(tài)參數(shù)監(jiān)控mysql狀態(tài),通過show status like ‘wsrep%’可以查看:
wsrep_local_state_uuid:應(yīng)該與wsrep_cluster_state_uuid一致,如363acc29-9160-11e2-0800-4316271a76e4
wsrep_last_committed:已經(jīng)提交事務(wù)數(shù)目,所有節(jié)點(diǎn)之間相差不大,可以用來計(jì)算延遲
wsrep_replicated:從本地節(jié)點(diǎn)復(fù)制出去的write set數(shù)目
wsrep_replicated_bytes:從本地節(jié)點(diǎn)復(fù)制出去的write set的總共字節(jié)數(shù)
wsrep_received:本地節(jié)點(diǎn)接收來自其他節(jié)點(diǎn)的write set數(shù)目
wsrep_received_bytes:本地節(jié)點(diǎn)接收來自其他節(jié)點(diǎn)的write set的總共字節(jié)數(shù)
wsrep_local_commits:從本地節(jié)點(diǎn)發(fā)出的write set被提交的數(shù)目,不超過wsrep_replicated
wsrep_local_cert_failures:certification test失敗的數(shù)目
wsrep_local_bf_aborts:certification test通過的write set執(zhí)行過程中回滾的與其沖突的本地事務(wù)
wsrep_local_replays:事務(wù)被回滾(bf abort)重做的數(shù)目
wsrep_local_send_queue:發(fā)送隊(duì)列的長(zhǎng)度
wsrep_local_send_queue_avg:從上次查詢狀態(tài)到目前發(fā)送隊(duì)列的平均長(zhǎng)度,>0.0意味著復(fù)制過程被節(jié)流了
wsrep_local_recv_queue:接收隊(duì)列的長(zhǎng)度
wsrep_local_recv_queue_avg:從上次查詢狀態(tài)到目前接收隊(duì)列的平均長(zhǎng)度,>0.0意味著執(zhí)行速度小于接收速度
wsrep_flow_control_paused:從上次查詢狀態(tài)到目前處于flow control的時(shí)間占比,如0.388129
wsrep_flow_control_sent:從上次查詢狀態(tài)到目前節(jié)點(diǎn)發(fā)送出的FC_PAUSE消息數(shù)目,如1
wsrep_flow_control_recv:從上次查詢狀態(tài)到目前及節(jié)點(diǎn)接收的FC_PAUSE消息數(shù)目,如1
wsrep_cert_deps_distance:可以并行執(zhí)行的write set的最大seqno與最小seqno之間的平均差值,如1851.825751
wsrep_apply_oooe:隊(duì)列中事務(wù)并發(fā)執(zhí)行占比,值越高意味著效率越高
wsrep_commit_window:平均并發(fā)提交窗口大小
wsrep_local_state:節(jié)點(diǎn)的狀態(tài),取值1-6
wsrep_local_state_comment:節(jié)點(diǎn)的狀態(tài)描述,比如Synced
wsrep_incoming_addresses:集群中其它節(jié)點(diǎn)的地址,多個(gè)地址之間用逗號(hào)分隔
wsrep_cluster_conf_id:集群節(jié)點(diǎn)關(guān)系改變的次數(shù)(每次增加/刪除都會(huì)+1)
wsrep_cluster_size:集群節(jié)點(diǎn)個(gè)數(shù)
wsrep_cluster_state_uuid:集群uuid,所有節(jié)點(diǎn)應(yīng)該一樣,如:363acc29-9160-11e2-0800-4316271a76e4
wsrep_cluster_status:集群的目前狀態(tài),取值:PRIMARY(正常)/NON_PRIMARY(不一致)
wsrep_connected:節(jié)點(diǎn)是否連接到集群,取值:ON/OFF
wsrep_local_index:節(jié)點(diǎn)id
wsrep_provider_name:默認(rèn)Galera
wsrep_provider_vendor:默認(rèn)Codership Oy <info@>
wsrep_provider_version:wsrep版本,如:2.2(rXXXX)
wsrep_ready:節(jié)點(diǎn)是否可以接受查詢了,取值:ON/OFF
|
一個(gè)截圖:
如何檢查節(jié)點(diǎn)是否加入到集群
1. wsrep_cluster_state_uuid應(yīng)該與其它所有節(jié)點(diǎn)相同
2. wsrep_cluster_conf_id應(yīng)該與其它所有節(jié)點(diǎn)相同
3. wsrep_cluster_size應(yīng)該是所有節(jié)點(diǎn)的數(shù)目
4. wsrep_cluster_status取值應(yīng)該是:Primary
5. wsrep_ready取值應(yīng)該是ON
6. wsrep_connected取值應(yīng)該是ON
判斷復(fù)制過程是否出現(xiàn)問題
wsrep_flow_control_paused,正常情況下,其取值應(yīng)該接近于0.0,大于0.0意味著有‘慢節(jié)點(diǎn)’影響了集群的速度,可以嘗試通過增大wsrep_slave_threads來解決
找出最慢的節(jié)點(diǎn)
wsrep_flow_control_sent,wsrep_local_recv_queue_avg兩個(gè)值最大的節(jié)點(diǎn)
參考: galera status
, galera monitoring
性能測(cè)試
由于galera同步復(fù)制在每個(gè)寫事務(wù)提交時(shí)都增加了replicate trx和certification test的開銷,因此性能遠(yuǎn)遠(yuǎn)低于異步MySQL實(shí)例
測(cè)試場(chǎng)景
使用TPCC進(jìn)行測(cè)試,包含3組數(shù)據(jù):
1、normal mysql: baseline,單個(gè)mysql server
2、galera (RTT: 0.5ms): 2-nodes galera cluster,單節(jié)點(diǎn)讀寫
3、galera (RTT: 15.2ms): 2-nodes galera cluster,單節(jié)點(diǎn)讀寫
tpmC結(jié)果:
TPS結(jié)果:
測(cè)試結(jié)論:
1. 相對(duì)于異步MySQL實(shí)例,Galera replication性能下降約60%左右
2. Galera最大性能不受RTT影響,RTT 較小時(shí)(0.5ms),在達(dá)到最大性能之前(32并發(fā)),性能下降并不明顯 (32并發(fā)下降25%,16并發(fā)性能下降更低),RTT較大時(shí)(15.2ms),在達(dá)到最大性能之前(64并發(fā)),相對(duì)于norml mysq性能下降一直到很明顯,當(dāng)壓力逐漸增大,由于group io的原因,galera性能在達(dá)到最大時(shí)還會(huì)提高
Galera replicate for MySQL學(xué)習(xí)資料
1. codership官網(wǎng)
2.Percona MySQL blog搜索中Perocona XtranDB Cluster
|