MySQL MGR集群实践

1、MGR说明

MGR全称MySQL Group Replication(Mysql组复制),是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL 5.7版本开始支持无损半同步复制(lossless semi-syncreplication),从而进一步提示数据复制的强一致性。

2、MySQL 复制机制

  • MySQL异步复制

master事务的提交不需要经过slave的确认,slave是否接收到master的binlog,master并不care。slave接收到master binlog后先写relay log,最后异步地去执行relay log中的sql应用到自身。由于master的提交不需要确保slave relay log是否被正确接受,当slave接受master binlog失败或者relay log应用失败,master无法感知。

  • MySQL半同步复制

基于传统异步存在的缺陷,mysql在5.5版本推出半同步复制。可以说半同步复制是传统异步复制的改进,在master事务的commit之前,必须确保一个slave收到relay log并且响应给master以后,才能进行事务的commit。但是slave对于relay log的应用仍然是异步进行的。

  • MySQL组复制(MGR)

由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N 2 + 1)决议并通过,才能得以提交。如上图所示,由3个节点组成一个复制组,Consensus层为一致性协议层,在事务提交过程中,发生组间通讯,由2个节点决议(certify)通过这个事务,事务才能够最终得以提交并响应。引入组复制,主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。组复制依靠分布式一致性协议(Paxos协议的变体),实现了分布式下数据的最终一致性,提供了真正的数据高可用方案。

3、MySQL组复制的特性和限制

  • 高一致性,基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;

  • 高容错性,只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;

  • 高扩展性,节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;

  • 高灵活性,有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。

4、集群配置实践

这里以ubuntu20mysql 8.0.30为例进行说明

准备三台服务器分别更改hostname

hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

sudo vi /etc/hosts 在每台服务器中添加其他节点

10.0.16.15 master
10.0.16.5 slave1
10.0.4.13 slave2

sudo vi /etc/mysql/my.cnf 配置文件分别修改master、slave1、slave2

[mysqld]
#为了只启用InnoDB,因为这个模式只支持InnoDB。防止后面自己坑自己,这条可以不写
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
# 唯一标识,组内的节点一定要 保持不一样
server_id=9
#开启 Replication with Global Transaction Identifiers模式
gtid_mode=ON
#只允许执行可以使用GTID安全记录的语句
enforce_gtid_consistency=ON
#禁用二进制的写检查
binlog_checksum=NONE
#这个为了防止修改主机名导致 复制出问题,XXXX自己填啥都可以,主机名不改这条可以不写.
#主机名改了,/etc/hosts 你的主机名和ip映射也要改。
relay-log=XXXX-relay-bin
#安装插件,写配置文件里,省的手动命令行忘记了
plugin_load_add='group_replication.so'
#组名,组内节点都一样
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
#是否随服务器启动而自动启动组复制,不建议直接启动,有时数据出问题,需要人为干预后,才能启动
group_replication_start_on_boot=off
#本地MGR的IP地址和端口,host:port,是MGR的端口,不是数据库的端口
group_replication_local_address= "master:33061"
#组内成员
group_replication_group_seeds= "master:33061,slave1:33061,slave2:33061"
#开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启即可
group_replication_bootstrap_group=off
#显示指定使用IP
report-host = master

保存后重启数据库

systemctl mysql.service restart

mysql -uroot -p 连接主节点执行

#关闭主从同步
set sql_log_bin=0;
#创建同步用户
create user 'sroot'@'%' identified by '123123';
grant REPLICATION SLAVE on *.* to 'sroot'@'%';
flush privileges;
#开启主从同步
set sql_log_bin=1;
#连接组集群
CHANGE MASTER TO MASTER_USER='sroot', MASTER_PASSWORD='123123' FOR CHANNEL 'group_replication_recovery';
reset master;
#开启组引导
SET GLOBAL group_replication_bootstrap_group=ON;
start group_replication; 
#关闭组引导
SET GLOBAL group_replication_bootstrap_group=OFF; 
#添加组 白名单
set global group_replication_ip_whitelist = '10.0.16.15,10.0.16.5,10.0.4.13';
#查询组 集群成员
SELECT * FROM performance_schema.replication_group_members;

两个从节点执行

#关闭主从同步
set sql_log_bin=0;
#创建同步用户
create user 'sroot'@'%' identified by '123123';
grant REPLICATION SLAVE on *.* to 'sroot'@'%';
flush privileges;
#开启主从同步
set sql_log_bin=1;
#连接组集群
CHANGE MASTER TO MASTER_USER='sroot', MASTER_PASSWORD='123123' FOR CHANNEL 'group_replication_recovery';
reset master;
start group_replication; 
#添加组 白名单
set global group_replication_ip_whitelist = '10.0.16.15,10.0.16.5,10.0.4.13';
#查询组 集群成员
SELECT * FROM performance_schema.replication_group_members;

最终的集群节点应该是

+---------------------------+--------------------------------------+-------------+-------------+------------
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT |MEMBER_STATE 
+---------------------------+--------------------------------------+-------------+-------------+------------
| group_replication_applier | 34e29dd3-3982-11ed-8c21-525400437289 | slave1      |        3306 | ONLINE 
| group_replication_applier | bbc888df-3981-11ed-b41d-525400cd46a7 | master      |        3306 | ONLINE 
| group_replication_applier | ee4029d2-3adf-11ed-bfeb-5254006888b3 | slave2      |        3306 | ONLINE    
+---------------------------+--------------------------------------+-------------+-------------+------------

单机模式下默认只能在主节点写,从节点读

5、参考资料

https://blog.csdn.net/qq_15328161/article/details/106323494
https://blog.csdn.net/xiaowang_test/article/details/119421992
http://wangshengzhuang.com/2017/05/07/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9B%B8%E5%85%B3/MySQL/Group%20Replication/MySQL%20Group%20Replication%20%E9%83%A8%E7%BD%B2%E4%B8%AD%E9%81%87%E5%88%B0%E7%9A%84%E9%94%99%E8%AF%AF/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容