• GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。

1. 遇到问题

测试人员小玲准备在docker环境中部署MGR集群进行一些测试,她有三个容器,容器IP分别是:

172.33.0.2
172.33.0.3
172.33.0.4

每个容器中分别安装一个MySQL实例,每个实例的group_replication_local_address和group_replication_group_seeds两个配置项分别是:

group_replication_local_address= "172.33.0.2:33061"
group_replication_group_seeds= "172.33.0.2:33061,172.33.0.3:33061,172.33.0.4:33061"
group_replication_local_address= "172.33.0.3:33061"
group_replication_group_seeds= "172.33.0.2:33061,172.33.0.3:33061,172.33.0.4:33061"
group_replication_local_address= "172.33.0.4:33061"
group_replication_group_seeds= "172.33.0.2:33061,172.33.0.3:33061,172.33.0.4:33061"

在经过了一番基础的准备操作之后,小玲在172.33.0.2上执行START GROUP_REPLICATION,结果遇到了不应该出现的错误信息:

mysql> START GROUP_REPLICATION;
ERROR 3092 (HY000): The server is not configured properly to be
an active member of the group. Please see more details on error log.

2. 问题排查

观察错误日志:

2021-07-13T03:11:42.645537Z 0 [Warning] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Connection attempt from IP address ::ffff:172.33.0.2 refused. Address is not in the IP allowlist.'
2021-07-13T03:11:42.645622Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error connecting to the local group communication engine instance.'

根据错误日志中的信息,我们大概可以知道报错的直接原因是172.33.0.2这个IP不在白名单中。

这就有些奇怪了,因为默认情况下MySQL的相关配置选项是这样的:

mysql> show variables like "%group_replication_ip%";
+--------------------------------+-----------+
| Variable_name | Value |
+--------------------------------+-----------+
| group_replication_ip_allowlist | AUTOMATIC |
| group_replication_ip_whitelist | AUTOMATIC |
+--------------------------------+-----------+
2 rows in set (0.00 sec)

参数 group_replication_ip_allowlist和 group_replication_ip_whitelist是同一个参数,只是由于美国的一些政治正确问题,white和black这样的单词都要从MySQL的代码中逐渐移除,不过本文中笔者依旧按照中文的习惯,称其为“白名单”。

这个参数是用来控制哪些host可以加入到当前这个MGR的group中,尽管你可以提前设置,但它只有在执行了START GROUP_REPLICATION且Group Communication System(GCS)变得可用时才会进行验证。默认情况下其值为AUTOMATIC,能够自动将localhost以及当前主机在各个私有子网中的IP地址添加到白名单中。

By default, this system variable is set to AUTOMATIC, which permits connections from private subnetworks active on the host. The group communication engine for Group Replication (XCom) automatically scans active interfaces on the host, and identifies those with addresses on private subnetworks. These addresses and the localhost IP address for IPv4 and (from MySQL 8.0.14) IPv6 are used to create the Group Replication allowlist.

根据这样的描述,172.33.0.2这个IP是应该在白名单中的,不应该出现上面遇到的报错信息。但在官方文档中,在上面这段话后面,紧跟着另一章节的连接,具体说明了一些限制。

根据Group Replication IP Address Permissions中的描述,MGR能够自动识别并添加到白名单的IP地址范围如下。

IPv4 (as defined in RFC 1918)
10/8 prefix (10.0.0.0 - 10.255.255.255) - Class A
172.16/12 prefix (172.16.0.0 - 172.31.255.255) - Class B
192.168/16 prefix (192.168.0.0 - 192.168.255.255) - Class C IPv6 (as defined in RFC 4193 and RFC 5156)
fc00:/7 prefix - unique-local addresses
fe80::/10 prefix - link-local unicast addresses 127.0.0.1 - localhost for IPv4
::1 - localhost for IPv6

可见172.33.0.2恰好超出了Class B的范围,报错信息的确符合文档的描述,只是对用户的确不太友好,如果是第一次遇到会有些摸不到头脑。

3. 问题解决

每个节点执行:

set global group_replication_ip_allowlist="172.33.0.2,172.33.0.3,172.33.0.4";

选择一个节点执行:

SET GLOBAL group_replication_bootstrap_group=OFF;
START GROUP_REPLICATION;

其他节点执行:

START GROUP_REPLICATION;

执行结果如下:

mysql> START GROUP_REPLICATION;

Query OK, 0 rows affected (2.70 sec)

mysql>
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 2a3d09a5-e386-11eb-8323-0242ac210003 | 172.33.0.3 | 3306 | ONLINE | PRIMARY | 8.0.25 |
| group_replication_applier | 58a2e9d0-e386-11eb-aff3-0242ac210002 | 172.33.0.2 | 3306 | ONLINE | PRIMARY | 8.0.25 |
| group_replication_applier | 5dbb146a-e386-11eb-8a06-0242ac210004 | 172.33.0.4 | 3306 | ONLINE | PRIMARY | 8.0.25 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)

4. 问题的延伸

group_replication_ip_allowlist这个参数是可以动态设置,并且会立刻生效,所以向一个MGR复制组中增加新的节点时,只需要加新节点的地址加入到这个参数中即可。

参考文章:

[1] group_replication_ip_allowlist(https://dev.mysql.com/doc/refman/8.0/en/group-replication-options.html#sysvar_group_replication_ip_allowlist)

[2] Group Replication IP Address Permissions(https://dev.mysql.com/doc/refman/8.0/en/group-replication-ip-address-permissions.html)

Enjoy GreatSQL

文章推荐:

GreatSQL MGR FAQ

https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA

万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预

https://mp.weixin.qq.com/s/07o1poO44zwQIvaJNKEoPA

『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》

https://mp.weixin.qq.com/s/u7k99y6i7riq7ScYs7ySnA

一条sql语句慢在哪之抓包分析

https://mp.weixin.qq.com/s/AYibbzl860D90rOeyjB6IQ

万答#15,都有哪些情况可能导致MGR服务无法启动

https://mp.weixin.qq.com/s/inSGpd0Q_XIl2Mb-VsvNsA

技术分享 | 为什么MGR一致性模式不推荐AFTER

https://mp.weixin.qq.com/s/rNeq479RNsklY1BlfKOsYg

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee:

https://gitee.com/GreatSQL/GreatSQL

GitHub:

https://github.com/GreatSQL/GreatSQL

Bilibili:

https://space.bilibili.com/1363850082/video

微信&QQ群:

可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群

QQ群:533341697

微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 发布!

技术分享 | MySQL Group Replication集群对IP地址的限制导致的一些问题与解决办法的更多相关文章

  1. 全网最详细的Hadoop HA集群启动后,两个namenode都是active的解决办法(图文详解)

    不多说,直接上干货! 这个问题,跟 全网最详细的Hadoop HA集群启动后,两个namenode都是standby的解决办法(图文详解) 是大同小异. 欢迎大家,加入我的微信公众号:大数据躺过的坑  ...

  2. MySQL Group Replication-MGR集群

    简介 MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本. 是MySQL官方 ...

  3. MySQL Group Replication-MGR集群简介

    简介 MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本. 是MySQL官方 ...

  4. 全网最详细的Hadoop HA集群启动后,两个namenode都是standby的解决办法(图文详解)

    不多说,直接上干货! 解决办法 因为,如下,我的Hadoop HA集群. 1.首先在hdfs-site.xml中添加下面的参数,该参数的值默认为false: <property> < ...

  5. 用VMWare搭建服务器集群不能上外网的三种模式下对应解决办法

    前言 决心要花费宝贵时间写下这篇心得,是因为从昨天晚上到今天上午被这个VMWare模拟搭建的服务器集群不能上外网的问题搞得很心烦,最后决定跟它杠上了!上午还通过远程连接得到了“空白”同学的帮助,在此表 ...

  6. linux中搭建solr集群出现org.apache.catalina.LifecycleException: Failed to initialize component ,解决办法

    07-Jan-2018 20:19:21.489 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to i ...

  7. MySQL Group Replication 技术点

    mysql group replication,组复制,提供了多写(multi-master update)的特性,增强了原有的mysql的高可用架构.mysql group replication基 ...

  8. Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结

    之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...

  9. MySQL group replication介绍

    “MySQL group replication” group replication是MySQL官方开发的一个开源插件,是实现MySQL高可用集群的一个工具.第一个GA版本正式发布于MySQL5.7 ...

随机推荐

  1. 好客租房16-jsx中的列表渲染

    如果要渲染一组数组 应该使用数组的map方法 注意:渲染列表时候添加key属性 key属性的值要保持唯一 原则:map()遍历谁 就给谁添加key属性 尽量避免索引号作为key //导入react i ...

  2. 127_Power Pivot&Power BI DAX计算订单商品在库时间(延伸订单仓储费用)

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前面已经写过一个先进先出的库龄案例,在业务发生又有这样一个需求:先进先出前提,需要按照订单计算每个商品在库时间, ...

  3. 使用 oh-my-posh 美化 windows terminal,让其接近oh-my-zsh

    本文旨在快速让你进行美化,少踩一些坑,原文出自我的博客:prettier-windows-terminal-with-oh-my-posh 为了同 iterm2 下的 oh-my-zsh 保持基本一致 ...

  4. 《HALCON数字图像处理》第六章笔记

    目录 第六章 图像增强 图像增强的概念和分类 灰度变换 直方图处理 图像的平滑 图像的锐化 图像的彩色增强 我在Gitee上建了个仓库,会将学习书本的时候打的一些代码上传上去,笔记中所有代码都在仓库里 ...

  5. .NET C#基础(3):事件 - 不便处理的事就委托出去

    0. 文章目的   本文面向有一定.NET C#基础知识的学习者,介绍.NET中事件的相关概念.基本知识及其使用方法 1. 阅读基础   理解C#基本语法(方法的声明.方法的调用.类的定义) 2. 从 ...

  6. linux运维基础1

    内容概要 运维简介 运维岗位职责 服务器 服务器硬件介绍 磁盘阵列 虚拟化软件及环境 虚拟化软件 安装操作系统 Vmware虚拟机安装及相关配置流程 内容详情 运维简介 运维岗位职责 核心:运行维护应 ...

  7. 记录bug的贴子

    这个贴子用来记录一些,平时关注新闻,暴露出来的bug,引以为戒. 2019/01/21 - 拼多多出现大量100元无门槛券 关键词: 风险控制:羊毛党: https://www.zhihu.com/q ...

  8. mysql复制表的两种方式

    mysql复制表的两种方式. 第一.只复制表结构到新表 create table 新表 select * from 旧表 where 1=2 或者 create table 新表 like 旧表 第二 ...

  9. Linux字符集和编码

    计算机内部,所有信息最终都是一个二进制值形式存放 字符集 字符集:charset是character set的简写,即二进制和字符的对应关系,不关注最终的存储形式 编码 字符集编码:encoding是 ...

  10. Gitlab分支策略建议指南

    本文分支策略为总结各中小型企业常见做法(仅代表个人观点),在下才疏学浅,文章如有缺漏或不当之处,望各位帮忙指正.写此文也十分希望能起抛砖引玉之效. 据我所知,目前大部分无论是按瀑布/敏捷开发模型,就算 ...