MySQL高可用之组复制(MGR)

MySQL Group Replication(简称 MGR )是 MySQL 官方于 2016 年 12 月推出的一个全新的高可用与高扩
展的解决方案
组复制是 MySQL 5.7.17 版本出现的新特性,它提供了高可用、高扩展、高可靠的 MySQL 集群服务
MySQL 组复制分单主模式和多主模式,传统的mysql复制技术仅解决了数据同步的问题,
MGR 对属于同一组的服务器自动进行协调。对于要提交的事务,组成员必须就全局事务序列中给定事务
的顺序达成一致
提交或回滚事务由每个服务器单独完成,但所有服务器都必须做出相同的决定
如果存在网络分区,导致成员无法达成事先定义的分割策略,则在解决此问题之前系统不会继续进行,
这是一种内置的自动裂脑保护机制
MGR由组通信系统(
 Group Communication System,GCS ) 协议支持
该系统提供故障检测机制、组成员服务以及安全且有序的消息传递

组复制流程

首先我们将多个节点共同组成一个复制组,在执行读写(RW)事务的时候,需要通过一致性协议层
(Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里“大多数人”(对应 Node 节
点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1),这样才可以进行提交,而不是原发起
方一个说了算。而针对只读(RO)事务则不需要经过组内同意,直接 提交 即可

实现mysql组复制:

vim /etc/my.cnf

MySQL高可用之组复制(MGR)_第1张图片

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY#禁用指定存储引擎

gtid_mode=ON                        #启用全局事件标识

enforce_gtid_consistency=ON         #强制gtid一致

master_info_repository=TABLE        #复制事件数据到表中而不记录在数据目录中

binlog_checksum=NONE                #禁止对二进制日志校验

log_slave_updates=ON                #打开数据库中继

log_bin=binlog                      #重新指定log名称

binlog_format=ROW                   #使用行日志格式

plugin_load_add='group_replication.so'      #加载组复制插件

transaction_write_set_extraction=XXHASH64   #把每个事件编码为加密散列

group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"     #通知插件正
式加入

group_replication_start_on_boot=off                     #在server启动时不自动启动组复制

group_replication_local_address="172.25.254.10:33061" #指定插件接受其他成员的信息端口

group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8"        #主机白名单

group_replication_single_primary_mode=OFF                           #使用多主模式

group_replication_enforce_update_everywhere_checks=ON           #组同步中有任何改变检测更新

group_replication_allow_local_disjoint_gtids_join=1             #放弃自己信息以master事件为主

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%' IDENTIFIED BY 'lee';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='lee' FORCHANNEL 'group_replication_recovery';

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

SELECT * FROM performance_schema.replication_group_members;

#在复制配置文件到myql-node20和mysql-node30

scp /etc/my.cnf [email protected]:/etc/my.cnf

#修改mysql—node20和mysl-node30中的配置

把server-id 改一下address该成自己的id

在slave中的配置

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%' IDENTIFIED BY 'lee';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='lee' FOR CHANNEL 'group_replication_recovery';

START GROUP_REPLICATION;

SELECT * FROM performance_schema.replication_group_members;

测试:

在每个节点都可以完成读写

你可能感兴趣的:(mysql,数据库)