热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql带唯一主建任然发生gap,MySQL组复制(二)

配置复制组更改primary查看当前主节点1root(none)02:12:SELECT*FROMperformance_schema.replication_group_memb


配置复制组


更改primary


查看当前主节点1root@(none) 02:12: SELECT * FROM performance_schema.replication_group_members;


指定新的主节点进行切换


1root@(none) 02:12: SELECT group_replication_set_as_primary('d1fbe050-5ecf-11eb-a88d-0050569c8f5e');


查看进度


1root@(none) 02:12: SELECT event_name, work_completed, work_estimated FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%";


更改复制模式


更改为单主模式


1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16###停止复制


mysql> stop group_replication;


###关闭一致性检查


mysql> set global group_replication_enforce_update_everywhere_checks=OFF;


###开启单主模式


mysql> set global group_replication_single_primary_mode=ON;


###主节点引导组复制


mysql> set global group_replication_bootstrap_group=ON;


mysql> start group_replication


mysql> set global group_replication_bootstrap_group=OFF;


###其它节点加入组复制


mysql> start group_replication


Tips:也可以采用SELECT group_replication_switch_to_single_primary_mode(member_uuid)直接进行切换


更改为多主模式


1


2


3


4


5


6


7


8


9


10###停止复制


mysql> stop group_replication;


###关闭单主


mysql> set global group_replication_single_primary_mode=OFF;


###启动复制


mysql> set global group_replication_bootstrap_group=ON;


mysql> start group_replication;


mysql> set global group_replication_bootstrap_group=OFF;


Tips:也可以采用SELECT group_replication_switch_to_multi_primary_mode()直接进行切换


查看进度


1mysql> SELECT event_name, work_completed, work_estimated FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%";


配置最大共识实例数


这个最大值被称为组的事件范围,是组可以并行执行的最大共识实例数。


查看复制组写入并发性


1mysql> SELECT group_replication_get_write_concurrency();


配置写入并发(需要GROUP_REPLICATION_ADMIN权限)


1mysql> SELECT group_replication_set_write_concurrency(instances);


设置组通信协议版本


从MySQL 8.0.16开始,组复制有了组通信协议的概念。可以显式管理组复制通信协议版本,并将其设置为适应您希望组支持的最老的MySQL Server版本。这使得组可以由不同MySQL Server版本的成员组成,同时确保向后兼容性。


查看当前通信协议版本


1mysql> SELECT group_replication_get_communication_protocol();


修改通信协议版本


1SELECT group_replication_set_communication_protocol("5.7.25");


Tips:当升级组复制成员MySQL Version后,通信协议并不会自动更新,我们可以手动升级协议版本


事务一致性保证


就分布式一致性保证而言,无论是在正常或故障修复的情况下,组复制始终是一个最终一致性的系统。与系统一致性相关的事件包含控制操作和数据流操作,对于组复制,可以根据一致性评估的控制操作为:


成员加入或离开


网络故障


单主模式下,主节点故障切换或通过group_replication_set_as_primary()重新选主


在单主模式下,当主节点发生故障进行转移时,新的主节点可以立即应用程序流量,不管有多少事务复制积压。这种情况写一致性得到了保证,但是在新节点应用backlog中的事务前可能检索到过时数据,无法保证读一致性。如果采用8.0.14或更高版本时,可以在主节点故障切换期间使用group_replication_consistency变量配置成员提供的事务一致性保证级别。该参数有下列选择


EVENTUAL:RO和RW事务在执行之前都不等待前面的事务被应用(8.0.14前的唯一选择)


BEFORE:确保本地强一致性,并不保证其它节点数据实时同步,可能造成当前节点读延迟


AFTER:确保全局一致性,可以保证所有节点数据实时同步,可能造成所有节点都延迟


BEFORE_AND_AFTER:最高级别,结合BEFORE和AFTER来确保本地和全局强一致性


BEFOR_ON_PRIMARY_FAILOVER: 确保新主的本地一致性,在新选出的主节点上保存新事务,直到应用完积压事务为止


一致性级别的影响


围绕一致性级别对事务的影响我们通过下列案例来重点说明EVENTUAL、BEFORE和AFTER选项的影响


节点


角色


节点1



节点2


只读


节点3


只读


现有如下表


1


2


3


4


5


6


7


8


9


10root@test 04:19: show create table t1;\


+-------+-------------------------------------------------------------------------------------+


| Table | Create Table |


+-------+-------------------------------------------------------------------------------------+


| t1 | CREATE TABLE `t1` (


`id` int NOT NULL,


`r1` int DEFAULT NULL,


`r2` int DEFAULT NULL,


PRIMARY KEY (`id`)


) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |


插入一条数据,其它节点也能正常读取到


1


2


3


4


5


6


7


8


9root@test 04:21: insert into t1 values (1,2,@@server_id);


Query OK, 1 row affected (0.00 sec)


root@test 04:21: select * from t1;


+----+------+------+


| id | r1 | r2 |


+----+------+------+


| 1 | 2 | 2109 |


+----+------+------+


查看一致性级别


1


2


3


4


5


6root@test 04:23: show variables like 'group_replication_consistency';


+-------------------------------+----------+


| Variable_name | Value |


+-------------------------------+----------+


| group_replication_consistency | EVENTUAL |


+-------------------------------+----------+


在节点2上手动添加read锁


1


2root@test 04:21: lock table t1 read;


Query OK, 0 rows affected (0.00 sec)


再次插入新数据


1


2root@test 04:21: insert into t1 values (2,3,@@server_id);


Query OK, 1 row affected (0.01 sec)


在节点2上并未读取到新插入的数据


1


2


3


4


5


6root@test 04:23: select * from t1;


+----+------+------+


| id | r1 | r2 |


+----+------+------+


| 1 | 2 | 2109 |


+----+------+------+


释放锁之后就能读取最新数据


1


2


3


4


5


6


7


8


9


10root@test 04:26: unlock tables;


Query OK, 0 rows affected (0.00 sec)


root@test 04:26: select * from t1;


+----+------+------+


| id | r1 | r2 |


+----+------+------+


| 1 | 2 | 2109 |


| 2 | 3 | 2109 |


+----+------+------+


下面将节点2的级别调整为before进行测试


1root@test 04:26: set @@group_replication_consistency='before';


再次加锁


1root@test 04:29: lock table t1 read;


节点1插入新数据


1root@(test) 04:29: insert into t1 values (3,4,@@server_id);


这时发现,再去节点2查询表会hang住,需要等待本地数据完全应用。节点3则正常查询


下面将节点2的级别调整为AFTER


1


2root@(test) 04:34: set @@group_replication_consistency='after';


Query OK, 0 rows affected (0.00 sec)


重复加锁的过程


1root@(test) 04:35: lock table t1 read;


在节点1插入新数据


1root@(test) 04:35: insert into t1 values (3,4,@@server_id);


这时会发现插入处于等待状态,并没有完成,因为节点2上的表被锁了,无法完成日志应用。节点2查询成功,但都为陈旧数据。节点3上的查询也需要等待其它从节点日志应用完成才能返回结果,而不是返回陈旧数据。当节点2释放锁之后,节点1的插入完成,节点3的查询也返回了最新数据。


单主模式发生故障转移后,为避免在EVENTUAL选项下RO事务可能读取到过时数据导致的一致性问题,建议使用适当的流控设置,减小事务积压的可能。并将一致性级别设置为BEFORE_ON_PRIMARY_FAILOVER。尽管在使用BEFORE_ON_PRIMARY_FAILOVER一致性级别时,所有写操作都被挂起,但并不是所有读操作都被阻塞,我们任然可以执行一些运维管理命令。




推荐阅读
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
手机用户2602924833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有