Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MGR 主备集群实现异步连接故障转移

MGR 主备集群实现异步连接故障转移

作者头像
GreatSQL社区
发布于 2023-08-11 06:55:57
发布于 2023-08-11 06:55:57
42600
代码可运行
举报
运行总次数:0
代码可运行

1.概述

MySQL 8.0.22 开始,支持异步连接故障切换机制,在现有主从复制连接失败后,自动建立到新主的异步复制连接。

MySQL 8.0.23 开始,异步连接故障切换机制还支持组复制拓扑,通过自动监视组成员身份的更改并区分主节点和从节点,在组复制主节点故障选出新主节点后,自动建立到新主的异步复制连接。

MySQL 8.0.26 开始,组复制可以设置组成员在特定情况下采取的操作,比如成员操作 mysql_disable_super_read_only_if_primary 当选择一个新的primary时,使处于单主模式的组保持超级只读模式,这样该组只接受复制的事务,不接受来自客户端的任何直接写操作。

MySQL 8.0.27 开始,异步连接故障切换机制还允许组复制作为副本,组的主节点发生故障时,新的主节点自动重新连接到源端。新增成员操作mysql_start_failover_channels_if_primary,默认情况下,此成员操作是启用的,当启用此成员动作时,在"CHANGE replication SOURCE TO"语句中为复制通道设置SOURCE_CONNECTION_AUTO_FAILOVER=1时,组复制主节点复制通道上的异步连接故障转移将激活。

2.架构

MGR B 作为 MGR A 的备份

本次测试通过搭建2套MGR作为主备集群,进行异步连接故障切换测试:

(1)当主集群MGR A 的主节点发生故障时,备集群MGR B的主节点能够实现异步故障转移,自动连接MGR A 的新主节点,主备集群同步不断开,实现数据正常同步。

(2)当备集群MGR B 的主节点发生故障时,MGR B 的新主节点能够自动启动复制通道,自动连接MGR A 主节点,主备集群同步不断开,实现数据正常同步。

(3)设置MGR B成员行为,使处于单主模式的组 MGR B 保持超级只读模式,这样该组只接受复制的事务,不接受来自客户端的任何直接写。

3.测试

本次测试基于 MySQL 8.0.31,搭建2套MGR集群(单主模式)

3.1 搭建MGR集群

MGR A:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 44921323-bd95-11ed-8db5-00163e01f842 | 172.17.140.201 |        6002 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
| group_replication_applier | 6f904c5c-bd95-11ed-bc79-00163e01f842 | 172.17.140.201 |        6003 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
| group_replication_applier | c9e254d3-bd94-11ed-8ae9-00163e01f842 | 172.17.140.201 |        6001 | ONLINE       | PRIMARY     | 8.0.31         | XCom                       |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.01 sec)

MGR B:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 190f4674-be4a-11ed-9452-00163ea5c598 | 172.17.140.252 |        6005 | ONLINE       | PRIMARY     | 8.0.31         | XCom                       |
| group_replication_applier | 3fa9e064-be4a-11ed-92c7-00163ea5c598 | 172.17.140.252 |        6006 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
| group_replication_applier | 6a9691c6-be4a-11ed-8a32-00163ea5c598 | 172.17.140.252 |        6007 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)

3.2 创建复制用户

在MGR A 的主节点创建用于复制的用户 repl_user

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create user repl_user@'%' identified with mysql_native_password by 'abc123';
grant replication slave on *.* to repl_user@'%';
grant select on performance_schema.* to repl_user@'%';

注意:这里复制用户需要有 performance_schema 库的select权限,主要用于获取MGR A集群成员的状态,如果没有这个权限,将不能进行异步连接故障转移。

3.3停止MGR B的组复制

在MGR B的所有节点停止组复制,可先停止从节点,避免发生节点切换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> stop group_replication;

注意:这里停止组复制是为了下一步创建异步复制通道,如果不停止复制通道,在运行正常的MGR B 的主节点执行创建复制通道的语句,会导致从节点退出组,报如下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2023-03-09T14:38:51.933981+08:00 17887 [ERROR] [MY-013786] [Repl] Unable to set SOURCE_CONNECTION_AUTO_FAILOVER on a non-existent or misconfigured replication channel 'mgra_to_mgrb', please create the channel and rejoin the server to the group.
2023-03-09T14:38:51.934259+08:00 17887 [ERROR] [MY-013487] [Repl] Plugin group_replication reported: 'A message sent through the Group Replication message deliver service was not delivered successfully. The server will now leave the group. Try to add the server back to the group and check if the problem persists, or check previous messages in the log for hints of what could be the problem.'
2023-03-09T14:38:51.934704+08:00 17887 [ERROR] [MY-011712] [Repl] Plugin group_replication reported: 'The server was automatically set into read only mode after an error was detected.'
2023-03-09T14:38:55.166405+08:00 0 [System] [MY-011504] [Repl] Plugin group_replication reported: 'Group membership changed: This member has left the group.'

3.4创建异步复制通道

在MGR B的所有节点创建异步复制通道

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
change replication source to source_host='172.17.140.201',source_port=6001,source_user='repl_user',source_password='abc123',source_auto_position=1,source_connection_auto_failover=1,source_connect_retry=10,source_retry_count=3 for channel 'mgra_to_mgrb';
  • source_host:MGR A 主节点的IP
  • source_port:MGR A 主节点的端口
  • source_connection_auto_failover=1:表示开启自动故障转移功能。
  • source_connect_retry:指定复制副本在与源端的连接超时后重新连接尝试之间的间隔(秒)。
  • source_retry_count:设置复制副本在连接到源超时后进行的最大重新连接尝试次数。

3.5配置复制源

在MGR B 的主节点配置复制源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select asynchronous_connection_failover_add_managed('mgra_to_mgrb','GroupReplication','bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb','172.17.140.201',6001,'',90,50);
+-------------------------------------------------------------------------------------------------------------------------------------------------------+
| asynchronous_connection_failover_add_managed('mgra_to_mgrb','GroupReplication','bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb','172.17.140.201',6001,'',90,50) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------+
| The UDF asynchronous_connection_failover_add_managed() executed successfully.                                                                         |
+-------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
asynchronous_connection_failover_add_managed(channel, managed_type, managed_name, host, port, network_namespace, primary_weight, secondary_weight)

参数:

  • channel:上面创建的复制通道名称;
  • managed_type:管理服务的类型,当前可传入的值必须是GroupReplication;
  • managed_name:管理组的识别符,即group_replication_group_name参数的值;
  • host:源端主机名;
  • port:源端端口号;
  • network_namespace:预留为将来使用,置空;
  • primary_weight:MGR主服务器的权重,值为1到100,值越大,优先级越高;
  • secondary_weight:MGR从服务器的权重,值为1到100,值越大,优先级越高;

3.6查看配置的用于异步连接切换的复制源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from performance_schema.replication_asynchronous_connection_failover;
+--------------+----------------+------+-------------------+--------+--------------------------------------+
| CHANNEL_NAME | HOST           | PORT | NETWORK_NAMESPACE | WEIGHT | MANAGED_NAME                         |
+--------------+----------------+------+-------------------+--------+--------------------------------------+
| mgra_to_mgrb | 172.17.140.201 | 6001 |                   |     50 | bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb |
+--------------+----------------+------+-------------------+--------+--------------------------------------+
1 row in set (0.00 sec)

这里只显示刚才配置的一个节点,启动异步复制通道后就能看到MGR A所有节点。

3.7启动 MGR B 组复制

在MGR B 的主节点重新引导启动组复制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 选一个节点作为引导节点
set global group_replication_bootstrap_group=ON;
start group_replication;
set global group_replication_bootstrap_group=OFF;

# 其余节点启动组复制
start group_replication;

# 查看MGR B集群状态
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 190f4674-be4a-11ed-9452-00163ea5c598 | 172.17.140.252 |        6005 | ONLINE       | PRIMARY     | 8.0.31         | XCom                       |
| group_replication_applier | 3fa9e064-be4a-11ed-92c7-00163ea5c598 | 172.17.140.252 |        6006 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
| group_replication_applier | 6a9691c6-be4a-11ed-8a32-00163ea5c598 | 172.17.140.252 |        6007 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)

3.8启动异步复制通道

在MGR B的主节点启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> start replica for channel 'mgra_to_mgrb';
mysql> show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 172.17.140.201
                  Source_User: repl_user
                  Source_Port: 6001
                Connect_Retry: 10
              Source_Log_File: binlog.000001
          Read_Source_Log_Pos: 2614
               Relay_Log_File: relaylog-mgra_to_mgrb.000002
                Relay_Log_Pos: 2816
        Relay_Source_Log_File: binlog.000001
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB: 

异步复制通道运行正常,至此MGR A 与 MGR B已建立主备关系,MGR A主节点与 MGR B 主节点建立异步复制通道。

3.9查看配置的用于异步连接切换的复制源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from performance_schema.replication_asynchronous_connection_failover;
+--------------+----------------+------+-------------------+--------+--------------------------------------+
| CHANNEL_NAME | HOST           | PORT | NETWORK_NAMESPACE | WEIGHT | MANAGED_NAME                         |
+--------------+----------------+------+-------------------+--------+--------------------------------------+
| mgra_to_mgrb | 172.17.140.201 | 6001 |                   |     90 | bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb |
| mgra_to_mgrb | 172.17.140.201 | 6002 |                   |     50 | bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb |
| mgra_to_mgrb | 172.17.140.201 | 6003 |                   |     50 | bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb |
+--------------+----------------+------+-------------------+--------+--------------------------------------+
3 rows in set (0.01 sec)

可以看到这里显示了 MGR A的所有节点信息,weight 最高的为主节点

3.10故障模拟:主集群MGR A 的主节点发生故障

(1)查看当前MGR A 信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 44921323-bd95-11ed-8db5-00163e01f842 | 172.17.140.201 |        6002 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
| group_replication_applier | 6f904c5c-bd95-11ed-bc79-00163e01f842 | 172.17.140.201 |        6003 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
| group_replication_applier | c9e254d3-bd94-11ed-8ae9-00163e01f842 | 172.17.140.201 |        6001 | ONLINE       | PRIMARY     | 8.0.31         | XCom                       |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)

当前MGR A 主节点为 6001

(2)查看异步复制信息

登录MGR B 主节点查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 172.17.140.201
                  Source_User: repl_user
                  Source_Port: 6001
                Connect_Retry: 10
              Source_Log_File: binlog.000001
          Read_Source_Log_Pos: 2614
               Relay_Log_File: relaylog-mgra_to_mgrb.000002
                Relay_Log_Pos: 2816
        Relay_Source_Log_File: binlog.000001
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB: 

当前MGR B主节点 连接的是 MGR A的主节点 6001

(3)模拟MGR A故障

在MGR A主节点执行切主命令,模拟MGR A主节点故障,将6002设置为新主节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select group_replication_set_as_primary('44921323-bd95-11ed-8db5-00163e01f842');
+--------------------------------------------------------------------------+
| group_replication_set_as_primary('44921323-bd95-11ed-8db5-00163e01f842') |
+--------------------------------------------------------------------------+
| Primary server switched to: 44921323-bd95-11ed-8db5-00163e01f842         |
+--------------------------------------------------------------------------+
1 row in set (0.04 sec)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 44921323-bd95-11ed-8db5-00163e01f842 | 172.17.140.201 |        6002 | ONLINE       | PRIMARY     | 8.0.31         | XCom                       |
| group_replication_applier | 6f904c5c-bd95-11ed-bc79-00163e01f842 | 172.17.140.201 |        6003 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
| group_replication_applier | c9e254d3-bd94-11ed-8ae9-00163e01f842 | 172.17.140.201 |        6001 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
(4)查看异步复制信息

登录MGR B 主节点查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 172.17.140.201
                  Source_User: repl_user
                  Source_Port: 6002
                Connect_Retry: 10
              Source_Log_File: binlog.000001
          Read_Source_Log_Pos: 3343
               Relay_Log_File: relaylog-mgra_to_mgrb.000003
                Relay_Log_Pos: 435
        Relay_Source_Log_File: binlog.000001
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB: 

可以看到MGR B主节点已经自动进行异步连接故障转移,与MGR A新主节点6002建立连接并且连接正常,在此过程中并不需要人为去操作。

3.11故障模拟:备集群MGR B 的主节点发生故障

(1)查看当前MGR B信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 190f4674-be4a-11ed-9452-00163ea5c598 | 172.17.140.252 |        6005 | ONLINE       | PRIMARY     | 8.0.31         | XCom                       |
| group_replication_applier | 3fa9e064-be4a-11ed-92c7-00163ea5c598 | 172.17.140.252 |        6006 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
| group_replication_applier | 6a9691c6-be4a-11ed-8a32-00163ea5c598 | 172.17.140.252 |        6007 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.03 sec)
(2)查看异步复制信息
  • 登录MGR B主节点6005
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 172.17.140.201
                  Source_User: repl_user
                  Source_Port: 6002
                Connect_Retry: 10
              Source_Log_File: binlog.000001
          Read_Source_Log_Pos: 3343
               Relay_Log_File: relaylog-mgra_to_mgrb.000003
                Relay_Log_Pos: 435
        Relay_Source_Log_File: binlog.000001
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB: 

当前MGR B主节点与MGR A新主节点6002 异步复制连接正常

  • 登录MGR B从节点6006
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: 
                  Source_Host: 172.17.140.201
                  Source_User: repl_user
                  Source_Port: 6001
                Connect_Retry: 10
              Source_Log_File: 
          Read_Source_Log_Pos: 4
               Relay_Log_File: relaylog-mgra_to_mgrb.000001
                Relay_Log_Pos: 4
        Relay_Source_Log_File: 
           Replica_IO_Running: No
          Replica_SQL_Running: No
              Replicate_Do_DB: 
(3)模拟MGR B主节点故障

这里不能通过对MGR B执行切主命令模拟故障,会报如下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select group_replication_set_as_primary('3fa9e064-be4a-11ed-92c7-00163ea5c598');
ERROR 3910 (HY000): The function 'group_replication_set_as_primary' failed. There is a slave channel running in the group's current primary member.

我们通过停止组复制让MGR B主节点6005主动退出组,模拟故障

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> stop group_replication;
Query OK, 0 rows affected (11.67 sec)
(4)查看当前MGR B信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 3fa9e064-be4a-11ed-92c7-00163ea5c598 | 172.17.140.252 |        6006 | ONLINE       | PRIMARY     | 8.0.31         | XCom                       |
| group_replication_applier | 6a9691c6-be4a-11ed-8a32-00163ea5c598 | 172.17.140.252 |        6007 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
2 rows in set (0.00 sec)

当前MGR B发生切主,新主节点为6006

(5)查看异步复制信息

登录MGR B新主节点6006

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 172.17.140.201
                  Source_User: repl_user
                  Source_Port: 6002
                Connect_Retry: 10
              Source_Log_File: binlog.000001
          Read_Source_Log_Pos: 3343
               Relay_Log_File: relaylog-mgra_to_mgrb.000002
                Relay_Log_Pos: 395
        Relay_Source_Log_File: binlog.000001
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB: 

可以看到MGR B新主节点已经自动进行异步连接故障转移,与MGR A主节点6002建立连接并且连接正常,在此过程中并不需要人为去操作。

3.12 设置备集群MGR B为超级只读模式

配置MGR B集群所有节点为超级只读模式,避免执行误操作。默认情况下,MGR单主模式下主节点为读写模式,从节点为超级只读模式。

当一个组只是作为另一个组的备份的时候,只需要执行复制事物就可以了,不需要登录执行其他客户端事物,避免造成数据不一致的问题。因此我们可以通过 group_replication_disable_member_action() 函数设置成员操作,将备集群所有节点设置为超级只读模式,即使切主后选出新的主节点也要保持超级只读模式。

(1)查看MGR B当前成员操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from replication_group_member_actions;
+------------------------------------------+------------------------+---------+----------+----------+----------------+
| name                                     | event                  | enabled | type     | priority | error_handling |
+------------------------------------------+------------------------+---------+----------+----------+----------------+
| mysql_disable_super_read_only_if_primary | AFTER_PRIMARY_ELECTION |       1 | INTERNAL |        1 | IGNORE         |
| mysql_start_failover_channels_if_primary | AFTER_PRIMARY_ELECTION |       1 | INTERNAL |       10 | CRITICAL       |
+------------------------------------------+------------------------+---------+----------+----------+----------------+
2 rows in set (0.02 sec)
(2)设置MGR B为超级只读模式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> SELECT group_replication_disable_member_action("mysql_disable_super_read_only_if_primary", "AFTER_PRIMARY_ELECTION");
+---------------------------------------------------------------------------------------------------------------+
| group_replication_disable_member_action("mysql_disable_super_read_only_if_primary", "AFTER_PRIMARY_ELECTION") |
+---------------------------------------------------------------------------------------------------------------+
| OK                                                                                                            |
+---------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)

注意:这里执行完此函数后,不会对当前主节点产生影响,当发生切主选择出新主节点后,会将新主节点设置为超级只读模式。

(3)停止MGR B主节点
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> stop group_replication;
Query OK, 0 rows affected (28.54 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 190f4674-be4a-11ed-9452-00163ea5c598 | 172.17.140.252 |        6005 | ONLINE       | PRIMARY     | 8.0.31         | XCom                       |
| group_replication_applier | 6a9691c6-be4a-11ed-8a32-00163ea5c598 | 172.17.140.252 |        6007 | ONLINE       | SECONDARY   | 8.0.31         | XCom                       |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
2 rows in set (0.01 sec)

MGR B新主节点为 6005

(4)查看MGR B新主节点是否进入超级只读模式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show variables like 'super_read_only';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| super_read_only | ON    |
+-----------------+-------+
1 row in set (0.05 sec)

mysql> create database tt;
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

此时新主节点处于超级只读模式,不允许用户执行操作。

4.总结

通过异步连接故障切换机制,当复制连接出现问题时,不需要人工介入手动去重新建立复制连接,副本会自动进行异步故障转移与新的节点建立连接。

异步复制通道的建立只能在2个MGR集群的主节点上。

5.参考文档

1. https://dev.mysql.com/doc/refman/8.0/en/replication-asynchronous-connection-failover.html

2. https://dev.mysql.com/doc/refman/8.0/en/replication-asynchronous-connection-failover-replica.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GreatSQL社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kafka主题,分区,副本介绍
今天分享一下kafka的主题(topic),分区(partition)和副本(replication),主题是Kafka中很重要的部分,消息的生产和消费都要以主题为基础,一个主题可以对应多个分区,一个分区属于某个主题,一个分区又可以对应多个副本,副本分为leader和follower。
小四的技术之旅
2023/03/14
2.6K0
Kafka主题,分区,副本介绍
《我想进大厂》之kafka夺命连环11问
最近整理了一下文章目录,因为好早之前就有兄弟跟我说之前文章找不到,我也懒得整理,现在好好整了一下,发现有一篇文章写了一半我就放着了,抽空把他刚好补齐了一下,之前放着没写大概是很难想到从哪里凑这么多问题???
艾小仙
2021/11/08
4690
《我想进大厂》之kafka夺命连环11问
Kafka学习笔记之分区Partition和副本Replicator的区别
本篇主要介绍kafka的分区和副本,因为这两者是有些关联的,所以就放在一起来讲了,后面顺便会给出一些对应的配置以及具体的实现代码,以供参考~
Jetpropelledsnake21
2020/12/29
1.2K0
从面试角度一文学完 Kafka
Kafka 是一个优秀的分布式消息中间件,许多系统中都会使用到 Kafka 来做消息通信。对分布式消息系统的了解和使用几乎成为一个后台开发人员必备的技能。
Bug开发工程师
2020/10/26
1.3K0
从面试角度一文学完 Kafka
Kafka作为消息系统的系统补充
Apache Kafka由Scala和Java编写,基于生产者和消费者模型作为开源的分布式发布订阅消息系统。它提供了类似于JMS的特性,但设计上又有很大区别,它不是JMS规范的实现,如Kafka允许多个消费者主动拉取数据,而在JMS中只有点对点模式消费者才会主动拉取数据。
大数据学习与分享
2020/08/10
5370
Kafka作为消息系统的系统补充
一文快速了解Kafka
初学Kafka,肯定会被各种概念搞得很头疼,所以整理下Kafka进阶学习必须要了解的概念。
全菜工程师小辉
2021/05/17
1.1K0
一文快速了解Kafka
图说Kafka基本概念
使用kafka可以对系统解耦、流量削峰、缓冲,可以实现系统间的异步通信等。在活动追踪、消息传递、度量指标、日志记录和流式处理等场景中非常适合使用kafka。这篇文章主要介绍下kafka中的基本概念。
valineliu
2022/09/01
1.8K0
图说Kafka基本概念
Kafka实践与原理
其中Zookeeper是Kafka用来负责元数据的管理、控制器的选举。Producer将消息发送到Broker,Broker负责将消息存储到磁盘中,而Consumer负责从Broker订阅并消费消息。
mikelLam
2022/10/31
3850
Kafka实践与原理
Kafka - 分区中各种偏移量的说明
Kafka是一个高性能、高吞吐量的分布式消息系统,被广泛应用于大数据领域。在Kafka中,分区是一个重要的概念,它可以将数据分发到不同的节点上,以实现负载均衡和高可用性。在分区中,有一些重要的偏移量指标,包括AR、ISR、OSR、HW和LEO。下面我们来详细解释一下这些指标的含义和作用。
小小工匠
2023/07/24
1.2K0
Kafka - 分区中各种偏移量的说明
六问 Kafka 为啥那么牛!
Kafka架构(下方该是Consumer) Kafka 是一个分布式的基于发布/订阅模式的消息队列,依靠其强悍的吞吐量,Kafka 主要应用于大数据实时处理领域。在数据采集、传输、存储的过程中发挥着举足轻重的作用。
main方法
2021/07/19
4930
六问 Kafka 为啥那么牛!
Kafka是如何保证高性能和高吞吐量的?
最早设计的目的是作为LinkedIn的活动流和运营数据的处理管道。这些数据主要是用来对用户做用户画像分析以及服务器性能数据的一些监控。
IT大咖说
2019/11/14
2.9K0
Kafka核心原理的秘密,藏在这19张图里!
导语 | 本文推选自腾讯云开发者社区-【技思广益 · 腾讯技术人原创集】专栏。该专栏是腾讯云开发者社区为腾讯技术人与广泛开发者打造的分享交流窗口。栏目邀约腾讯技术人分享原创的技术积淀,与广泛开发者互启迪共成长。本文作者是腾讯后端开发工程师刘国强。 使用kafka可以对系统解耦、流量削峰、缓冲,可以实现系统间的异步通信等。在活动追踪、消息传递、度量指标、日志记录和流式处理等场景中非常适合使用kafka。这篇文章主要介绍下kafka中的基本概念。 kafka的整体结构 下图展示了很多关于kafka的细节,暂时
腾讯云开发者
2022/09/27
4060
Kafka核心原理的秘密,藏在这19张图里!
Kafka 3.0新特性全面曝光,真香!
导语 | kafka3.0的版本已经试推行去zk的kafka架构了,如果去掉了zk,那么在kafka新的版本当中使用什么技术来代替了zk的位置呢,接下来我们一起来一探究竟,了解kafka的内置共识机制和raft算法。 一、Kafka简介 Kafka是一款开源的消息引擎系统。一个典型的Kafka体系架构包括若干Producer、若干Broker、若干Consumer,以及一个ZooKeeper集群,如上图所示。其中ZooKeeper是Kafka用来负责集群元数据的管理、控制器的选举等操作的。Producer将
腾讯云开发者
2022/04/15
1.2K0
Kafka 3.0新特性全面曝光,真香!
Kafka 原理以及分区分配策略剖析
Apache Kafka 是一个分布式的流处理平台(分布式的基于发布/订阅模式的消息队列【Message Queue】)。
Spark学习技巧
2021/08/24
4110
Kafka 原理以及分区分配策略剖析
Apache Kafka 是一个分布式的流处理平台(分布式的基于发布/订阅模式的消息队列【Message Queue】)。
JAVA葵花宝典
2021/09/29
3.1K0
Kafka 原理以及分区分配策略剖析
都说Kafka牛3万字带你全面掌握kafka
系统间的耦合高怎么办,我们如何不让一个服务过于庞大,一个好的方式就是依据具体的功能模块拆分服务,降低服务的耦合度,服务间的交互可以通过消息传递数据来实现,除此之外Kafka非常适合在线日志收集等高吞吐场景,kafka有更好的吞吐量,内置分区,副本和故障转移,这有利于处理大规模的消息,所以kafka被各大公司广泛运用于消息队列的构建:
大数据老哥
2021/03/05
1.3K0
都说Kafka牛3万字带你全面掌握kafka
从面试角度详解Kafka
Kafka 是一个优秀的分布式消息中间件,许多系统中都会使用到 Kafka 来做消息通信。对分布式消息系统的了解和使用几乎成为一个开发人员必备的技能。
大数据真好玩
2021/07/12
9660
kafka之消息文件存储机制和数据同步(三)
前面我们知道了一个 topic 的多个 partition 在物理磁盘上的保存路径,那么我们再来分析日志的存储方式。通过如下命令找到对应 partition 下的日志内容
周杰伦本人
2022/10/25
7050
kafka之消息文件存储机制和数据同步(三)
kafka第二次课!!!
1,课程回顾 2,本章重点 kafka的整体工作流程 消息生产者写入消息过程 消息消费者消费要点 kafka的Java api
张哥编程
2024/12/13
970
2万长文搞懂Kafka
生产者:Producer 往Kafka集群生成数据消费者:Consumer 往Kafka里面去获取数据,处理数据、消费数据Kafka的数据是由消费者自己去拉去Kafka里面的数据主题:topic分区:partition 默认一个topic有一个分区(partition),自己可设置多个分区(分区分散存储在服务器不同节点上)
用户4283147
2022/10/27
4710
2万长文搞懂Kafka
相关推荐
Kafka主题,分区,副本介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验