搜索
首页数据库mysql教程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方法比较类似。

 

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:

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


在3台mysql实例上db1、db2、db3分配账号:

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服务:

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)


配置参数,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;


 

以上是MySQL5.7.17 Group Replication初始详解的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL的许可与其他数据库系统相比如何?MySQL的许可与其他数据库系统相比如何?Apr 25, 2025 am 12:26 AM

MySQL使用的是GPL许可证。1)GPL许可证允许自由使用、修改和分发MySQL,但修改后的分发需遵循GPL。2)商业许可证可避免公开修改,适合需要保密的商业应用。

您什么时候选择InnoDB而不是Myisam,反之亦然?您什么时候选择InnoDB而不是Myisam,反之亦然?Apr 25, 2025 am 12:22 AM

选择InnoDB而不是MyISAM的情况包括:1)需要事务支持,2)高并发环境,3)需要高数据一致性;反之,选择MyISAM的情况包括:1)主要是读操作,2)不需要事务支持。InnoDB适合需要高数据一致性和事务处理的应用,如电商平台,而MyISAM适合读密集型且无需事务的应用,如博客系统。

在MySQL中解释外键的目的。在MySQL中解释外键的目的。Apr 25, 2025 am 12:17 AM

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL中有哪些不同类型的索引?MySQL中有哪些不同类型的索引?Apr 25, 2025 am 12:12 AM

MySQL中有四种主要的索引类型:B-Tree索引、哈希索引、全文索引和空间索引。1.B-Tree索引适用于范围查询、排序和分组,适合在employees表的name列上创建。2.哈希索引适用于等值查询,适合在MEMORY存储引擎的hash_table表的id列上创建。3.全文索引用于文本搜索,适合在articles表的content列上创建。4.空间索引用于地理空间查询,适合在locations表的geom列上创建。

您如何在MySQL中创建索引?您如何在MySQL中创建索引?Apr 25, 2025 am 12:06 AM

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL与Sqlite有何不同?MySQL与Sqlite有何不同?Apr 24, 2025 am 12:12 AM

MySQL和SQLite的主要区别在于设计理念和使用场景:1.MySQL适用于大型应用和企业级解决方案,支持高性能和高并发;2.SQLite适合移动应用和桌面软件,轻量级且易于嵌入。

MySQL中的索引是什么?它们如何提高性能?MySQL中的索引是什么?它们如何提高性能?Apr 24, 2025 am 12:09 AM

MySQL中的索引是数据库表中一列或多列的有序结构,用于加速数据检索。1)索引通过减少扫描数据量提升查询速度。2)B-Tree索引利用平衡树结构,适合范围查询和排序。3)创建索引使用CREATEINDEX语句,如CREATEINDEXidx_customer_idONorders(customer_id)。4)复合索引可优化多列查询,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。5)使用EXPLAIN分析查询计划,避

说明如何使用MySQL中的交易来确保数据一致性。说明如何使用MySQL中的交易来确保数据一致性。Apr 24, 2025 am 12:09 AM

在MySQL中使用事务可以确保数据一致性。1)通过STARTTRANSACTION开始事务,执行SQL操作后用COMMIT提交或ROLLBACK回滚。2)使用SAVEPOINT可以设置保存点,允许部分回滚。3)性能优化建议包括缩短事务时间、避免大规模查询和合理使用隔离级别。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器