zoukankan      html  css  js  c++  java
  • MySQL8.0配置MGR

    环境

    CentOS 7

    MySQL 8.0

    数据库节点:

    192.168.6.151 node1 server-id为1
    192.168.6.152 node2 server-id为2
    192.168.6.153 node3 server-id为3

    安装MySQL8.0

    yum localinstall -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
    yum install -y mysql-community-server
    systemctl start mysqld
    systemctl status mysqld
    systemctl enable mysqld
    grep 'temporary password' /var/log/mysqld.log
    mysql -u root -p

    修改密码

    set global validate_password.policy=0;
    set global validate_password.length=1;
    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    flush privileges;
    exit;

    配置Host

    vim /etc/hosts
    192.168.6.151 node1
    192.168.6.152 node2
    192.168.6.153 node3

    修改My.cnf配置文件

    在node1节点,/etc/my.cnf 修改

    [mysqld]
    datadir = /var/lib/mysql
    socket = /var/lib/mysql/mysql.sock
             
    symbolic-links = 0
             
    log-error = /var/log/mysqld.log
    pid-file = /var/run/mysqld/mysqld.pid
     
    #开启GTID,必须开启
    gtid_mode=ON
    #强制GTID的一致性
    enforce_gtid_consistency=ON
     
    #binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row
    binlog_format=row
    #server-id必须是唯一的
    server-id = 1
    #MGR使用乐观锁,所以官网建议隔离级别是RC,减少锁粒度
    transaction_isolation = READ-COMMITTED
    #因为集群会在故障恢复时互相检查binlog的数据,
    #所以需要记录下集群内其他服务器发过来已经执行过的binlog,按GTID来区分是否执行过.
    log-slave-updates=1
    #binlog校验规则,5.6之后的高版本是CRC32,低版本都是NONE,但是MGR要求使用NONE
    binlog_checksum=NONE
    #基于安全的考虑,MGR集群要求复制模式要改成slave记录记录到表中,不然就报错
    master_info_repository=TABLE
    #同上配套
    relay_log_info_repository=TABLE
     
    #组复制设置
    #记录事务的算法,官网建议设置该参数使用 XXHASH64 算法
    transaction_write_set_extraction = XXHASH64
    #相当于此GROUP的名字,是UUID值,不能和集群内其他GTID值的UUID混用,可用uuidgen来生成一个新的,
    #主要是用来区分整个内网里边的各个不同的GROUP,而且也是这个group内的GTID值的UUID
    loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
    #IP地址白名单,默认只添加127.0.0.1,不会允许来自外部主机的连接,按需安全设置
    loose-group_replication_ip_whitelist = '127.0.0.1/8,192.168.6.0/24'
    #是否随服务器启动而自动启动组复制,不建议直接启动,怕故障恢复时有扰乱数据准确性的特殊情况
    loose-group_replication_start_on_boot = OFF
    #本地MGR的IP地址和端口,host:port,是MGR的端口,不是数据库的端口
    loose-group_replication_local_address = '192.168.6.151:33081'
    #需要接受本MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口
    loose-group_replication_group_seeds = '192.168.6.151:33081,192.168.6.152:33081,192.168.6.153:33081'
    #开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启,
    loose-group_replication_bootstrap_group = OFF
    #是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读,如果为off就是多主模式了
    loose-group_replication_single_primary_mode = ON
    #多主模式下,强制检查每一个实例是否允许该操作,如果不是多主,可以关闭
    loose-group_replication_enforce_update_everywhere_checks = on

    将node1的文件发送到node2和node3

    rsync -e "ssh -p22" -avpgolr /etc/my.cnf root@192.168.6.152:/etc/
    rsync -e "ssh -p22" -avpgolr /etc/my.cnf root@192.168.6.153:/etc/

    修改server-id和loose-group_replication_local_address的相关值

    重启mysql

    systemctl restart mysqld

    安装插件

    mysql -uroot -p123456
    install PLUGIN group_replication SONAME 'group_replication.so';
    show plugins;

    配置账号

    SET SQL_LOG_BIN=0;
    SET GLOBAL validate_password.policy=0;
    SET GLOBAL validate_password.length=1;
    CREATE USER repl@'%' IDENTIFIED BY 'repl';
    GRANT REPLICATION SLAVE ON *.* TO repl@'%';
    FLUSH PRIVILEGES;
    SET SQL_LOG_BIN=1;
    CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';

     启动MGR单主模式

    在node1节点,启动引导,进入mysql服务端

    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;
    SET GLOBAL group_replication_bootstrap_group=OFF;
    SELECT * FROM performance_schema.replication_group_members;

    在node2 ode3节点,进入mysql服务端

    START GROUP_REPLICATION;
    SELECT * FROM performance_schema.replication_group_members;

     切换到MGR多主模式

    在所有数据库节点,执行

    stop group_replication;
    set global group_replication_single_primary_mode=OFF;
    set global group_replication_enforce_update_everywhere_checks=ON;

    在node1节点,执行

    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;
    SET GLOBAL group_replication_bootstrap_group=OFF;

    在node2、node3节点,执行

    START GROUP_REPLICATION;

    查看MGR信息

    SELECT * FROM performance_schema.replication_group_members;

    故障切换

    多主模式

    在node3上模拟故障

    systemctl stop mysqld

    在其它节点,如node1上,查询MGR信息

     可以看到其它节点正常进行同步。

    在node3节点故障恢复

    systemctl start mysqld

    需要手动激活该节点的组复制功能(注意配置文件my.cnf中相关设置

    START GROUP_REPLICATION;

     单主模式

    切换回单主模式

    所有数据库节点停止MGR

    stop group_replication;
    set global group_replication_enforce_update_everywhere_checks=OFF;
    set global group_replication_single_primary_mode=ON;

    选择node1节点,作为主库

    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;
    SET GLOBAL group_replication_bootstrap_group=OFF;

    其它节点(node2、node3),执行

    START GROUP_REPLICATION;

    查询MGR状态

    SELECT * FROM performance_schema.replication_group_members;

     在主节点node1模拟故障,在node2查询MGR状态

     可以看到主节点挂了,通过选举程序从从库节点中选择一个作为主节点。

    node1故障恢复之后,需要手动激活该节点的组复制功能

    START GROUP_REPLICATION;
  • 相关阅读:
    vue中使用v-on绑定事件中,获取$event.currentTarget,日志打印为null
    问题记录:events.js:183 throw er; // Unhandled 'error' event Error: listen EADDRINUSE 127.0.0.1:8888
    跨域通信——多窗口通信
    fiddler抓包工具-常用功能1
    git使用手册
    webpack.config.js配置文件
    Loader转换器
    webpack安装使用
    <el-table>里的数据已经修改了,但是页面不更新
    <el-onload>使用属性file-list时返回数据里必须含url字段
  • 原文地址:https://www.cnblogs.com/Canyon/p/12030781.html
Copyright © 2011-2022 走看看