关注↑↑↑我们获得更多精彩内容!

作者 | 张甦, 数据库领域的专家和知名人士、图书《MySQL王者晋级之路》作者,51CTO 专家博主。近10年互联网线上处理及培训经验,专注于 MySQL 数据库,对 MongoDB、Redis 等 NoSQL 数据库以及 Hadoop 生态圈相关技术有深入研究,具备非常丰富的理论与实战经验。

最近绝地求生这个游戏太火了,当我问我的朋友们你们闲时在干嘛,基本上告诉我的答案都是在"吃鸡"啊!想必很多老铁们也玩,那一定应该知道绝地求生中有把枪叫AWM。此枪伤害裸132点,爆头330,即使三级头爆头必死,无防弹衣或者防弹衣有破损,一枪死。是这个游戏中威力最大的狙击×××,足足是98K的两倍。

那么在MySQL领域有没有这么一把威力超大的“枪”呢~答案是必须有啊!但老张先问你们一个问题。

请问你搭建MySQL复制的时候,还在执行备份恢复,在从库进行change master to的操作嘛?如果是那你可就真的落后了。

本章介绍MySQL官方推荐的一款高可用集群方案MySQL Group Replication。简称:MGR(组复制)。它是官方推出的一种基于Paxos协议的状态机复制,彻底解决了基于传统的异步复制和半同步复制中数据一致性问题无法保证的情况。也让MySQL数据库涉及的领域更广,彻底拥有了打开互联网金融行业的大门。

2016年12月 MySQL Group Replication推出了第一个GA版本发布在MySQL5.7.17中。但目前直接投入到生产环境中使用,风险还是比较大。建议等其越来越成熟之后,我们再真正投入使用。

随着MySQL8.0版本即将与我们见面,再配合官方逐渐成熟的高可用集群 Group Replication方案,到那时再看看谁还是我们MySQL的对手,全都不在了!MySQL数据库就是作者的信仰,爱你无怨无悔。

MGR组复制原理

先来谈谈什么叫做组复制。组复制是一种可用于实现容错系统的技术。复制组是一个通过消息传递相互交互的server集群。复制组由多个server成员组成,如下图的master1,master2,master3,所有成员独立完成各自的事务。当客户端先发起一个更新事务,该事务先在本地执行,执行完成之后就要发起对事务的提交操作了。

在还没有真正提交之前需要将产生的复制写集广播出去,复制到其他成员。如果冲突检测成功,组内决定该事务可以提交,其他成员可以应用,否则就回滚。最终,这意味着所有组内成员以相同的顺序接收同一组事务。因此组内成员以相同的顺序应用相同的修改,保证组内数据强一致性。

MGR组复制模式

组复制可以在两种模式下运行。 在单主模式下,组复制具有自动选主功能,每次只有一个 server 成员接受更新,其他成员只提供读服务。在多主模式下运行时,所有的 server 成员都可以同时接受更新,没有主从之分,成员角色是完全对等的。 组复制默认情况下是单主模式,我们可以通过设置参数group_replication_single_primary_mode=off,让其变成多主模式。本章的实战部分就是以多主模式进行MGR复制的搭建。

MGR特性介绍

  • 完成了真正的多节点读写的集群方案。

  • 基于原生复制及paxos协议的组复制技术,并以插件的方式提供,实现了数据的强一致性

  • 由于是多节点读写,failover切换变得更加简单

  • 增加删除节点,自动完成同步数据和更新组内信息的操作。扩展性地增强
    虽然在MGR的多主模式下,受到不能支持串行隔离级别和不支持外键级联操作的限制条件。而且目前MySQL版本中对DDL语句操作无法实现回滚,导致MGR无法对DDL语句做数据冲突检验,所以DDL语句在MGR中并发执行存在隐患。但这些都不能阻挡MGR的发布所带来的开创新时代的意义。让我们一起期待这个追求极致完美的MySQL数据库,未来更加璀璨夺目。

MGR搭建实战演练

环境介绍:这里我们准备三个节点,数据库半版本使用 MySQL5.7.17

数据库IP地址 数据库版本信息 主机名 Server-id

192.168.56.101  MySQL-5.7.17    node2   1013306
192.168.56.102  MySQL-5.7.17    node3   1023306
192.168.56.103  MySQL-5.7.17    proxysql    1033306

实战第1步:
在三个节点上执行安装MySQL5.7操作。(此步省略,详情请见书中第一部分第二章)
实战第2步:
在三个节点上分别设置 hostname 和 ip 地址的映射关系

实战第3步:
在三个节点上分别创建复制账号,命令如下

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.56.%' IDENTIFIED BY '123456';

实战第4步:
在三个节点上分别安装GR插件,命令如下

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

组件安装完成之后,展示结果:

root@db 13:23:  [(none)]> show plugins;


实战第5步:
在三个节点分别配置各自的集群参数文件,配置完成之后重启数据库
192.168.56.101参数文件配置展示:(剩下两个节点同理)

Group Replication

server_id = 1013306gtid_mode = ONenforce_gtid_consistency = ONmaster_info_repository = TABLErelay_log_info_repository = TABLEbinlog_checksum = NONElog_slave_updates = ONlog_bin = binlogbinlog_format= ROWtransaction_write_set_extraction = XXHASH64loose-group_replication_group_name = '1f2cee29-f9a2-11e7-8cbb-08002783b39d'loose-group_replication_start_on_boot = offloose-group_replication_local_address = 'node2:33061'loose-group_replication_group_seeds ='node2:33061,node3:33062,proxysql:33063'loose-group_replication_bootstrap_group = offloose-group_replication_single_primary_mode=off loose-group_replication_enforce_update_everywhere_checks=true

重点参数详解

MGR一定要开启GTID功能gtid_mode = ON,enforce_gtid_consistency = ON
MGR在当前MySQL版本中,必须要设置binlog_checksum=none,并且binlog_format=row
MGR需要多源复制功能,所以需要将主从库之间的信息记录到表中。设置master_info_repository = TABLErelay_log_info_repository = TABLE
MGR中开启主键信息采集功能:transaction_write_set_extraction= XXHASH64
MGR中把该参数group_replication_single_primary_mode关闭目的是搭建多主模式。如果搭建单主模型,保持默认参数即可。
MGR中需要设置组的名字,该group_replication_group_name是通过select uuid()来生成的。
MGR中本地成员的地址由该参数group_replication_local_address决定,本例中当前节点是node2。后面的端口是每个节点都需要一个独立的tcp端口号,节点之间通过这个端口号进行通信。
MGR中其他成员的地址由这个参数group_replication_group_seeds决定
MGR采取多主模式时,需要让该参数group_replication_single_primary_mode=off(默认是单主模式)。
于此同时需要将该参数group_replication_enforce_update_everywhere_checks=true。目的是为了做多主模式限制检测。
注:加载到参数文件里面,需要在每个参数的前面加loose。
这里再强调一个参数group_replication_auto_increment_increment。该参数代表自增属性,默认值为7。我们要保证每个成员的该值相同,并且建议该参数的设置尽量比组内成员的个数大一些,方便后期集群的扩展。

实战第6步:
在192.168.56.101上启动首个节点的MGR集群服务。命令如下:

CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery'

(MGR需要该异步复制通道,实现新节点加入集群自动从其他节点复制数据的目的,不需要手工指定从哪个节点复制,master_host和master_port信息。都是自动完成)
SET GLOBAL group_replication_bootstrap_group = ON;
(执行初始化操作,只有首个节点需要这一步操作)
START GROUP_REPLICATION; 
启动成功之后,查看节点状态信息。命令如下

SELECT * FROM performance_schema.replication_group_members;

关闭初始化操作 命令如下:

SET GLOBAL group_replication_bootstrap_group = off;

注:replication_group_members表中MEMBER_STATE字段状态为ONLINE,再执行关闭初始化命令。

实战第7步:
在192.168.56.102上面启动第二个节点的mgr集群服务。命令如下

CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';set global group_replication_allow_local_disjoint_gtids_join=ON;  START GROUP_REPLICATION; 

启动成功之后,查看节点状态信息。命令如下

 SELECT * FROM performance_schema.replication_group_members;


实战第8步:
在192.168.56.103上面启动第三个节点的mgr集群服务。命令如下

CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';set global group_replication_allow_local_disjoint_gtids_join=ON;  START GROUP_REPLICATION; 

启动成功之后,查看节点状态信息。命令如下:

SELECT * FROM performance_schema.replication_group_members;

可见启动成功之后,三个成员的状态都是ONLINE,证明已经开始正常工作了。真正可以实现多节点的读写操作了。

以上就是对于MGR多主模式的原理介绍及其搭建过程。我们要有一种学习新知识的能力,多实操,多演练,从中得到其真谛,感受MySQL给我们带来的简单快乐!今后还会多发布更多技术的文章,大家多沟通交流!

作者:张甦

投稿:有投稿、寻求报道意向技术人请联络 wenmin.yin@enmotech.com

更多精彩请关注 “数据和云” 公众号

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

2018DTCC , 数据库大会PPT

2017DTC,2017 DTC 大会 PPT

DBALIFE ,“DBA 的一天”海报

DBA04 ,DBA 手记4 电子书

122ARCH ,Oracle 12.2体系结构图

2017OOW ,Oracle OpenWorld 资料

PRELECTION ,大讲堂讲师课程资料

近期文章

仅仅使用AWR做报告? 性能优化还未入门

实战课堂:一则CPU 100%的故障分析

杨廷琨:如何编写高效SQL(含PPT)

一份高达555页的技术PPT会是什么样子?

大象起舞:用PostgreSQL解海盗分金问题

ProxySQL!像C罗一样的强大

高手过招:用SQL解决环环相扣的刑侦推理问题(罗海雄版本)

老司机带你在MySQL领域“大吉大利,晚上吃鸡”相关推荐

  1. val什么意思vb中的属性值_老司机带你探索Mysql中int(1)、int(10)、int(11)的区别是什么?...

    在上一篇原创文章MySQL一个表的自增id用完了,背井大佬让我用这些姿势再往里插数据,最后留下了一个问题,大家知不知道int(1)和int(11)有什么区别,没有小伙伴互动回答,只有一位老哥让我说一下 ...

  2. 十年建站老司机带你十分钟搭建网站

    十年建站老司机带你十分钟搭建网站 本文概要: 1. 域名 + 域名注册 + 域名备案 + 域名解析绑定 2. 服务器 + 虚拟主机 + windows服务器 + linux服务器 3. CMS建站系统 ...

  3. 短视频+直播源码,直播老司机带你飞

    短视频+直播源码,直播老司机带你飞 脱胎于视频直播的短视频以近乎疯狂的速度攫取着互联网的流量,当抖音.快手的月活已经足够强大,他们又毫不犹豫地切入了直播腹地. 当互联网竞争进入下半场,依靠互联网人口. ...

  4. 老司机带你从源码开始撸Spring生命周期!!!

    导读 Spring在Java Web方面有着举足轻重的地位,spring的源码设计更是被很多开发者所惊叹,巧妙的设计,精细的构思,都注定他的地位.今天陈某大言不惭的带你来从源码角度解析Spring的生 ...

  5. 老司机带你玩转SDL(一)

    老司机带你玩转SDL --第一站"缘由" 啦啦啦,啦啦啦 我是SDL的老司机 大厂小厂曾呆过 今天的内容真正好 带着大家把SDL玩转了 ---- 伴随着类似聂耳<卖报歌> ...

  6. 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透

    前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...

  7. Java用map实现沁园春_QQ飞车:沁园春地图车神跑法,实力老司机带你了解这几个技巧...

    原标题:QQ飞车:沁园春地图车神跑法,实力老司机带你了解这几个技巧 QQ手游飞车上线以来收获了一大堆的迷妹迷弟,小编当然也是其中之一啦,小编在这里给大家带来最新的游戏资讯,和各种模式以及赛道的解说. ...

  8. 金士顿固态硬盘不认盘修复_#原创新人#老司机带你玩转PC,故障之SSD篇 篇一:金士顿 V300 240G SATA3 固态硬盘 丢盘掉速解决记录...

    #原创新人#老司机带你玩转PC,故障之SSD篇 篇一:金士顿 V300 240G SATA3 固态硬盘 丢盘掉速解决记录 2016-10-25 11:14:08 12点赞 72收藏 23评论 小编注: ...

  9. 直播平台怎么搭建,老司机带你了解

    直播平台怎么搭建,老司机带你了解 1.创建前端工程 直播平台怎么搭建毫无疑问,搭建一个项目的框架,那第一步肯定是得创建一个工程啦.cmd命令,输入vue create mylive ,然后一直回车就好 ...

最新文章

  1. 面试 | HashMap 为什么线程不安全?
  2. Kafka-manager启动命令
  3. MVC 3 登录、注销
  4. python 常量_大疆机甲大师Python开发: 两只老虎
  5. How to install Toad on linux with Corssover
  6. java 中random类使用_Java中的天使和魔鬼:Unsafe类
  7. 【DP】饥饿的WZK(jzoj 1998)
  8. (转)Flex4中的皮肤(2):Skin State
  9. 大润发java薪资,大润发edp员工面试:不说位置了,怕备查,哈哈 第一次去是因 - 职朋职业圈...
  10. 古谚、评论与论断、名篇与名言
  11. iOS之线程(二)GCD
  12. java 获取全球国家名称,语言,简称
  13. Linux网络编程-UDP单播服务客户端代码实现
  14. java read dxf xdata_dxf结构解析及读取坐标 | 学步园
  15. 学习OpenCV(4) 基于OpenCV的双目测距程序
  16. linux 源码搭建lnmp_LINUX CENTOS 6.5下源码搭建LNMP
  17. 视频编解码 — SVC可伸缩性
  18. 招商信诺完成15例新冠病毒感染肺炎赔付;东呈减免湖北加盟酒店重大费用 | 美通企业日报...
  19. 给网页设计师和前端开发者看的前端性能优化
  20. python 图灵完备_什么是图灵完备?

热门文章

  1. 程序员项目_您如何让程序员加入您的项目?
  2. vs2015软件系统开源_2015年开源亮点的多样性
  3. cryengine开源了吗_Linux上的CryEngine支持,将开源带入厨房等
  4. 程序| 只要使用这个功能,程序运行速度瞬间提升,高到离谱!
  5. JavaScript 经典设计模式
  6. Bootstrap 警告框的外观
  7. 怎样把坐标系中的某个点在另外一个坐标系中描述出来
  8. 计算机工程硕士论文全套,计算机工程硕士 论文写作注意事项
  9. windows下命令
  10. Java JPA学习与使用小记