• MGR-半同步互转教程


    此文章为基于MySQL 5.7.32 撰写,内容为 MGR 架构与半同步复制架构互相转换实施。

    为节约时间仅部署双节点数据库进行测试,实际生产建议至少安装三节点数据库,MGR 遵循多数存活理念,即三台服务器的集群,允许其中一台宕机。

    以下对本文涉及的复制架构进行简介:

    半同步复制:介于异步复制和完全同步复制之间。主库等待至少一个从库接收并记录事件(所需的从库数量是可配置的),然后提交事务。主库不会等待所有从库都确认收到,它只需要来自一个从库的确认,而不是事务已在从库端完全执行和提交。因此,半同步复制可以保证当主库崩溃时,主库已提交的所有事务都已传输到至少一个从库。

    MGR:MySQL Group Replication (MGR) 是 MySQL 5.7.17 版本中引入的高可用性和高扩展性解决方案,可作为插件使用。MGR 基于分布式 paxos 协议,实现组复制,保证数据一致性。内置故障检测和自动选择主功能,只要集群中大部分节点宕机,就可以继续正常工作。提供单主模式和多主模式,多主模式支持多点写入。

    一、环境检查

    1. 系统版本

    图片

    1. 关闭防火墙

    图片

    1. 服务器信息
    10.186.62.92    MGR-node1
    10.186.62.35    MGR-node2
    1. MySQL 版本

    • 5.7.32

    二、主机名绑定

    图片

    三、MGR 参数配置node1

    #基本参数
    [mysqld]
    ####: for global
    skip_ssl
    user =mysql3318
    basedir =/usr/local/mysql
    datadir =/database/mysql/data/3318
    tmpdir =/database/mysql/tmp/3318
    port =3318
    log_error =err.log
    pid_file =mysqld.pid
    socket =mysqld.sock
    disabled_storage_engines=archive,blackhole,example,federated,memory,merge,ndb
    plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so;validate_password=validate_password.so"
    transaction_isolation =READ-COMMITTED #RC
    #MGR复制框架
    server_id=1
    gtid_mode=ON
    enforce_gtid_consistency=ON
    binlog_checksum=NONE
    log_bin=binlog
    log_slave_updates=ON
    binlog_format=ROW
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
     #MGR设置
    #定义用于生成标识与事务相关联的哈希算法,在组复制中用于分布式冲突检测和处理。
    transaction_write_set_extraction=XXHASH64
    #告知插件加入或创建组命名,UUID
    loose-group_replication_group_name="fb3f2ad0-8d25-11eb-96d3-02000aba3e5c"
    #server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
    loose-group_replication_start_on_boot=off
    #告诉插件使用IP地址,端口33181用于接收组中其他成员转入连接
    loose-group_replication_local_address="10.186.62.92:33181"
    #启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意
    loose-group_replication_group_seeds="10.186.62.92:33181,10.186.62.35:33181,10.186.62.66:33181"
    loose-group_replication_bootstrap_group=off
    report_host=10.186.62.92
    report_port=3318
    plugin_load_add='group_replication.so'

    四、MGR 参数配置 node2

    1. 将 node1 的参数拷贝至 node2
    2. 修改 MGR-node2 节点 /etc/my.cnf 文件中如下三个参数为自身参数即可。

      • server_id

      • loose-group_replication_local_address

      • report_host
    #[MGR]
    transaction_write_set_extraction=XXHASH64
    loose-group_replication_group_name="fb3f2ad0-8d25-11eb-96d3-02000aba3e5c"
    loose-group_replication_start_on_boot=off
    loose-group_replication_local_address="10.186.62.35:33181"
    loose-group_replication_group_seeds="10.186.62.92:33181,10.186.62.35:33181,10.186.62.66:33181"
    loose-group_replication_bootstrap_group=off
    report_host=10.186.62.35
    report_port=3318
    plugin_load_add='group_replication.so'

    五、重启MySQL使参数生效

    • systemctl restart mysql3318

    六、安装 MGR 插件,设置复制账号

    1. 所有 MGR 节点都要执行
    2. 语句如下:
    INSTALL PLUGIN group_replication SONAME 'group_replication.so';

    验证成功加载插件

    show plugins ;

    SET SQL_LOG_BIN=0;
    CREATE USER rpl_mgr@'10.186.62.%' IDENTIFIED WITH sha256_password BY 'ZZQzzq123###';
    GRANT REPLICATION SLAVE ON *.* TO rpl_mgr@' 10.186.62.%';
    FLUSH PRIVILEGES;
    SET SQL_LOG_BIN=1;
    CHANGE MASTER TO MASTER_USER='rpl_mgr', MASTER_PASSWORD='ZZQzzq123###' FOR CHANNEL 'group_replication_recovery';

    七、启动 MGR 单主模式

    1. 启动 MGR ,在主库(10.186.62.92)节点上执行

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

    主节点可读写

    1. 从库(10.186.62.35)加入集群

    reset master; 
    START GROUP_REPLICATION;
    SELECT * FROM performance_schema.replication_group_members;

    从节点只读

    八、验证同步正常

    1. Master 创建数据库
    1. Slave 查看已同步

    九、开启 MGR 时尝试启动半同步

    1. 在 Master 创建用户 repl 用于半同步操作
    CREATE USER repl@'10.186.62.%' IDENTIFIED WITH sha256_password BY 'ZZQzzq123###';
    GRANT REPLICATION SLAVE ON *.* TO repl@'10.186.62.%';
    FLUSH PRIVILEGES;
    1. 在从库进行 change master 操作

    CHANGE MASTER TO MASTER_HOST='10.186.62.92',MASTER_USER='repl',MASTER_PORT=3318,MASTER_PASSWORD='ZZQzzq123###',MASTER_AUTO_POSITION=1;
    1. 执行 START SLAVE ;

    2. 复制报错

    1. 结论:开启 MGR 时,无法启动半同步复制。

    十、MGR 切换为半同步

    1. Slave 执行
    停止MGR
    STOP GROUP_REPLICATION;
    卸载MGR插件
    UNINSTALL PLUGIN group_replication;
    1. 在 Master 执行步骤1

    2. Slave 查看当前 MGR 信息

    SELECT * FROM performance_schema.replication_group_members;
    1. Master 查看当前 MGR 信息
    1. 启动半同步

    • 若已执行过 步骤9的1-2则直接在 Slave 上执行 START SLAVE ;
    • 否则在 Slave 上执行步骤9的1-3即可
    • 查看复制状态
    • 在 Master 创建库
    • Slave 上验证已同步
    1. 永久注释 MGR 插件

    必要时可在 /etc/my.cnf 中注释如下参数,使 MySQL 不自动加载 MGR 插件

    #plugin_load_add='group_replication.so'

    十一、半同步切换为 MGR

    1. Slave 上停用半同步
    STOP SLAVE;
    SET GLOBAL SUPER_READ_ONLY = OFF;
    INSTALL PLUGIN group_replication SONAME 'group_replication.so';
    1. Master 上启动 MGR

    INSTALL PLUGIN group_replication SONAME 'group_replication.so';
    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;
    SET GLOBAL group_replication_bootstrap_group=OFF;
    1. Slave 加入集群

    START GROUP_REPLICATION;
    SELECT * FROM performance_schema.replication_group_members;
    螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。 --章怀柔
  • 相关阅读:
    hihocoder #1138 : Islands Travel
    关于c中的inline
    LUOGU P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    LUOGU P1908 逆序对
    归并排序 (模板)
    tyvj 1864 守卫者的挑战
    loj #10001. 「一本通 1.1 例 2」种树
    bzoj 1026: [SCOI2009]windy数
    BZOJ 4521: [Cqoi2016]手机号码
    LUOGU 3089 后缀排序(模板)
  • 原文地址:https://www.cnblogs.com/lovezhr/p/15516540.html
Copyright © 2020-2023  润新知