如何优雅的添加MGR节点?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 引言 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月份推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务,是MySQL数据库未来发展的一个重要方向。

引言

MySQL Group Replication(简称MGR)是MySQL官方于2016年12月份推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务,是MySQL数据库未来发展的一个重要方向。

场景描述

5d0cdf8af2726cca036447f61f31cadf59604b1c
  • ip地址规划

ea38db203129afe9791045ffa18e992cfde3a3bf

参数设置一个已经运行很久的MGR集群,以single-master模式运行(单主模式),binlog过期策略为7天。

e5d98e0dd0a0ad71315980ad595a94112b4a49a7
  • 因为不可抗力的因素,mgr-node3.up.com 节点永久性的down,并且无法恢复,或者mgr-node3.up.com 宕机超过时间7days, 或需要快速添加节点,那么该如何快速添加或扩容呢?
    需求描述

猜想

1.如果这个问题发生在Percona XtraDB Cluster(pxc)或者Mariadb Galera Cluster,那解决方案就是通过SST(全量)或者IST(增量)来实现,那么MGR是否有相关的解决方案呢?

2.假设MGR也是通过SST或者IST来的解决方案,加入MGR是否可以使用MySQLdump 或者rsync来获得一份全量?

3.假设是通过MySQLdump来实现传递增量。是否可以用xtrabackup来替换呢?

下面根据上述的猜想和假设来求证,如何优雅地添加MGR节点。

验证

猜想一:在MySQL官方文档中没有找到关于SST或IST的描述,既然官方文档没有写,那么在实验环境中能否模拟出来呢?

  • 实验:在mgr-node1.up.com主节点创建一张表
"root@localhost:mysql3306.sock [aa]>show create table aa;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
| aa | CREATE TABLE `aa` (
`id` int(11) NOT NULL,
`name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
"root@localhost:mysql3306.sock [aa]>select * from aa;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | a |
| 3 | a |
| 4 | a |
| 5 | a |
+----+------+
5 rows in set (0.00 sec)

加入新的节点mgr-node4.up.com并初始化,开启现有环境所有节点的general_log,并观察general的输出mgr-node1.up.com 节点。

2017-11-16T15:38:52.818216Z 32 Connect slave@mgr-node4.up.com on using TCP/IP
2017-11-16T15:38:52.829195Z 32 Query SELECT UNIX_TIMESTAMP()
2017-11-16T15:38:52.829836Z 32 Query SELECT @@GLOBAL.SERVER_ID
2017-11-16T15:38:52.835000Z 32 Query SET @master_heartbeat_period= 30000001024
2017-11-16T15:38:52.842449Z 32 Query SET @master_binlog_checksum= @@global.binlog_checksum
2017-11-16T15:38:52.843032Z 32 Query SELECT @master_binlog_checksum
2017-11-16T15:38:52.843355Z 32 Query SELECT @@GLOBAL.GTID_MODE
2017-11-16T15:38:52.843529Z 32 Query SELECT @@GLOBAL.SERVER_UUID
2017-11-16T15:38:52.843726Z 32 Query SET @slave_uuid= '5d03ede3-cae1-11e7-9319-000c299354d5'
2017-11-16T15:38:52.844093Z 32 Binlog Dump GTID Log: '' Pos: 4 GTIDs: ''
2017-11-16T15:39:52.972984Z 33 Connect slave@mgr-node4.up.com on using TCP/IP

从general_log中找到了蛛丝马迹,目前版本的MGR,不支持SST或IST,实现的方式是根据GTID的方式来实现的。

同时在general_log中也发现,目前版本的MGR也不支持MySQLdump或者rsync方式来给新加入的节点传递全量。如果binlog被清空的话 则显示为空,新的节点无法加入集群,但

"root@localhost:mysql3306.sock [aa]>start group_replication; 会提示成功。

正确姿势

1.首先,需要手动在MGR集群中获得一致性备份。

2.初始化新节点,并应用备份。 注意如下操作,否则无法正常启动集群。

"root@localhost:mysql3306.sock [aa]>reset master;
Query OK, 0 rows affected (0.00 sec)

"root@localhost:mysql3306.sock [aa]>SET @@GLOBAL.GTID_PURGED='3db33b36-0e51-409f-a61d-c99756e90155:1-14,
 '> ecf5373e-cad7-11e7-b854-000c293dbc8e:1'
 -> ;
Query OK, 0 rows affected (0.00 sec)

3.安装官方文档正常初始化集群

步骤略

4.验证

"root@localhost:mysql3306.sock [aa]>start group_replication;
Query OK, 0 rows affected (3.16 sec)

"root@localhost:mysql3306.sock [aa]>select * from aa;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | a |
| 3 | a |
| 4 | a |
+----+------+

总结

1.如果需要添加一个节点
添加节点 需要自己手动在MGR集群中备份,MGR集群不存在SST和IST概念,而是完全通过GTID和binlog来实现“追数据”的一个操作。
2.节点宕机
如果MGR集群中某个节点宕机,宕机节点会询问存活集群,是否能补全binlog?如果能补齐,那么就会正常传输,进行追数据 ;如果宕机节点需要的日志不存在了,则该节点无法正常加入到集群环境中。

对于MGR一个建议

在宕机节点加入MGR集群中,如果发现需要的binlog日志不存在,则无法启动集群start group_replication。


原文发布时间为:2017-11-26

本文作者:田帅萌@知数堂

本文来自云栖社区合作伙伴“老叶茶馆”,了解相关信息可以关注“老叶茶馆”微信公众号

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
MGR会创建哪几个专属channel
MGR会创建哪几个专属channel》
41 2
|
1月前
|
Kubernetes 应用服务中间件 Linux
多Master节点的k8s集群部署
多Master节点的k8s集群部署
|
3月前
|
存储 负载均衡 算法
|
3月前
|
SQL 存储 关系型数据库
MGR你掌握了吗
MGR你掌握了吗
33 0
|
存储 负载均衡 算法
|
缓存 Linux
Zookeeper系列(四) ------- 集群
使用 3 个 Zookeeper 应用搭建一个伪集群。
176 0
Zookeeper系列(四) ------- 集群
|
Shell Go 区块链
阿里云多机部署Fabric 1order节点多个peer节点
阿里云多机部署Fabric 1order节点多个peer节点
253 1
|
负载均衡 算法 网络协议
|
应用服务中间件 nginx
集群-------Haproxy(二)
集群-------Haproxy(二)
集群-------Haproxy(二)
|
缓存 监控 关系型数据库
ProxySQL+MGR组复制实现“自动故障恢复“和“读写分离“(一)
ProxySQL+MGR组复制实现“自动故障恢复“和“读写分离“(一)
360 0