zoukankan      html  css  js  c++  java
  • 04-MySQL基于MGR的高可用架构的搭建

    一、MGR架构的介绍

    1、简介

      MGR(MySQL Group Replication)是MySQL5.7.17版本引进来的一个数据库高可用架构,解决了传统异步复制和半同步复制的缺陷(主从数据一致性的问题),MGR依靠分布式一致性协议PAXOS,实现了主从数据库的一致性。

      PAXOS协议:是一种基于消息传递的一致性算法。MGR中由若干个节点共同组成一个组复制,一个事物的提交,必须经过组内大多数节点(N/2 + 1)投票并通过,才能提交。

    2、MGR特点

    * 高一致性:基于分布式PAXOS协议实现组复制,保证数据的一致性;

    * 高容错性:故障自动检测机制,只要有半数节点存活MGR就可以继续工作;

    * 高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致;

    * 高灵活性:提供单主模式和多主模式。单主模式在主库宕机后能够自动选主(根据MEMBER_ID的排序情况,最小的升级为主库),所有写操作都在主库上进行,多主模式支持多节点写入;

    3、MGR故障检测机制

      MGR中有一个故障检测机制,会提供某节点可能死掉的信息,某个server无响应时触发猜测,组内其余成员进行协调以排除该节点,与它隔离开来,该节点无法同步其他节点传送过来的binlog,也无法执行任何本地事物。

    4、搭建MGR的前提条件

    * 存储引擎必须是Innodb(支持事物处理),并且每张表一定要有主键,用于解决write冲突;

    * 必须打开GTID特性,binlog日志格式必须设置为ROW;

    * 目前一个MGR集群组最多支持9个节点;

    * 多主模式不支持SERIALIZABLE事物隔离级别;

    二、MGR的搭建

    1、IP配置

     机器名称   IP 服务器角色 备注
    node1 192.168.232.42 MGR节点1 操作系统redhat7.5;MySQL5.7.22
    node2 192.168.232.43 MGR节点2 操作系统redhat7.5;MySQL5.7.22
    node3 192.168.232.44 MGR节点3 操作系统redhat7.5;MySQL5.7.22

     2、配置IP映射

    在各节点的/etc/hosts文件中配置如下内容:

    192.168.232.42 node1
    192.168.232.43 node2
    192.168.232.44 node3

    3、所有节点禁用SELinux

    4、配置3个节点的my.cnf文件 

    [mysqld]
    datadir=/mysql/mysql5.7/data
    basedir=/mysql/mysql5.7
    #socket=/var/lib/mysql/mysql.sock
    user=mysql
    port=3308
    character-set-server=utf8
    # skip-grant-tables
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # Settings user and group are ignored when systemd is used.
    # If you need to run mysqld under a different user or group,
    # customize your systemd unit file for mariadb according to the
    # instructions in http://fedoraproject.org/wiki/Systemd
    
    
    server_id=1
    gtid_mode=ON
    enforce_gtid_consistency=ON
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    binlog_checksum=NONE
    log_slave_updates=ON
    log_bin=mysql-bin
    binlog_format=ROW   # 这里binlog的模式必须是ROW
    transaction_write_set_extraction=XXHASH64       # 记录事物的算法
    loose-group_replication_group_name="b6cf6565-c415-4c4d-a4f0-49a596f98fca"  # group的名称,必须是一个有效的uuid,用来区分不同的group
    loose-group_replication_start_on_boot=off    # 是否在启动MySQL时启动组复制,这里设置不自动启动
    loose-group_replication_local_address="192.168.232.42:33061"   # 本地IP地址字符串,用于组内节点之间的连接
    loose-group_replication_group-seeds="192.168.232.42:33061,192.168.232.43:33062,192.168.232.44:33063"  # 种子服务器的配置
    loose-group_relication_bootstrap_group=off   # 配置是否自动引导组,第一次搭建MGR的时候使用
    loose-group_replication_single_primary_mode=TRUE  # 是否启动单主模式
    loose-group_replication_enforce_update_everywhere_checks=FALSE  # 是否启动多主模式
    
    
    
    [mysqld_safe]
    log-error=/mysql/mysql5.7/log/mysqld.log
    #pid-file=/mysql/mysql5.7/run/mysqld.pid

    注:

    * 变量使用loose-前缀表示Server启用时没有加载复制插件也能继续启动

    * 三个节点的loose-group_replication_group_name 必须一样,要是有多个group的话,每个group应该不同

    三个节点my.cnf配置如下:

     

     

     5、安装组复制的引擎

    命令:

    INSTALL PLUGIN group_replication SONAME 'group_replication.so';

    查看是否安装成功:

    show plugins;

     注:三个节点都安装该插件。

     6、创建同步的账号

    命令:

    mysql> grant replication slave on *.* to 'repl_user1'@'192.168.232.%' identified by '$a123456';
    Query OK, 0 rows affected, 1 warning (0.05 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> select user,host from user;
    +---------------+---------------+
    | user          | host          |
    +---------------+---------------+
    | root          | %             |
    | repl_user1    | 192.168.232.% |
    | mysql.session | localhost     |
    | mysql.sys     | localhost     |
    +---------------+---------------+
    4 rows in set (0.01 sec)
    
    mysql> 

     注:因为每个节点都有可能成为master,所以3个节点上都需要创建同步的用户,我这里host配置为192.168.232.%意思是192.168.232.网段可以使用该用户。

    三、搭建MGR的单主模式

    1、先把node1加入group组

    注:

    * 由于是第一个加入Group,需要启动group_relication_bootstrap_group,加入成功后再关闭就行;

    * 一个组Group是在节点参数为group_replication_bootstrap_group为on的条件下执行start group_replication产生的,如果要加入现有的Group,节点需要确保group_replication_bootstrap_group为off;

    (1)开启group_relication_bootstrap_group

    mysql> show global variables like '%group_replication_bootstrap_group%';
    +-----------------------------------+-------+
    | Variable_name                     | Value |
    +-----------------------------------+-------+
    | group_replication_bootstrap_group | OFF   |
    +-----------------------------------+-------+
    1 row in set (0.00 sec)
    
    mysql> set global group_replication_bootstrap_group=on;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show global variables like '%group_replication_bootstrap_group%';
    +-----------------------------------+-------+
    | Variable_name                     | Value |
    +-----------------------------------+-------+
    | group_replication_bootstrap_group | ON    |
    +-----------------------------------+-------+
    1 row in set (0.00 sec)
    
    mysql> 

     (2)配置MGR

    mysql> CHANGE MASTER TO MASTER_USER='repl_user1', MASTER_PASSWORD='$a123456' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (0.46 sec)
    
    mysql> 

     (3)启动MGR

    mysql> start group_replication;
    Query OK, 0 rows affected (2.33 sec)
    
    mysql> select * from performance_schema.replication_group_members ;
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | group_replication_applier | 9b014152-37a6-11eb-89b5-000c29cddf72 | node1       |        3308 | ONLINE       |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    1 row in set (0.00 sec)
    
    mysql> 

     (4)关闭 group_replication_bootstrap_group

    mysql> show global variables like '%group_replication_bootstrap_group%';
    +-----------------------------------+-------+
    | Variable_name                     | Value |
    +-----------------------------------+-------+
    | group_replication_bootstrap_group | ON    |
    +-----------------------------------+-------+
    1 row in set (0.00 sec)
    
    mysql> set global group_replication_bootstrap_group=off;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show global variables like '%group_replication_bootstrap_group%';
    +-----------------------------------+-------+
    | Variable_name                     | Value |
    +-----------------------------------+-------+
    | group_replication_bootstrap_group | OFF   |
    +-----------------------------------+-------+
    1 row in set (0.01 sec)
    
    mysql> 

     注:启动成功后,发现data目录下面多了几个_applier和_recovery文件

     

     * _applier:保存同个组内其他Server的binlog信息;

    * _recovery:用来存储需要恢复的binlog信息,新加入的组成员是通过group_replication_recovery来恢复数据的,所需要的binlog日志都存放在_recovery系统文件中;

    2、在node1上造数据

    mysql> create database customer default character set utf8;
    Query OK, 1 row affected (0.01 sec)
    
    mysql> use customer;
    Database changed
    mysql> create table person (id int(10) primary key auto_increment not null,username varchar(20),age int(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> insert into person(username,age)  values('jack',19);      
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into person(username,age)  values('rose',20);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from person;
    +----+----------+------+
    | id | username | age  |
    +----+----------+------+
    |  1 | jack     |   19 |
    |  2 | rose     |   20 |
    +----+----------+------+
    2 rows in set (0.00 sec)
    
    mysql> 

    3、把node2加入到mgr组中

    mysql> CHANGE MASTER TO MASTER_USER='repl_user1', MASTER_PASSWORD='$a123456' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (0.07 sec)
    
    mysql> start group_replication;
    Query OK, 0 rows affected (4.88 sec)
    
    mysql> 

    加入的时候,遇到的错误参考文章最后的相关错误

    在node1上查看组内有几个节点:

    mysql> select * from performance_schema.replication_group_members ;
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | group_replication_applier | 66720a6a-37a8-11eb-befc-000c29c918c1 | node2       |        3308 | RECOVERING   |
    | group_replication_applier | 9b014152-37a6-11eb-89b5-000c29cddf72 | node1       |        3308 | ONLINE       |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    2 rows in set (0.00 sec)
    
    mysql> 

    4、把node3加入到MGR组中

    mysql> CHANGE MASTER TO MASTER_USER='repl_user1', MASTER_PASSWORD='$a123456' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (0.01 sec)
    
    mysql> start group_replication;
    Query OK, 0 rows affected (3.39 sec)
    
    mysql> 

    在node1上查看组内有几个节点:

    mysql> select * from performance_schema.replication_group_members ;
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | group_replication_applier | 02c2cfed-37a9-11eb-b238-000c2927b3e8 | node3       |        3308 | ONLINE       |
    | group_replication_applier | 66720a6a-37a8-11eb-befc-000c29c918c1 | node2       |        3308 | ONLINE       |
    | group_replication_applier | 9b014152-37a6-11eb-89b5-000c29cddf72 | node1       |        3308 | ONLINE       |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    3 rows in set (0.00 sec)
    
    mysql> 

     至此,3个节点的单主模式已经搭建好了,node1是master节点,提供读写,node2和node3是只读节点,提供只读操作。

    5、MGR单主模式灾备切换

    (1)模拟主库宕机,因为我这里是虚拟机,直接shutdown即可

    shutdown -h

    (2)查看哪个节点升级为主库

    mysql> select * from performance_schema.replication_group_members ;
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | group_replication_applier | 02c2cfed-37a9-11eb-b238-000c2927b3e8 | node3       |        3308 | ONLINE       |
    | group_replication_applier | 66720a6a-37a8-11eb-befc-000c29c918c1 | node2       |        3308 | ONLINE       |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    2 rows in set (0.01 sec)
    
    mysql> select * from performance_schema.global_status where variable_name like '%group%';
    +----------------------------------+--------------------------------------+
    | VARIABLE_NAME                    | VARIABLE_VALUE                       |
    +----------------------------------+--------------------------------------+
    | group_replication_primary_member | 02c2cfed-37a9-11eb-b238-000c2927b3e8 |
    +----------------------------------+--------------------------------------+
    1 row in set (0.02 sec)
    
    mysql> 

    注:performance_schema.replication_group_members的结果是按照MEMBER_ID升序排列的,主库的升级的时候,MEMBER_ID最小的升级为主库。

    (3)查看node2和node3的读写状态

    --1、node2(只读的)
    mysql> show global variables like '%super%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | super_read_only | ON    |         
    +-----------------+-------+
    1 row in set (0.01 sec)
    
    --2、node3(读写的,说明node3是主)
    mysql> show global variables like '%super%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | super_read_only | OFF   |
    +-----------------+-------+
    1 row in set (0.02 sec)

    (4)测试现在的主从数据是否可以同步

    --node3上插入数据
    mysql> use customer;
    Database changed
    mysql> select * from person;
    +----+----------+------+
    | id | username | age  |
    +----+----------+------+
    |  1 | jack     |   19 |
    |  2 | jack     |   19 |
    |  3 | jack     |   19 |
    |  4 | jack     |   19 |
    |  5 | jack     |   19 |
    |  6 | jack     |   19 |
    |  7 | jack     |   19 |
    +----+----------+------+
    7 rows in set (0.00 sec)
    
    mysql> insert into person(username,age)  values('sdsd',20);
    Query OK, 1 row affected (0.02 sec)
    
    mysql> select  * from person;
    +----+----------+------+
    | id | username | age  |
    +----+----------+------+
    |  1 | jack     |   19 |
    |  2 | jack     |   19 |
    |  3 | jack     |   19 |
    |  4 | jack     |   19 |
    |  5 | jack     |   19 |
    |  6 | jack     |   19 |
    |  7 | jack     |   19 |
    |  8 | sdsd     |   20 |
    +----+----------+------+
    8 rows in set (0.00 sec)
    
    --node2上查看是否同步
    mysql> use customer;
    Database changed
    mysql> select * from person;
    +----+----------+------+
    | id | username | age  |
    +----+----------+------+
    |  1 | jack     |   19 |
    |  2 | jack     |   19 |
    |  3 | jack     |   19 |
    |  4 | jack     |   19 |
    |  5 | jack     |   19 |
    |  6 | jack     |   19 |
    |  7 | jack     |   19 |
    |  8 | sdsd     |   20 |
    +----+----------+------+
    8 rows in set (0.00 sec)

    注:可以看到数据可以从新主同步数据到从节点

    (5)node1重启后,重新加入到MGR组中

    mysql> CHANGE MASTER TO MASTER_USER='repl_user1', MASTER_PASSWORD='$a123456' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (0.01 sec)
    
    mysql> start group_replication;
    Query OK, 0 rows affected (3.03 sec)
    
    mysql> select * from performance_schema.replication_group_members ;
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | group_replication_applier | 02c2cfed-37a9-11eb-b238-000c2927b3e8 | node3       |        3308 | ONLINE       |
    | group_replication_applier | 66720a6a-37a8-11eb-befc-000c29c918c1 | node2       |        3308 | ONLINE       |
    | group_replication_applier | 9b014152-37a6-11eb-89b5-000c29cddf72 | node1       |        3308 | ONLINE       |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    3 rows in set (0.00 sec)
    
    mysql> use customer;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> select * from person;
    +----+----------+------+
    | id | username | age  |
    +----+----------+------+
    |  1 | jack     |   19 |
    |  2 | jack     |   19 |
    |  3 | jack     |   19 |
    |  4 | jack     |   19 |
    |  5 | jack     |   19 |
    |  6 | jack     |   19 |
    |  7 | jack     |   19 |
    |  8 | sdsd     |   20 |
    +----+----------+------+
    8 rows in set (0.00 sec)

    (6)查看Group的当前视图

     注:16079120577135158:12---- 表示发生了12次视图切换

    四、启动MGR为多主模式

    1、多主模式的搭建

    如果从头搭建多主模式的话,和单主模式的搭建步骤基本一致,只是把下面的参数改一下就行了

    --动态配置
    set global group_replication_single_primary_mode=FALSE
    set global group_replication_enforce_update_everywhere_checks=TRUE
    
    --配置文件修改
    loose-group_replication_single_primary_mode=FALSE
    loose-group_replication_enforce_update_everywhere_checks=TRUE

    2、单主模式修改为多主模式

     已经是单主模式要想修改为多主模式,直接动态修改参数会报错,如下:

    mysql> set global group_replication_single_primary_mode=off;
    ERROR 3093 (HY000): Cannot change into or from single primary mode while Group Replication is running.
    mysql> 

    所以,需要停掉group_replication,才能从单主模式修改为多主。操作步骤如下

    (1)组成员逐个退出group

    --node3上退出group
    mysql> stop group_replication;
    Query OK, 0 rows affected (9.58 sec)
    
    --node2上退出group
    mysql> stop group_replication;
    Query OK, 0 rows affected (9.57 sec)
    
    --node1上退出group
    mysql> stop group_replication;
    Query OK, 0 rows affected (9.57 sec)

    节点的状态都是offline:

    mysql> select * from performance_schema.replication_group_members ;
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | group_replication_applier | 9b014152-37a6-11eb-89b5-000c29cddf72 | node1       |        3308 | OFFLINE      |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    1 row in set (0.00 sec)

    (2)修改group_replication_single_primary_mode参数为off(node1、node2、node3上都要执行)

    mysql> set global group_replication_single_primary_mode=FALSE;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> set global group_replication_enforce_update_everywhere_checks=TRUE;
    Query OK, 0 rows affected (0.00 sec)

    (3)在node1上新增数据,模拟生成环境业务不停

    mysql> use customer;
    Database changed
    mysql> create table tb2(id int primary key auto_increment not null,name varchar(100));
    Query OK, 0 rows affected (0.46 sec)
    
    mysql> 
    mysql> insert into tb2(name) values('wade');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from tb2;
    +----+------+
    | id | name |
    +----+------+
    |  1 | wade |
    +----+------+
    1 row in set (0.00 sec)

    (4)逐个启动group

    --node1加入group
    mysql> show global variables like '%group_replication_bootstrap_group%';
    +-----------------------------------+-------+
    | Variable_name                     | Value |
    +-----------------------------------+-------+
    | group_replication_bootstrap_group | OFF   |
    +-----------------------------------+-------+
    1 row in set (0.01 sec)
    
    mysql> set global group_replication_bootstrap_group=ON;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> CHANGE MASTER TO MASTER_USER='repl_user1', MASTER_PASSWORD='$a123456' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (0.02 sec)
    
    mysql> start group_replication;
    Query OK, 0 rows affected (2.04 sec)
    
    mysql> set global group_replication_bootstrap_group=off;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from performance_schema.replication_group_members ;
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | group_replication_applier | 9b014152-37a6-11eb-89b5-000c29cddf72 | node1       |        3308 | ONLINE       |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    --node2加入group
    mysql> CHANGE MASTER TO MASTER_USER='repl_user1', MASTER_PASSWORD='$a123456' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (0.01 sec)
    
    mysql> start group_replication;
    Query OK, 0 rows affected (4.07 sec)
    
    --node3加入group
    mysql> CHANGE MASTER TO MASTER_USER='repl_user1', MASTER_PASSWORD='$a123456' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (0.02 sec)
    
    mysql> start group_replication;
    Query OK, 0 rows affected (3.09 sec)
    
    --node1上查看组成员
    mysql> select * from performance_schema.replication_group_members ;
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    | group_replication_applier | 02c2cfed-37a9-11eb-b238-000c2927b3e8 | node3       |        3308 | ONLINE       |
    | group_replication_applier | 66720a6a-37a8-11eb-befc-000c29c918c1 | node2       |        3308 | ONLINE       |
    | group_replication_applier | 9b014152-37a6-11eb-89b5-000c29cddf72 | node1       |        3308 | ONLINE       |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+
    3 rows in set (0.00 sec)

    (5)查看数据是否同步

    --node2上查看
    mysql> select * from customer.tb2;
    +----+------+
    | id | name |
    +----+------+
    |  1 | wade |
    +----+------+
    1 row in set (0.00 sec)
    
    --node3上查看
    mysql> select * from customer.tb2;
    +----+------+
    | id | name |
    +----+------+
    |  1 | wade |
    +----+------+
    1 row in set (0.00 sec)

    注:可以看到数据已经同步过去了

    (6)查看各个节点的读写状态

    mysql> show global variables like '%super_read_only%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | super_read_only | OFF   |
    +-----------------+-------+
    1 row in set (0.00 sec)

    注:发现3个节点的super_read_only状态都是off,都是读写的,这时候再查看global_status状态发现为空,无法确定主库是哪个,因为都是主库

    到这里,MySQL之MGR的多主模式已经搭建完成了。

    五、运维常用的SQL

    1、查看group成员

    select * from performance_schema.replication_group_members;

     2、查看当前SERVER在GROUP中的同步情况(查看applier通道的同步情况)

    select * from performance_schema.replication_group_member_stats;

     3、查看当前server中各个通道的使用情况

    注:applier通道是一定有显示,recovery通道看是否使用过,如果有则显示,没有则不显示。

    select * from performance_schema.replication_connection_status;

     4、查看当前server中各个通道是否启用

    select * from performance_schema.replication_applier_status;

     5、查看global参数的状态

     select * from performance_schema.global_status;   

    六、遇到的问题总结

    1、加入MGR组时报的错误1

    (1)错误如下:

    [ERROR] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: 02c2cfed-37a9-11eb-b238-000c2927b3e8:1-9 > Group transactions: b6cf6565-c415-4c4d-a4f0-49a596f98fca:1-14'
    2020-12-14T02:35:17.114156Z 0 [ERROR] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.'

    (2)解决办法

    原因是node2节点包含了非group内的事务。查看node2的数据,确实有与其他节点不一样的数据。应该是没启动GR服务时,被当做独立库操作了。
    在node2节点上,重置master的信息,重新加入MGR,再次start解决了。

    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.
    mysql> reset master;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> CHANGE MASTER TO MASTER_USER='repl_user1', MASTER_PASSWORD='$a123456' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (0.01 sec)
    
    mysql> start group_replication;
    Query OK, 0 rows affected (3.39 sec)

    2、加入MGR组时报的错误2

    (1)错误截图如下

    (2)解决办法

      出现这个问题的原因是节点1、2、3中的group_replication_group_name使用的是每台机器的uuid,但是这个配置需要3台机器保持一致。
    修改三个节点的group_replication_group_name一致后,问题解决。

  • 相关阅读:
    关于Python装饰器内层函数为什么要return目标函数的一些个人见解
    多项式拟合与线性回归
    numpy基本方法总结 --good
    numpy中的convolve的理解
    最容易理解的对卷积(convolution)的解释
    Python之numpy基本指令
    线性回归原理小结
    矩阵的导数与迹
    【MyBatis学习14】MyBatis和Spring整合
    【MyBatis学习13】MyBatis中的二级缓存
  • 原文地址:https://www.cnblogs.com/jialanyu/p/14120306.html
Copyright © 2011-2022 走看看