明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

MySQL5.7.17 Group Replication初始詳細(xì)說(shuō)明

[摘要]1,關(guān)于 Group Replication基于組的復(fù)制(Group-based Replication)是一種被使用在容錯(cuò)系統(tǒng)中的技術(shù)。Replication-group(復(fù)制組)是由能夠相互通信的多個(gè)服務(wù)器(節(jié)點(diǎn))組成的。在通信層,Group replication實(shí)現(xiàn)了一系列的機(jī)制:比如原子...

1,關(guān)于 Group Replication

基于組的復(fù)制(Group-based Replication)是一種被使用在容錯(cuò)系統(tǒng)中的技術(shù)。Replication-group(復(fù)制組)是由能夠相互通信的多個(gè)服務(wù)器(節(jié)點(diǎn))組成的。

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

這些原子化,抽象化的機(jī)制,為實(shí)現(xiàn)更先進(jìn)的數(shù)據(jù)庫(kù)復(fù)制方案提供了強(qiáng)有力的支持。

MySQL Group Replication正是基于這些技術(shù)和概念,實(shí)現(xiàn)了一種多主全更新的復(fù)制協(xié)議。

簡(jiǎn)而言之,一個(gè)Replication-group就是一組節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都可以獨(dú)立執(zhí)行事務(wù),而讀寫事務(wù)則會(huì)在于group內(nèi)的其他節(jié)點(diǎn)進(jìn)行協(xié)調(diào)之后再commit。

因此,當(dāng)一個(gè)事務(wù)準(zhǔn)備提交時(shí),會(huì)自動(dòng)在group內(nèi)進(jìn)行原子性的廣播,告知其他節(jié)點(diǎn)變更了什么內(nèi)容/執(zhí)行了什么事務(wù)。

這種原子廣播的方式,使得這個(gè)事務(wù)在每一個(gè)節(jié)點(diǎn)上都保持著同樣順序。

這意味著每一個(gè)節(jié)點(diǎn)都以同樣的順序,接收到了同樣的事務(wù)日志,所以每一個(gè)節(jié)點(diǎn)以同樣的順序重演了這些事務(wù)日志,最終整個(gè)group保持了完全一致的狀態(tài)。

然而,不同的節(jié)點(diǎn)上執(zhí)行的事務(wù)之間有可能存在資源爭(zhēng)用。這種現(xiàn)象容易出現(xiàn)在兩個(gè)不同的并發(fā)事務(wù)上。

假設(shè)在不同的節(jié)點(diǎn)上有兩個(gè)并發(fā)事務(wù),更新了同一行數(shù)據(jù),那么就會(huì)發(fā)生資源爭(zhēng)用。

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

因此,這也是一個(gè)無(wú)共享的復(fù)制方案,每一個(gè)節(jié)點(diǎn)都保存了完整的數(shù)據(jù)副本?慈缦聢D片01.png,描述了具體的工作流程,能夠簡(jiǎn)潔的和其他方案進(jìn)行對(duì)比。這個(gè)復(fù)制方案,在某種程度上,和數(shù)據(jù)庫(kù)狀態(tài)機(jī)(DBSM)的Replication方法比較類似。

MySQL5.7.17 Group Replication初始詳解

2,安裝mysql5.7.17

官網(wǎng)下載MYSQL5.7.17

在三臺(tái)db服務(wù)器上面設(shè)置/etc/hosts映射,如下:

192.168.136.130 db1

192.168.136.133 db2

192.168.136.134 db3


安裝的數(shù)據(jù)庫(kù)服務(wù)器:

數(shù)據(jù)庫(kù)服務(wù)器地址

端口

數(shù)據(jù)目錄

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復(fù)制:

在3臺(tái)my.cnf上面配置gtid:

[mysqld]
gtid_mode=ON
log-slave-updates=ON
enforce-gtid-consistency=ON


在3臺(tái)mysql實(shí)例上db1、db2、db3分配賬號(hào):

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>


在db2、db3上搭建gtid服務(wù):

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 status\G
*************************** 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
………………………………..


4
,開啟Group Replication

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

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)


配置參數(shù),db1(master)上:

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'


配置參數(shù),db2(slave1)上:

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'


配置參數(shù),db3(slave2)上:

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'


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

開始構(gòu)建集群,在db1(master)上執(zhí)行:

# 構(gòu)建集群
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;


db2、db3上加入

stop slave;
START GROUP_REPLICATION;

在db1上查看集群信息:

mysql>  SELECT * FROM performance_schema.replication_group_members;


以上就是MySQL5.7.17 Group Replication初始詳解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。