千家信息网

MySQL多组复制的优势以及单主模式和多主模式的区别

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本篇内容主要讲解"MySQL多组复制的优势以及单主模式和多主模式的区别",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"MySQL多组复制的优势以及单主模式和
千家信息网最后更新 2024年09月22日MySQL多组复制的优势以及单主模式和多主模式的区别

本篇内容主要讲解"MySQL多组复制的优势以及单主模式和多主模式的区别",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"MySQL多组复制的优势以及单主模式和多主模式的区别"吧!

"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;

到此,相信大家对"MySQL多组复制的优势以及单主模式和多主模式的区别"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

成员 模式 服务 数据 服务器 插件 切换 更新 事务 通道 保证 方法 用户 线程 语句 同步 配置 优势 参数 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 免费服务器管理平台有哪些 最常用的数据库模型有哪些 服务器拒绝处理您的请求 王者怎么进不去服务器无响应 我的世界服务器骑士 奉贤区创新数据库活动简介 有没有在济南干软件开发的朋友 集中化服务器管理app 宁夏银川政务软件开发公司 网络安全攻防培训 租传奇服务器多少钱 县财政网络安全管理责任制度 博世汽车后台数据库用的是哪个 爬取表格数据库 财务服务器维护合同 网页图表数据存在服务器哪里 我国网络安全行业分析 浙江微享软件开发 服务器 芯片技术融合研发 兰州地下病人数据库 博雅数据库湖南高考2018 服务器拒绝处理您的请求 服务器冷却液 市公司 深圳软件开发交多少增值税 AI客服服务器架设 干警观看网络安全宣传 梦幻西游广东4区有哪些服务器 华为服务器浸在水里 潍坊银行软件开发工程师 两会网络安全保障实施方案
0