• 【MySQL】MGR高可用搭建


    MySQL8.0.27如何安装

    https://www.cnblogs.com/mindzone/p/15450312.html

    部署过程中各种问题可参考的解决方案

    我遇见的搭建问题,解决方案参考下面诸多博主的帖子

    1、MGR部署后如何测试单点故障情况

    https://www.cnblogs.com/diantong/p/11048767.html

    2、找不到Group组端口如何解决

    https://www.cnblogs.com/naocanzhishen/p/13540861.html

    服务日志描述:

    2022-03-08T16:22:11.029417Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error testing to the local group communication engine instance.'
    2022-03-08T16:22:11.089494Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33061'

    3、使用已经安装MYSQL的克隆虚拟机,导致实例ID一致问题

    https://blog.csdn.net/fly43108622/article/details/86089449

    服务日志描述:

    'There is already a member with server_uuid a655ee5b-9ee6-11ec-b685-000c290bdef1. The member will now exit the group.'

    4、节点Recovering状态如何解决

    https://blog.csdn.net/heroicpoem/article/details/106340155

    MGR搭建流程

    集群的机器需要配置区分的主机名,并且在Host配置对应的映射

    1、配置主机名

    # 一号机器
    echo centos7-1 > /etc/hostname
    
    # 二号机器
    echo centos7-2 > /etc/hostname
    
    # 三号机器
    echo centos7-3 > /etc/hostname

    2、配置域名映射(所有机器配置)

    vim /etc/hosts
    
    # 根据自己的机器IP进行设定
    192.168.177.11 centos7-1
    192.168.177.12 centos7-2
    192.168.177.13 centos7-3

    上述步骤完成后,使用ping命令测试一下是否能够ping通

    以此检查网路状态和配置是否生效

    确认主从关系

    主从架构
    centos7-1 主库 - A
    centos7-2 从库 - B
    centos7-3 从库 - C

    然后以此配置各自的MYSQL配置文件(my.cnf)

    1、主库配置追加这些配置项

    MGR需要一个组群端口,所以这里使用的是33061端口

    下面一项是加上了从库的地址和端口一起配置

    # - - - - - - - - -[ 主库追加配置 ] - - - - - - - - - - - # 
    server_id=1 
    gtid_mode=ON 
    enforce_gtid_consistency=ON 
    binlog_checksum=NONE 
    transaction_write_set_extraction=XXHASH64 
    default_authentication_plugin=mysql_native_password 
    plugin_dir=/usr/lib64/mysql/plugin 
    loose-group_replication_recovery_use_ssl=ON 
    loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
    loose-group_replication_start_on_boot=OFF 
    loose-group_replication_local_address="192.168.177.11:33061" 
    loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" 
    loose-group_replication_bootstrap_group=OFF 

    2、从库1的配置项

    # - - - - - - - - -[ 从库1追加配置 ] - - - - - - - - - - - # 
    server_id=2
    plugin_dir=/usr/lib64/mysql/plugin 
    default_authentication_plugin=mysql_native_password
    gtid_mode=ON 
    enforce_gtid_consistency=ON
    binlog_checksum=NONE
    loose-group_replication_recovery_get_public_key=ON 
    loose-group_replication_recovery_use_ssl=ON 
    loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
    loose-group_replication_start_on_boot=OFF
    loose-group_replication_local_address="192.168.177.12:33061" 
    loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" 
    loose-group_replication_bootstrap_group=OFF

    3、从库2的配置项

    # - - - - - - - - -[ 从库2追加配置 ] - - - - - - - - - - - # 
    # 设置唯一的服务器编号
    server_id=3
    plugin_dir=/usr/lib64/mysql/plugin 
    default_authentication_plugin=mysql_native_password
    gtid_mode=ON 
    enforce_gtid_consistency=ON
    binlog_checksum=NONE
    
    # 这个参数决定primary节点到secondary节点的请求是否为基于 RSA 密钥对的密码交换所需的公钥 
    loose-group_replication_recovery_get_public_key=ON 
    loose-group_replication_recovery_use_ssl=ON 
    loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
    loose-group_replication_start_on_boot=OFF
    
    # 设置本机地址
    loose-group_replication_local_address="192.168.177.13:33061" 
    loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" 
    loose-group_replication_bootstrap_group=OFF

    各个配置参数说明:

    # 使用mysql_native_password密码策略,防止navicat连不上mysql8  
    default_authentication_plugin=mysql_native_password 
    
    # 设置MySQL插件所在目录,因为MGR基于插件,所以必须设置插件路径  
    plugin_dir=/usr/lib64/mysql/plugin 
    
    # 服务器编号,Master=1 
    server_id=1 
    
    # 开启binlog的GTID模式
    gtid_mode=ON 
    
    # 开启后MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行 
    enforce_gtid_consistency=ON 
    
    # 关闭binlog校验 
    binlog_checksum=NONE 
    
    # 定义用于事务期间哈希写入提取的算法,组复制模式下必须设置为 XXHASH64。 17
    transaction_write_set_extraction=XXHASH64 
    
    # 确定组复制恢复时是否应该应用 SSL,通常设置为“开”,但默认设置为“关”。 
    loose‐group_replication_recovery_use_ssl=ON 
    
    # 该服务器的实例所在复制组的名称,必须是有效的 UUID,所有节点必须相同。 
    loose‐group_replication_group_name="bbbbbbbb‐bbbb‐cccc‐dddd‐eeeeeeeeeeee" 
    
    # 确定服务器是否应该在服务器启动期间启动组复制。 
    loose‐group_replication_start_on_boot=OFF 2425 
    
    # 大坑2:
    # 为复制组中其他的成员提供的网络地址,指定为“主机:端口”的格式化字符串。 
    # 很多人想当然认为端口应该是3306,起始不然,MGR需要开启新端口24901同步交换 
    # 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可 
    loose‐group_replication_local_address="n0:24901" 
    
    # 用于建立新成员到组的连接组成员列表。 
    # 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。 
    # 同样采用n0~n2的主机名替代 
    loose‐group_replication_group_seeds="n0:24901,n1:24901,n2:24901" 
    
    # 配置此服务器为引导组,这个选项必须仅在一台服务器上设置, 
    # 并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。 
    loose‐group_replication_bootstrap_group=OFF 

    配置完成后重启各自的服务

    # 所有配置完成后重启服务
    systemctl restart mysqld

    关闭Linux安全服务(全部机器执行)

    # 关闭SELinux
    setenforce 0

    # 重启
    reboot

    安装此依赖,并开发声明的33061端口(全部机器执行)

    yum install -y policycoreutils-python
    semanage port -a -t mysqld_port_t -p tcp 33061

    登录每一个库实例,执行下列SQL

    -- 创建副本账号
    CREATE USER 'REPL'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 
    
    -- 赋予所有库的主从同步副本权限
    GRANT REPLICATION SLAVE ON *.* TO 'REPL'@'%';
    
    -- 清空BIN日志
    RESET MASTER;
    
    -- 安装MGR插件
    INSTALL PLUGIN group_replication SONAME 'group_replication.so';
    
    -- 检查是否安装成功
    SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'group_replication';
    +-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
    | PLUGIN_NAME       | PLUGIN_VERSION | PLUGIN_STATUS | PLUGIN_TYPE       | PLUGIN_TYPE_VERSION | PLUGIN_LIBRARY       | PLUGIN_LIBRARY_VERSION | PLUGIN_AUTHOR      | PLUGIN_DESCRIPTION        | PLUGIN_LICENSE | LOAD_OPTION |
    +-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
    | group_replication | 1.1            | ACTIVE        | GROUP REPLICATION | 1.4                 | group_replication.so | 1.10                   | Oracle Corporation | Group Replication (1.1.0) | GPL            | ON          |
    +-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
    1 row in set (0.02 sec)

    进行组网数据同步

    首先主库开始进行副本组初始化

    # - - - - - - - - -[ 主库操作 ] - - - - - - - - - - - # 
    # 我们在 primary.cnf 配置文件中
    # 把 group_replication_bootstrap_group 参数设置成 OFF,
    # 在 primary 服务器启动时并不会直接启动复制组,
    # 通过下面的命令动态的开启复制组是我们的集群更安全。
    
    -- 开启复制组
    SET GLOBAL group_replication_bootstrap_group=ON; 
    START GROUP_REPLICATION; 
    SET GLOBAL group_replication_bootstrap_group=OFF;

    注意开启组副本SQL后的返回信息

    检查服务是否报错

    -- 检查日志
    tail ‐f /var/log/mysqld.log

    然后从库开始加入到 主库初始化的副本中

    # - - - - - - - - -[ 从库1 & 从库2 操作 ] - - - - - - - - - - - # 
    #指定主从账户与指定通信频道 
    CHANGE MASTER TO 
        MASTER_USER="REPL", 
        MASTER_PASSWORD="123456" 
    FOR CHANNEL 'group_replication_recovery'; 
    
    #开启组网数据同步 
    START GROUP_REPLICATION;

    检查组副本的状态:

    # 验证是否加入, 当所有节点为ONLINE状态时,才算成功
    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 | a655ee5b-9ee6-11ec-b685-000c290bdef1 | centos7     |        3306 | ONLINE       | PRIMARY     | 8.0.27         | XCom                       |
    | group_replication_applier | b1ae5b39-9efd-11ec-b67d-000c29dd2622 | centos7     |        3306 | RECOVERING   | SECONDARY   | 8.0.27         | XCom                       |
    | group_replication_applier | b552f59c-9efd-11ec-b52d-000c29eb138a | centos7     |        3306 | RECOVERING   | SECONDARY   | 8.0.27         | XCom                       |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
    3 rows in set (0.02 sec)

    所有节点成员均为ONLINE状态才表示MGR部署成功

    像上面的RECOVERING状态,需要翻看该节点的服务日志,检查错误原因

    -- 检查日志
    tail ‐f /var/log/mysqld.log

    总结:

    1、主机需要区分主机名,并且配置主机名和网络映射

    vim /etc/sysconfig/network
    
    vim /etc/hosts

    2、安装必要端口组件

    yum install -y policycoreutils-python
    semanage port -a -t mysqld_port_t -p tcp 33061

    5.7版本要求的配置项更多,但是SQL开启副本同步的操作是一致的

    参考:

    https://www.cnblogs.com/sallyluo/p/11760304.html

    主库MGR配置:

    # MGR-CFG FOR MASTER
    server_id = 1001
    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 = binlog
    binlog_format= ROW
    transaction_write_set_extraction ="XXHASH64"
    loose-group_replication_group_name = "b13df29e-90b6-11e8-8d1b-525400fc3996"
    loose-group_replication_start_on_boot = off
    loose-group_replication_local_address="centos6-1:33061"
    loose-group_replication_group_seeds="centos6-1:33061,centos6-2:33061,centos6-3:33061"
    loose-group_replication_bootstrap_group = off
    group_replication_ip_whitelist = "centos6-1,centos6-2,centos6-3"
    report_host="centos6-1"
    log_timestamps="system"
    plugin-dir=/usr/lib64/mysql/plugin

    从库1 和 从库 2 的MGR配置:

    server-id 和 地址 改成从库自己的

    # MGR - CFG FOR SLAVE
    server_id = 1002
    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 = binlog
    binlog_format= ROW
    transaction_write_set_extraction = "XXHASH64"
    loose-group_replication_group_name = "b13df29e-90b6-11e8-8d1b-525400fc3996"
    loose-group_replication_start_on_boot = off
    loose-group_replication_bootstrap_group = off
    loose-group_replication_local_address="centos6-2:33061"
    loose-group_replication_group_seeds="centos6-1:33061,centos6-2:33061,centos6-3:33061"
    group_replication_ip_whitelist = "centos6-1,centos6-2,centos6-3"
    report_host="centos6-2"
    log_timestamps="system"
    plugin-dir=/usr/lib64/mysql/plugin
  • 相关阅读:
    C# 虚方法virtual详解
    悟透javascript中的function
    C#并行编程-Task
    C#编程高并发的几种处理方法
    【CG】CG标准函数库——数学函数
    【Unity Shaders】学习笔记——SurfaceShader(八)生成立方图
    【Unity Shaders】学习笔记——SurfaceShader(七)法线贴图
    【Unity Shaders】学习笔记——SurfaceShader(六)混合纹理
    【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来
    【Unity Shaders】学习笔记——SurfaceShader(四)用纹理改善漫反射
  • 原文地址:https://www.cnblogs.com/mindzone/p/15984245.html
Copyright © 2020-2023  润新知