MySQL5.7.17 Group Replication初始詳解

1,關于 Group Replication

基于組的復制(group-based replication)是一種被使用在容錯系統中的技術。replication-group(復制組)是由能夠相互通信的多個服務器(節點)組成的。

在通信層,Group replication實現了一系列的機制:比如原子消息(atomic message delivery)和全序化消息(totalordering of messages)。

這些原子化,抽象化的機制,為實現更先進的數據庫復制方案提供了強有力的支持。

MySQL Group Replication正是基于這些技術和概念,實現了一種多主全更新的復制協議。

簡而言之,一個Replication-group就是一組節點,每個節點都可以獨立執行事務,而讀寫事務則會在于group內的其他節點進行協調之后再commit。

因此,當一個事務準備提交時,會自動在group內進行原子性的廣播,告知其他節點變更了什么內容/執行了什么事務。

這種原子廣播的方式,使得這個事務在每一個節點上都保持著同樣順序。

這意味著每一個節點都以同樣的順序,接收到了同樣的事務日志,所以每一個節點以同樣的順序重演了這些事務日志,最終整個group保持了完全一致的狀態。

然而,不同的節點上執行的事務之間有可能存在資源爭用。這種現象容易出現在兩個不同的并發事務上。

假設在不同的節點上有兩個并發事務,更新了同一行數據,那么就會發生資源爭用。

面對這種情況,Group Replication判定先提交的事務為有效事務,會在整個group里面重演,后提交的事務會直接中斷,或者回滾,最后丟棄掉。

因此,這也是一個無共享的復制方案,每一個節點都保存了完整的數據副本。看如下圖片01.png,描述了具體的工作流程,能夠簡潔的和其他方案進行對比。這個復制方案,在某種程度上,和數據庫狀態機(DBSM)的Replication方法比較類似。

?MySQL5.7.17 Group Replication初始詳解

2,安裝mysql5.7.17

? 官網下載MYSQL5.7.17

在三臺db服務器上面設置/etc/hosts映射,如下:

192.168.136.130??? db1????????????????????????????????????????????????? ???????????????????????????????????????

192.168.136.133??? db2

192.168.136.134??? db3

安裝的數據庫服務器:

數據庫服務器地址

端口

數據目錄

Server-id

192.168.136.130(db1)

3317

/data/mysql/data

120136130

192.168.136.133(db2)

3317

/data/mysql/data

120136133

192.168.136.134(db3)

3317

/data/mysql/data

120136134


3
,搭建gtid復制:

在3臺my.cnf上面配置gtid:

@@######@@

在3臺mysql實例上db1、db2、db3分配賬號:

@@######@@

在db2、db3上搭建gtid服務:

@@######@@


4
,開啟Group Replication

有了gtid之后,開啟group replication就方便多了。首先需要安裝group replication插件

@@######@@

配置參數,db1(master)上:

@@######@@

配置參數,db2(slave1)上:

@@######@@

?

配置參數,db3(slave2)上:

@@######@@


BTY
:如果之前沒有配置transaction_write_set_extraction=XXHASH64,這里修改之后之前創建的數據庫是沒有辦法執行插入操作的。所有如果想在線完成Group Replication的改造需要保證之前已經設置了transaction_write_set_extraction=XXHASH64。

開始構建集群,在db1(master)上執行:

@@######@@@@######@@@@######@@ ?@@######@@

?

?

db2、db3上加入

@@######@@

?

?

在db1上查看集群信息:

@@######@@

?

[mysqld]  gtid_mode=ON  log-slave-updates=ON  enforce-gtid-consistency=ON
mysql>?GRANT??REPLICATION?SLAVE?ON?*.*?TO?'repl'@'192.168.%'?IDENTIFIED?BY??'rlpbright_1927@ys';  Query?OK,?0?rows?affected,?1?warning??(0.00?sec)  ?  mysql>
mysql>?change??master?to?master_user='repl',?  master_password='rlpbright_1927@ys',??  master_host='db1',master_port=3317,?master_auto_position=1;  Query?OK,?0?rows?affected,?2?warnings??(0.02?sec)  ?  mysql>??start?slave;  Query?OK,?0?rows?affected?(0.04?sec)  ?  mysql>  mysql>?show??slave?statusG  ***************************?1.?row??***************************  ???????????????Slave_IO_State:?Waiting?for??master?to?send?event  ??????????????????Master_Host:?db1  ??????????????????Master_User:?repl  ??????????????????Master_Port:?3317  ????????????????Connect_Retry:?60  ??????????????Master_Log_File:??mysql-bin.000002  ???????????Read_Master_Log_Pos:?445  ???????????????Relay_Log_File:??mysql-relay-bin.000002  ????????????????Relay_Log_Pos:?414  ?????????Relay_Master_Log_File:?mysql-bin.000002  ?????????????Slave_IO_Running:?Yes  ????????????Slave_SQL_Running:?Yes  ………………………………..
mysql>?INSTALL?PLUGIN?group_replication??SONAME?'group_replication.so';  Query?OK,?0?rows?affected?(0.03?sec)  ?  ?  mysql>?show??plugins;  +----------------------------+----------+--------------------+----------------------+---------+  |?Name????????|?Status???|?Type????????|?Library??????????|?License?|  +----------------------------+----------+--------------------+----------------------+---------+  |?binlog?????????????????|?ACTIVE???|?STORAGE?ENGINE?????|?NULL??????????|?GPL?????|  …………  |??group_replication??????????|??ACTIVE???|?GROUP?REPLICATION??|?group_replication.so?|?GPL?????|  +----------------------------+----------+--------------------+----------------------+---------+  45?rows?in?set??(0.00?sec)
mysql>?set?@@global.transaction_write_set_extraction?=??XXHASH64  mysql>?set?@@global.group_replication_start_on_boot?=?OFF  mysql>?set?@@global.group_replication_bootstrap_group?=?OFF  mysql>?set?@@global.group_replication_group_name?=?0c6d3e5f-90e2-11e6-802e-842b2b5909d6  mysql>?set?@@global.group_replication_local_address?=?'db1:6606'  mysql>?set?@@global.group_replication_group_seeds?=?'db2:6607,db3:6608'
mysql>?set?@@global.transaction_write_set_extraction?=??XXHASH64  mysql>?set?@@global.group_replication_start_on_boot?=?OFF  mysql>?set?@@global.group_replication_bootstrap_group?=?OFF  mysql>?set?@@global.group_replication_group_name?=?0c6d3e5f-90e2-11e6-802e-842b2b5909d6  mysql>?set?@@global.group_replication_local_address?=?'db2:6607'  mysql>?set?@@global.group_replication_group_seeds?=?'db111:6606,127.0.0.1:db3'
mysql>?set?@@global.transaction_write_set_extraction?=??XXHASH64  mysql>?set?@@global.group_replication_start_on_boot?=?OFF  mysql>?set?@@global.group_replication_bootstrap_group?=?OFF  mysql>?set?@@global.group_replication_group_name?=?0c6d3e5f-90e2-11e6-802e-842b2b5909d6  mysql>?set?@@global.group_replication_local_address?=?'db3:6608'  mysql>?set?@@global.group_replication_group_seeds?=?'db1:6607,db2:6606'
#?構建集群
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='rlpbright_1927@ys'FORCHANNEL'group_replication_recovery';
#開啟group_replication
SETGLOBAL??group_replication_bootstrap_group=ON;  START??GROUP_REPLICATION;  SETGLOBAL??group_replication_bootstrap_group=OFF;
stop?slave;  START?GROUP_REPLICATION;
mysql>??SELECT?*?FROM?performance_schema.replication_group_members;

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享