我即将开始使用 MySQL 组复制测试主主设置。我已经设置了 2 台机器(到目前为止),可能还会设置第三台。它们都有 2 个网卡,一个用于应用程序访问,另一个只有 LAN IP 用于节点间通信。
我在一些文档中看到提到使用两个 NIC,一个用于节点之间的通信,另一个用于与应用程序通信。我现在正在编辑 /etc/mysql/my.cnf 文件。我需要了解这些设置:
假设我的应用程序 nic 的 IP 为 10.3.0.4 并且 LAN 唯一的 NIC 有 10.3.1.4 在机器 2 上进行相同的设置。
bind-address = "10.3.0.4"
report_host = "10.3.??" ??
loose-group_replication_local_address = "10.3.1.4:33061"
报告主机属于哪个 IP?我了解到 loose-group_replication_local_address 本质上是另一个绑定地址,但用于节点之间的通信,但我找不到任何多网卡设置的示例,这些设置也适用于这些设置。所有包含这些行的教程都显示由于只有单个网卡而放置相同的 IP。
环境:Azure 中的 Ubuntu 16.04
我正在遵循本指南进行安装: https://www.digitalocean.com/community/tutorials/how-to-configure-mysql-group-replication-on-ubuntu-16-04
有关双网卡的信息来自大约 6 个不同页面的片段。
编辑:@roothann 向我解释了报告主机应该做什么。现在我遇到了一个新问题。mysql 重新启动后,端口 33061 不会显示在 netstat 中,并且我在日志中收到此错误:“连接到服务器 10.3.1.5 时获取对等名称失败,错误 111 - 连接被拒绝。[GCS] 在本地端口 33061 上打开与 10.3.1.5:33061 的连接时出错。错误 = 0”有什么想法吗?我已经添加了 group_replication 插件,但是当我执行以下命令时:mysql> START GROUP_REPLICATION; ERROR 3096 (HY000): START GROUP_REPLICATION 命令失败,因为初始化组通信层时出现错误。
这就是让我检查日志并查看 netstat 的原因。
另一项编辑:如下所述,出于某种原因,安全安装命令没有删除仅在本地进行连接的指令。这已修复。新问题是数据未同步。第二个节点退出了组,因为它无法完成恢复。
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | f0bcfc98-4255-11e8-b39f-000d3a1db637 | 10.3.1.4 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
因此,由于某种原因,复制尝试在 LAN 接口上进行,但在常规 mysql 端口而不是 33061 上进行。我尝试修复此问题,但得到了以下信息:
mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PORT=33061, MASTER_PASSWORD='the password' FOR CHANNEL 'group_replication_recovery';
ERROR 3139 (HY000): CHANGE MASTER with the given parameters cannot be performed on channel 'group_replication_recovery'.
编辑于 5 月 17 日:我从头开始重建了集群,这次有 3 台机器。问题依然存在。第一个节点启动了。另外两个节点也启动了,但只显示正在恢复,然后从集群中删除。
在第一个节点上,我在日志中得到以下信息:
2018-05-17T14:37:21.859153Z 27 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='', master_port= 3306, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='', master_port= 3306, master_log_file='', master_log_pos= 4, master_bind=''.
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 38d4aa76-592f-11e8-814a-000d3a60e580 | 10.7.1.11 | 33061 | RECOVERING | PRIMARY | 8.0.11 |
| group_replication_applier | 3dbbb30f-592f-11e8-8fc7-000d3a603364 | 10.7.1.12 | 33061 | RECOVERING | PRIMARY | 8.0.11 |
| group_replication_applier | b0ff0148-592e-11e8-aa03-000d3a60e4cc | 10.7.1.10 | 33061 | ONLINE | PRIMARY | 8.0.11 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)
我从其他一台服务器的日志中获取此信息:
2018-05-17T14:57:17.970789Z 18 [ERROR] [MY-011583] [Repl] Plugin group_replication reported: 'For details please check performance_schema.replication_connection_status table and error log messages of Slave I/O for channel group_replication_recovery.'
2018-05-17T14:58:18.023898Z 18 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='10.7.1.10', master_port= 33061, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='10.7.1.10', master_port= 33061, master_log_file='', master_log_pos= 4, master_bind=''.
我注意到在第一个节点上,master_host 变量为空,而在第二个节点上,它填充了主节点的 IP。现在,既然它们都应该是主节点,那么主节点是否也应该有一些东西?
提前致谢!