centos搭建mysql集群-MGR模式

MGR简介:
  MGR全称MySQL Group Replication(Mysql组复制),是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL 5.7版本开始支持无损半同步复制(lossless semi-sync replication),从而进一步提示数据复制的强一致性。此外:MGR是以Plugin的形式嵌入在MySQL实例中,插件内部实现了冲突检测、Paxos协议通信等,也就是说mysql在5.7以后,已经实现了集群的功能而无需第三方管理。
MGR的特性
 1.高一致性。
 2.高容错性。只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;
 3.高扩展性。节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;
 4.高灵活性。有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。
搭建MGR的基础结构要求和使用限制
1.引擎必须为innodb
2.每个表必须有主键,
3.必须开启binlog且为row格式
4.开启GTID,且主从状态信息存于表中(–master-info-repository=TABLE 、–relay-log-info-repository=TABLE),–log-slave-updates打开;、
5.一致性检测设置–transaction-write-set-extraction=XXHASH64

搭建要求实现目标:搭建多主/单主模式(用多实例 端口是3306)
在此特意说明:MGR要么是单主多从,要么全部都是主,不存在多主多从的
集群硬件需求:
192.168.56.2
192.168.56.3
192.168.56.4
mysql版本:5.7.28
用的的端口 3306,33061,13306(特殊端口,必须打开)

第一步 下载 安装mysql(三台服务器上都按照)
具体安装步骤,请看我的另一篇博客:
https://blog.csdn.net/qq_34892981/article/details/110195577

这是生成的3个密码

192.168.56.2 3306 Zhrg#SC0eo
192.168.56.3 3306 +CwIkkip%83M
192.168.56.4 3306 OkPrY:tq(1+o

下面开始搭建MGR集群
给三台主机都加上下面的配置

先停止mysql

service mysqld stop

配置集群

vi /etc/my.cnf
#复制框架
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

#组复制设置
#server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列
transaction_write_set_extraction=XXHASH64
#告知插件加入或创建组命名,UUID
loose-group_replication_group_name="ca858599-7b0a-11ea-9b26-00163e163d8b"
#server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
loose-group_replication_start_on_boot = OFF
#告诉插件使用IP地址,端口24901用于接收组中其他成员转入连接(就是本机IP+端口)
loose-group_replication_local_address="192.168.56.2:33061"
#启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意
loose-group_replication_group_seeds="192.168.56.2:33061,192.168.56.3:33061,192.168.56.4:33061"
loose-group_replication_ip_whitelist="192.168.56.2,192.168.56.3,192.168.56.4"
loose-group_replication_bootstrap_group=off
# 使用MGR的单主模式(on) 多主(off)
loose-group_replication_single_primary_mode = on
#//多主一致性检查(多主模式下一定要为ON)
#loose-group_replication_enforce_update_everywhere_checks=ON
disabled_storage_engines = MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE
#防止报错
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
#自动删除时间为10天, 默认为0不自动删除
expire_logs_days=10
report_port=3306

配置完成后, 要一次启动数据库,安装MGR插件,设置复制账号(所有MGR节点都要执行)
启动mysql

service mysqld start

登录mysql

mysql -u root -p

加装组件

INSTALL PLUGIN group_replication SONAME 'group_replication.so';
#设为0后,在Master数据库上执行的语句都不记录binlog(也就不会同步到从库中)
SET SQL_LOG_BIN=0;
flush privileges;
#创建用户(创建组复制权限用户)
CREATE USER cluster@'%' IDENTIFIED BY '123456';
 GRANT REPLICATION SLAVE ON *.* TO cluster@'%';
grant replication slave on *.* to cluster@'%' identified by "123456";

FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
 CHANGE MASTER TO MASTER_USER='cluster', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';

下面的只在第一台上执行
配置Group(按照先把实例A加入Group中,由于是第一个加入Group中,需要启动group_replication_bootstrap_group,引导组,实例A加入成功后,陆续加入实例B及实例C。)

SET GLOBAL group_replication_bootstrap_group=ON; 
然后启动组
START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

如果失败先:

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

查看节点状态

SELECT * FROM performance_schema.replication_group_members;

centos搭建mysql集群-MGR模式
在其他节点加入MGR集群,在从库(192.168.56.3,192.168.56.4)上执行

#加入集群
START GROUP_REPLICATION;

如果:
centos搭建mysql集群-MGR模式

则这样处理

set global group_replication_allow_local_disjoint_gtids_join=ON;
START GROUP_REPLICATION;

再次查看MGR组信息 (在三个MGR节点上都可以查看)

SELECT * FROM performance_schema.replication_group_members;

centos搭建mysql集群-MGR模式
查询数据库(在从库上)

centos搭建mysql集群-MGR模式
至此单主多从搭建完成

如果要看别的看这个
https://www.cnblogs.com/kevingrace/p/10260685.html

上一篇:mysql shell安装 mysql8.0 MGR


下一篇:7.mysql8.0版本MGR搭建