天天看点

如何优雅的添加MGR 节点

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

操作系统

MySQL版本

CentOS Linux release 7.3.1611

MySQL5.7.20 二进制

<code>ip</code>地址规划

IP地址

hosts

port

192.168.74.134

mgr-node1.up.com

330623306

192.168.74.135

mgr-node2.up.com

192.168.74.136

mgr-node3.up.com

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

参数设置

Key

Value

enforce_gtid_consistency

ON

master_info_repository

TABLE

relay_log_info_repository

binlog_checksum

NONE

log_slave_updates

binlog_format

ROW

==expire_logs_days==

==7==

需求描述

因为不可抗力的因素 <code>mgr-node3.up.com</code> 节点永久性的down 并且无法恢复,或者<code>mgr-node3.up.com</code> 宕机超过时间7day,

或需要快速添加节点。那么改如何快速添加或扩容呢?

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

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

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

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

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

-实验

在<code>mgr-node1.up.com</code>主节点创建一张表

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

<code>mgr-node1.up.com</code> 节点

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

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

<code>"root@localhost:mysql3306.sock [aa]&gt;start group_replication;</code>

提示成功

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

2.初始化新节点,并应用备份。

注意如下操作 否则无法正常添加到集群

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

步骤略

4.验证

1.如果需要添加一个节点

添加节点 需要自己手动在<code>MGR</code>集群中获得一致性备份,<code>MGR</code>集群不存在<code>SST</code>和<code>IST</code>概念,而是完全通过<code>GTID</code>和<code>binlog</code>来实现“追数据”的一个操作

2.节点宕机

如果<code>MGR</code>集群中某个节点宕机,如果宕机节点会询问存活集群,是否能补全<code>binlog</code> 如果能补齐,那么就会正常传输,进行追数据 。如果宕机节点需要的日志不存在了,则该节点无法正常加入集群环境中。

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

继续阅读