MySQL5.7.17 Group Replication初始詳細(xì)說(shuō)明
發(fā)表時(shí)間:2023-09-10 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]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方法比較類似。
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í)。