MySQL Group Replication实践

MySQL Group Replication实践

 

Group Replication直接翻译过来就是组复制,是基于组的复制(Group-based Replication)技术,和galera集群可以相提并论,在应用场景中可以实现高可用。

Replication-group(复制组)是由能够相互通信的多个服务器(节点)组成的。一个Replication-group就是一组节点,每个节点都可以独立执行事务,而读写事务则会在于group内的其他节点进行协调之后再commit。

2016年12月12日,在MySQL 5.7.17中,Group Replication GA。

下载最新的MySQL5.7.17版本,进行测试:

准备工作,GroupReplication有很多限制,需要将以下几个参数加入到配置文件中。

gtid_mode = ON

enforce_gtid_consistency = ON

master_info_repository = TABLE

relay_log_info_repository = TABLE

binlog_checksum = NONE

transaction_write_set_extraction = XXHASH64

slave_parallel_type = LOGICAL_CLOCK

slave_preserve_commit_order = ON

 

也可以启动后通过set global这种方式来设置,其中gtid_mode和enforce_gtid_consistency为不可动态动态修改参数

 

$ mysqld --defaults-file=mysql4307.cnf --initialize-insecure #初始化数据库并且不生成密码

$ mysqld --defaults-file=mysql4307.cnf & #启动数据库

$ uuidgen #生成uuid,用作后面group_replication_name

929c33d5-bdd8-44fa-87be-ae9f8e96d0f2

在第一个节点上操作:

mysql> INSTALL PLUGIN group_replication SONAME "group_replication.so";

mysql> SET GLOBAL group_replication_group_name = "929c33d5-bdd8-44fa-87be-ae9f8e96d0f2”;

mysql> SET GLOBAL group_replication_local_address = "192.168.1.1:13306";

mysql> SET GLOBAL group_replication_bootstrap_group = ON; #只在第一个节点设置,集群启动后需要将该参数关闭

mysql> START GROUP_REPLICATION;

mysql> GRANT replication_slave on *.* to repl@’%’ identified by‘repl4slave’; FLUSH PRIVILEGES;

在第后续节点上操作:

mysql> INSTALL PLUGIN group_replication SONAME "group_replication.so";

mysql> SET GLOBAL group_replication_group_name = "929c33d5-bdd8-44fa-87be-ae9f8e96d0f2”;

mysql> SET GLOBAL group_replication_local_address = "192.168.1.2:13306";

mysql> SET GLOBAL group_replication_group_seeds = "192.168.1.1:13306";

mysql> CHANGE MASTER TO MASTER_USER="repl",MASTER_PASSWORD="repl4slave" FOR CHANNEL"group_replication_recovery";

mysql> START GROUP_REPLICATION;

如果无法启动,请查看错误日志,里面说明的相关原因。

为了方便,我们可以把参数写入到配置文件中,可以省去多数配置步骤。

plugin-load = group_replication.so

group_replication_single_primary_mode = OFF

group_replication_start_on_boot = OFF

group_replication_group_name   = "929c33d5-bdd8-44fa-87be-ae9f8e96d0f2”

group_replication_local_address = '10.11.8.39:24902'

group_replication_group_seeds  = '10.11.8.38:24901,10.11.8.39:24901'

 

说明:

group_replication_single_primary_mode 是否只有一个主可写,设置为ON时,其它节点不可写

group_replication_start_on_boot 是否在mysql启动时同时启动Group Replication

group_replication_bootstrap_group 是否为Group Replication的引导节点,集群中第一个节点需要设置为ON来启动Group Replication

经过测试,也是操作失误,发现了一个问题,就是用CRT同时向2个实例中发送命令,drop database xxx,竟然2个实例中数据库全部删除,随之就开始报错,无法进行同步。同时也找出了在出错时,没有重要数据情况下或数据库量少,快速恢复但为集群的办法(请勿在生产环境中使用,后果自负)。

mysql> stop group_replication;

mysql> reset master;

mysql> start group_replication;

$ mysql < backup.sql

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值