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;
螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。 --章怀柔
原文地址:https://www.cnblogs.com/lovezhr/p/15516540.html