Home >Database >Mysql Tutorial >MySQL5.7.17 Group Replication initial detailed explanation
Group-based Replication is a method used in fault-tolerant systems technology in. Replication-group is composed of multiple servers (nodes) that can communicate with each other.
In the communication layer, Group replication implements a series of mechanisms: such as atomic message delivery and total ordering of messages.
These atomic and abstract mechanisms provide strong support for implementing more advanced database replication solutions.
MySQL Group Replication implements a multi-master, fully updated replication protocol based on these technologies and concepts.
In short, a Replication-group is a group of nodes. Each node can execute transactions independently, and read and write transactions will be coordinated with other nodes in the group before committing.
Therefore, when a transaction is ready to be submitted, it will automatically be atomically broadcast within the group to inform other nodes of what content has been changed/what transactions have been performed.
This atomic broadcast method keeps this transaction in the same order on every node.
This means that each node receives the same transaction log in the same order, so each node replays these transaction logs in the same order, and ultimately the entire group maintains a completely consistent state.
However, there may be resource contention between transactions executed on different nodes. This phenomenon easily occurs in two different concurrent transactions.
Suppose there are two concurrent transactions on different nodes that update the same row of data, then resource contention will occur.
Faced with this situation, Group Replication determines that the transaction submitted first is a valid transaction and will be repeated in the entire group. The transaction submitted later will be directly interrupted, or rolled back, and finally discarded.
Therefore, this is also a shared-nothing replication scheme, and each node saves a complete copy of the data. See the following picture 01.png, which describes the specific workflow and can be compared with other solutions concisely. This replication scheme is, to some extent, similar to the Replication method of the database state machine (DBSM).
Download MYSQL5.7.17 from the official website
Set the /etc/hosts mapping on the three db servers, as follows:
192.168.136.130 db1 .136.133 db2192.168.136.134 db3 |
Port |
Data directory |
Server -id |
##192.168.136.130 (db1) |
3317 | /data/mysql/data | ##120136130##192.168.136.133 (db2) | |
##/data/mysql/data |
120136133 |
| 192.168.136.134 (db3)3317 |
/data/mysql/data |
120136134 |
##3, build |
[mysqld] gtid_mode=ON log-slave-updates=ON enforce-gtid-consistency=ON
有了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)
|
配置参数,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' |
配置参数,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' |
配置参数,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,这里修改之后之前创建的数据库是没有办法执行插入操作的。所有如果想在线完成Group Replication的改造需要保证之前已经设置了transaction_write_set_extraction=XXHASH64。
开始构建集群,在db1(master)上执行:
# 构建集群 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; |
The above is the detailed content of MySQL5.7.17 Group Replication initial detailed explanation. For more information, please follow other related articles on the PHP Chinese website!