MySQL group replication介绍

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

“MySQL group replication”

group replication是MySQL官方开发的一个开源插件,是实现MySQL高可用集群的一个工具。第一个GA版本正式发布于MySQL5.7.17中;想要使用group replication只需要从官网上下载MySQL5.7.17及以后的版本即可

group replication发布以后,有3种方法来实现MySQL的高可用集群:

①:异步复制

②:半同步复制

③:group replication


---注意:

  异步复制是实现最早也是最简单的高可用方法。相比异步复制而言,半同步复制提高了MySQL集群的可靠性。group replication则是MySQL复制今后发展的方向,与前两者相比,不仅是可靠性更好,在易用性上也有巨大提高;


1、组的概念:

    group replication插件中有组(group)的概念,被group replication插件连接在一起的MySQL服务器是一个高可用组,组内的MySQL服务器被称为成员。组的概念贯穿与group replication的使用和内部实现之中。group replication内部集成了组管理服务,实现了很多组内成员的自动化管理功能,这使得group replication的使用和管理变得非常简单。

用户对group replication组的管理有三种操作,分别如下:

①:创建组:当组的第一个成员启动时,需要对组进行初始化

②:加入组:将MySQL服务器加入到一个村子的group replication组内

③:离开组:从一个group replication组内移除一台MySQL服务器;


---当组初始化后,组的第一个成员会自动成为master,新加入的成员会自动从组内的master上复制数据。这些使用到的通道由group replication插件自动控制,不需要用户的干预。特别是当MySQL服务器出现故障需要做切换的时候,选择新的master之后,整个切换过程会自动完成,不必像主从那样使用命令手动来完成切换;


2、多主复制:

   group replication支持像异步、半同步复制一样可以做一主多从的复制,group replication称为单主复制。除此之外,group replication还提供了一种更高级的复制技术,叫 多主复制。在多主模式下,所有成员同时对外提供的读写服务都是master,彼此之间会自动进行数据复制。这是一种真正意义的多主并发复制,用户可以向一个MySQL上更新数据一样,并发的多个成员上更新数据。group replication插件能够将这些并发事务的更新操作同步到每个成员上,使他们数据保持一致;


2.1、多主复制的优势:

①:当一个成员发生故障时,只会造成一部分连接失效,对应用程序的影响会小一些;

②:当需要关闭某个MySQL服务器时,可以先将其上的连接平滑的转移到其他成员上后关闭这个成员,不会造成应用的瞬时中断;

③:多主模式的性能很好,对瞬时的高并发有着很好的承载能力;


3、group replication在传输数据时,使用了paxos协议。

   paxos协议保证了数据传输的一致性和原子性。group replication基于paxos协议构建了一个分布式的状态复制机制,这是实现多主复制的核心技术。这个技术为group replication带来3个主要优点,如下:

①:group replication中不会出现脑裂现象

②:group replication的冗余能力很好,能够保证binlog event至少被复制到超过一半的成员上,只要同时宕机的成员不超过半数就不会导致数据丢失;

③:group replication还保证只要binlog event没被传输到半数以上的成员,本地成员不会将事务的binlog event写入binlog文件和提交事务,从而保证宕机的服务器上不会有组内在线成员上不存在的数据。因此宕机的服务器重启后,不再需要特殊的处理就可以加入组;


4、group replication服务模式:

group replication组对外提供服务的时候有2种服务模式:单主模式    多主模式 


4.1、单主模式:

  单主模式下只有一个成员提供更新服务,其他成员只提供查询服务。提供更新服务的成员叫做 主成员,只提供查询服务的叫做 从成员。group replication的单主模式是异步复制和半同步复制的替代方案。单主复制模式的特点如下:

①:主成员的自动选取和切换:

  单主模式下,组内的成员会自动选举出主成员。初始化时,被初始化的成员自动选举为主成员,其他成员称为从成员。当主成员出现故障的时候,会从组内的其他成员选出一个新的主成员。选取的方法就是对所有在线的成员的UUID进行排序,然后选取UUID最小的成员作为主成员;

  在任何一个成员的服务器上都能使用命令查看主成员的UUID:

  show global status like "group_replication_primary_member"; 或 select * from performance_schema.global_status where variable_name='group_replication_primary_member';


②:读写模式的自动切换:

  当一个成员加入组时,group replication插件会自动将MySQL变成只读模式,只有被选取为主成员后才会自动切换回读写模式。对MySQL只读模式的控制是通过下面的sql语句进行的:

  set global super_read_only=1;

  set global super_read_only=0;


注意:当主成员故障时,组内会自动选出新的主成员,复制也能正常进行。因此组内的failover是完全自动化的,不需要用户干预;



4.2、多主模式

   多主模式下,组中所有的成员同时对外提供查询和更新服务,且没有主从之分,成员之间是完全对等的。客户端连接到任何一个成员上,都能进行读写操作,就好像在操作同一个MySQL服务器;

①:自增段的处理:

  当使用多主模式时,需要设置autoincrement相关的参数来保证自增字段在每个成员上产生不同的值。group replication提供了两种配置方式,分别如下:

  “直接配置MySQL的系统变量”:set global auto_increment_offset=N;  set global auto_increment_increment=N;

  “通过group replication插件来配置”:set group_replication_auto_increment_increment=N; (默认值是7,一般不用修改)


注意:在实践中,server_id  最好是使用:1,2,3,之类的自增值,如果不是,就需要手动来配置MySQL的自增变量;(auto_increment_increment代表段的大小,自增字段的大小依赖于group replication组中成员的多少。auto_increment_increment最小要等于group replication组内成员的数量。如果段的大小等于组内成员的数量,则所有的自增值都会被使用)


②:多主模式的限制:

不支持串行的隔离级别。单个MySQL服务器中,通过锁的方式来实现串行化的隔离级别。而多主模式时,多个成员之间的并发操作无法通过锁来实现串行的隔离级别;

不支持外键的级联操作;

参数:group_replication_enforce_update_everywhere_checks=TRUE 是用来控制是否做以上限制的检测,如果开启了这个参数,当发现这些情况时就会报错;


③:DDL语句并发执行问题:

MySQL5.7上的DDL不是原子操作无法回滚,因此group replication没有对DDL做冲突检测。换句话说,DDL语句不会和其他任何语句冲突(包括DML和DDL)。如果DDL和有冲突的语句在不同的成员上同时执行,可能导致错误或数据不一致;


④:使用多主模式的条件:

应用或中间件要能够把写请求分发到多个成员上

要能够控制DDL的使用,当DDL要执行时,能够把所有的写请求转移到同一台MySQL上去执行;


注意:group replication将单主模式设为了默认模式。如果要使用多主模式,则需要在加入组前将这个变量设置为OFF。服务模式是不能在线切换的,必须使组内的所有成员退出组,然后重新初始化组为要使用的服务模式,再把其他成员加进来;

set global group_replication_single_primary_mode=OFF;


5、binlog event的多线程执行:

5.1、group_replication_applier通道:

   group replication插件会自动创建一个通道来执行接收到的binlog event,通道的名字是group_replication_applier。当加入组是,group replication插件会自动启动group_replication_applier通道的执行线程。如果用户需要调整group_replication_applier执行线程的参数,

也可以手动停止和启动这个通道的执行线程,操作命令如下:

start slave sql_thread  for  channel 'group_replication_applier';

stop slave sql_thread  for  channel 'group_replication_applier';


5.2、基于主键的并行执行:

group replication中的binlog event的执行也支持多线程并行执行,配置方法:

set global slave_parallel_type='logical_clock';

set global slave_parallel_workers=N;

set global slave_preserve_commit_order=ON;


---注意:

  group replication的并行复制算法和异步复制中的 logical_clock算法并不相同。group replication并发策略中的逻辑时间是基于主键计算出来的,比异步复制基于锁计算出来的逻辑时间的并发性能要好很多。

基于主键的并发复制有以下两个 特点:

①:如果两个事物更新了同一行数据,则要按顺序执行,否则,就可以并发执行;

②:DDL不能和任何事物并发执行,必须等待它前门的所有事务执行完毕后才能开始执行。后面的事务也必须要等待DDL执行完毕后,才能开始执行;

注意:为了保证同一个session中的事务按照同样的顺序提交,group replication在开启并行复制时,要求必须设置slave_preserve_commit_order的值为ON;
















本文转自一个笨小孩51CTO博客,原文链接: http://blog.51cto.com/fengfeng688/1941341,如需转载请自行联系原作者






相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 SQL 关系型数据库
MySQL Group 字段逗号链接
【4月更文挑战第26天】
|
6月前
|
SQL 存储 Oracle
mysql中Group By 分析
mysql中Group By 分析
59 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL GROUP BY 语句
MySQL GROUP BY 语句
|
6月前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
293 0
|
5月前
|
JSON 关系型数据库 MySQL
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
163 1
|
6月前
|
SQL 存储 关系型数据库
【mysql】将逗号分割的字段内容转换为多行并group by
【mysql】将逗号分割的字段内容转换为多行并group by
|
6月前
|
SQL 关系型数据库 MySQL
923.【mysql】 only full group by 模式
923.【mysql】 only full group by 模式
186 1
|
6月前
|
监控 负载均衡 关系型数据库
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
90 0
|
6月前
|
关系型数据库 MySQL Java
MySQL group by分组后,将每组所得到的id拼接起来
MySQL group by分组后,将每组所得到的id拼接起来
124 0
|
6月前
|
关系型数据库 MySQL 数据库
Mysql-错误处理: Found option without preceding group in config file
Mysql-错误处理: Found option without preceding group in config file
782 0
下一篇
无影云桌面