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

老张superzs来更新博客啦,大家新年好啊,好久没有跟大家见面了。说句走心的话,很想你们!最近因为要出版自己的第一本书《MySQL王者晋级之路》一直在忙于宣传。实在抱歉,没能及时更博。今后还是会多奉献精彩文章!

最近绝地求生这个游戏太火了,当我问我的朋友们你们闲时在干嘛,基本上告诉我的答案都是在"吃鸡"啊!想必很多老铁们也玩,那一定应该知道绝地求生中有把枪叫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特性介绍

  1. 完成了真正的多节点读写的集群方案。
  2. 基于原生复制及paxos协议的组复制技术,并以插件的方式提供,实现了数据的强一致性
  3. 由于是多节点读写,failover切换变得更加简单
  4. 增加删除节点,自动完成同步数据和更新组内信息的操作。扩展性地增强
    虽然在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‘;

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

[email protected] 13:23:  [(none)]> show plugins;


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

Group Replication

server_id = 1013306
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log_bin = binlog
binlog_format= ROW
transaction_write_set_extraction = XXHASH64
loose-group_replication_group_name = ‘1f2cee29-f9a2-11e7-8cbb-08002783b39d‘
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = ‘node2:33061‘
loose-group_replication_group_seeds =‘node2:33061,node3:33062,proxysql:33063‘
loose-group_replication_bootstrap_group = off
loose-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给我们带来的简单快乐!今后还会多发布更多技术的文章,大家多沟通交流!

原文地址:http://blog.51cto.com/sumongodb/2083286

时间: 2024-11-09 00:29:15

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

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

本文概要: 1. 域名 + 域名注册 + 域名备案 + 域名解析绑定 2. 服务器 + 虚拟主机 + windows服务器 + linux服务器 3. CMS建站系统 4. 总结 在如今互联网发展迅速猛进的大环境下,网站已经成为一个企业不可缺少的网络媒介.但网站开发行业鱼龙混杂,质量参差不齐,价格更是跨越区间大.尤其对于那些在建站方面不懂的小白来说,很容易被人坑,所以作为在网站开发行业摸爬滚打多年的草根老司机,通过本文向大家分享建站的经验与心得,避免不必要的弯路和成本损耗. Come on! 小

老司机带你用vagrant打造一站式python开发测试环境

前言 作为一个学习和使用Python的老司机,好像应该经常总结一点东西的,让新司机尽快上路,少走弯路,然后大家一起愉快的玩耍. 今天,咱们就使用vagrant配合xshell打造一站式Python开发测试环境. 目的 让你在Windows下,也能愉快的使用Linux环境调试Python. 适用人群:Python新手和希望在Windows下使用Linux环境调试Python的小伙伴们. 难度:super easy 最终效果:只用一个xshell终端(其他类似的都可以),启动ubuntu虚拟机,py

Jmeter 老司机带你一小时学会Jmeter

Jmeter的安装   官网下载地址:http://jmeter.apache.org/download_jmeter.cgi 作为Java应用,是需要JDK环境的,因此需要下载安装JAVA,并且作必要的的环境变量配置. 一.bin目录 examples: 目录中有CSV样例 jmeter.bat/jmeter.sh  windows的启动文件/linux的启动文件,通过编辑可以修改Jmeter启动时候的JVM参数等等 jmeter.log jmeter运行日志文件 jmeter.propert

老司机带你攻破微信消息防撤回功能

前言: 微信聊天的时候,一疏忽竟然错过了什么,对方撤回了一条消息,一位小妹妹给你发了一张不可描述的照片,下一秒她又后悔选择了撤回.那么到哪去寻找撤回的消息呢?难道我们就不能做点什么? 就在昨天,我的一位好友壳子@ZKeeer 使用itchat库做了小脚本写了一篇文章:初学python--微信防撤回功能改进(一个用处不大的功能) - 知乎专栏,在得到壳子的授权之后,我对他的代码进行了修改,并把代码包装成了可执行的exe文件用来造福更多有需要的朋友们. 这个工具暂时我们教叫它:wMsg wMsg能实

老司机带你探知存储伸缩之道,赶紧上车,来不及了!

王炎,2013年加入腾讯架构平台部,从事分布式存储平台的开发和运营.目前负责冷数据存储的相关研发工作,主要应对云存储数据快速增长场景下,持续完善分级存储系统,优化总体存储成本. 一.概要 腾讯分布式文件存储(TFS)的数据量在短短数年时间里从0增加至EB级别,使用了几十万块磁盘,增长速度非常迅猛.另外,TFS承载的几乎都是互联网在线存储业务,需要在保证业务正常访问的情况下经常性快速扩容.在这种情况下,存储系统的伸缩性显得尤为重要,扩容过程的高效.稳定就成为必须要解决的问题. 下面介绍TFS平台实

初窥wordcloud之老司机带你定制词云图片

抓紧上车啦 #-*-coding:utf-8 -*- from os import path from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator #用来画词云的. import matplotlib.pyplot as plt #用来解析特殊的图片模板,numpy也可以的. from scipy.misc import imread #第一步读你要制作成词云的源文件,少年记得用'r'去读,手抖用了次'w+'结果文件让我清

躺好,老司机带你收割小米机器人

在第二期大米体验师活动期间,我们收到了许多大米云用户精心撰写的稿件. 内容大多是他们在工作.创业中和大米云发生的故事. 虽然没有离奇的事件,没有煽情的文字.但是,每每阅读稿件时,我们都会微微泪目,低头沉吟:原来,我们早已和这些用户并肩同行,即便没有会面,没有交谈,漫漫梦想之路,我们用最好的默契,搀扶着彼此,共同前行. 大米的产品宗旨是为创业者和开发者提供更好的云产品,同时希望有更多优秀体验师与大米一起改变云计算,让云计算在创业者们实现创业理想的过程中助力. 因此, 第三期大米云主机体验师活动如期

老司机带你用MaxCompute和表格存储玩转车联网数据

原文链接 "自动驾驶汽车"在近两年频频出现于各大科技新闻头条,自2012年谷歌获得美国首个自动驾驶汽车许可证以来,国外各大知名汽车厂商如奔驰.沃尔沃.大众.通用.丰田.日产.特斯拉等也纷纷宣布自己的自动驾驶汽车验证开发计划.自动驾驶依托于人工智能技术的发展,而对于一个人工智能平台来说,重要的不光是算法和平台,更重要的是数据!今天我们暂且不聊自动驾驶,我们先聊聊最基础的车联网数据的存储与处理. 初始方案 出于对两客一危监管的需要,车联网很早就开始起步,彼时大家的车联网方案都长这个样子:

老司机带你认识IP一些基础的知识

入门对IP得一个简单认识ip地址 ip address 作用: 标识一个节点的网络地址! 地址组成{点分十进制}:-一共分为32个二位进制-转换为4个十位进制表示,以. 隔开 子网掩码:是用来区分网络位和主机位的 网关 是指一个网络连接到另外一个网络的关口 备用配置1专用的ip地址:169.254.0.1 --169.254.255.254 子网掩码:255.255.0.02用户手工配置:ping命令测试网络连通性ping 127.0.0.1IP分类:A类 1--127 B类 128---191