关于mysql:技术分享-MySQL-Group-Replication集群对IP地址的限制导致的一些问题与解决办法

51次阅读

共计 4870 个字符,预计需要花费 13 分钟才能阅读完成。

  • 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/ref…)

[2] Group Replication IP Address Permissions(https://dev.mysql.com/doc/ref…)

Enjoy GreatSQL :)

文章举荐:

GreatSQL MGR FAQ
https://mp.weixin.qq.com/s/J6…

万答 #12,MGR 整个集群挂掉后,如何能力主动选主,不必手动干涉
https://mp.weixin.qq.com/s/07…

『2021 数据技术嘉年华·ON LINE』:《MySQL 高可用架构演进及实际》
https://mp.weixin.qq.com/s/u7…

一条 sql 语句慢在哪之抓包剖析
https://mp.weixin.qq.com/s/AY…

万答 #15,都有哪些状况可能导致 MGR 服务无奈启动
https://mp.weixin.qq.com/s/in…

技术分享 | 为什么 MGR 一致性模式不举荐 AFTER
https://mp.weixin.qq.com/s/rN…

对于 GreatSQL

GreatSQL 是由万里数据库保护的 MySQL 分支,专一于晋升 MGR 可靠性及性能,反对 InnoDB 并行查问个性,是实用于金融级利用的 MySQL 分支版本。

Gitee:
https://gitee.com/GreatSQL/Gr…

GitHub:
https://github.com/GreatSQL/G…

Bilibili:
https://space.bilibili.com/13…

微信 &QQ 群:
可搜寻增加 GreatSQL 社区助手微信好友,发送验证信息“加群”退出 GreatSQL/MGR 交换微信群

QQ 群:533341697
微信小助手:wanlidbc

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

正文完
 0