MGR基本要求:

1、InnoDB存储引擎

2、主键,每个表必须具有已定义的主键或等效的主键,其中等效项是非null唯一键

3、IPv4网络

4、网络性能

5、开启二进制日志并开启GTID模式

6、mysql版本在5.7.17以上

MGR限制:

1、组复制不支持mysiam引擎

2、不支持binlog的checksum校验

3、并发DDL与DML操作。  使用多主模式时,不支持针对同一对象但在不同服务器上执行的并发数据定义语句和数据操作语句,因为锁不共享

4、具有级联约束的外键

5、非常大的事务,即超过5S的事物,都会自动驱逐出集群,设置group_replication_transaction_size_limit参数限制事物大小,如果超过则回滚

6、最多包含9个服务器

开启replication配置:

所有的实例中必须包含以下参数配置:

server-id=1                                      #标识服务器唯一

log-bin=mysql-bin                           #二进制日志开启

enforce_gtid_consistency = ON          #GTID模式

binlog-format=row                           #必须是ROW模式

gtid-mode=ON                                  #GTID保证事物编号全局唯一   (Global Transaction ID)

master-info-repository=TABLE

relay-log-info-repository=TABLE           #记录同步的信息,便于管理和恢复

log-slave-update = ON                         #需要记录事务的binlog,用作以后的恢复用,哪怕不是写入点,也需要

binlog-checksum=NONE                      #MGR本身不支持binlog的checksum校验

 slave-parallel-workers=8

 slave-preserve-commit-order=1    #GTID配置,SQL线程按照顺序重放事物

slave-parallel-type=LOGICAL_CLOCK.   #SQL线程工作模式。有两种。

#组复制配置:

  transaction_write_set_extraction=XXHASH64    #指示服务器对于每个事务,它必须收集写集并使用XXHASH64散列算法将其编码为 散列

  loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"    #命名格式,每个实例必须完全相同

  loose-roup_replication_start_on_boot=off        #插件在服务器启动时不自动启动操作

 loose-group_replication_local_address =“127.0.0.1:24903”     #指定本机地址及端口,是通信端口,不是实例端口

 loose-group_replication_group_seeds= "127.0.0.1:24903,127.0.0.1:24903,127.0.0.1:24903"    #设置组成员的主机名和端口,端口使用的是通信端口,不是实例端口

 loose-group_replication_bootstrap_group=off        #引导是否开启,选择关闭,手动引导

loose-group_replication_auto_increment_increment=7      #指定自增量,默认为7

 loose-group_replication_single_primary_mode = off    #关闭单主模式的参数
loose-group_replication_enforce_update_everywhere_checks = on #开启强制检查

创建复制账号:

SET SQL_LOG_BIN=0;      #不写入二进制日志,避免扩散到其他机器
grant replication slave on *.* to 'backup'@'%' identified by '123456';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

主执行:

CHANGE MASTER TO MASTER_USER='stemp', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';      #加入组
INSTALL PLUGIN group_replication SONAME 'group_replication.so';      #安装组复制插件。mysql自带有这个插件
SHOW PLUGINS;    #查看插件是否安装成功
SET GLOBAL group_replication_bootstrap_group = ON;      #开始引导组
START GROUP_REPLICATION;                 #开启组复制
SET GLOBAL group_replication_bootstrap_group = OFF;  #关闭引导
查看:
SELECT * FROM performance_schema.replication_group_members;      #查看是否加入成功
其他机器执行(加入组复制):
SET SQL_LOG_BIN=0;      #不写入二进制日志,避免扩散到其他机器
grant replication slave on *.* to 'backup'@'%' identified by '123456';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='stemp', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME'group_replication.so';
START GROUP_REPLICATION;
这里和第一台机器不同的是不执行引导组的语句。
查看:SELECT * FROM performance_schema.replication_group_members;
MGR使用paxos算法来解决一致性的问题,自己的理解:
比如一场法庭审判:
底下的人都是提议者,可以提出自己的意见和建议,但是,最后做出决定的是法官,这个法官可以是一个或者多个。
提出提议的众人争先和法官联系。每一个提议者都会提出一个意见,这个意见会生成一个唯一的ID。如果有一个提议者和大多数法官(半数以上)取得的联系,那么这个提议就会被接受 法官就会记录这个提议生成的唯一ID,和上一个ID进行对比,如果现在的这个ID大于旧ID,那么这个意见就会被接收,然后法官们一起决定这个意见,以少数服从多数的方式决定。 如果这个ID小于或者等于旧ID,那么法官就会拒绝这个提议,拒绝后,提议者会将这个ID号增加,然后继续向法官提出提议,直到被接受。 在同一时间,只有一个提议能被接受。
												

MySQL Group Replication(组复制MGR)的更多相关文章

  1. Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结

    之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...

  2. MySQL Group Replication 介绍

    2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式推出Group Replication(组复制) 插件,通过这个插件增强了MySQL原有的高可用方案(原有的Replica ...

  3. Mysql Group Replication 简介及单主模式组复制配置【转】

    一 Mysql Group Replication简介    Mysql Group Replication(MGR)是一个全新的高可用和高扩张的MySQL集群服务.    高一致性,基于原生复制及p ...

  4. MySQL高可用架构之MySQL5.7组复制MGR

    MySQL高可用架构之MySQL5.7组复制MGR########################################################################### ...

  5. MySQL组复制MGR(一)-- 技术概述

    (一)复制技术的发展 MySQL的复制技术主要经历了异步主从复制,半同步复制,组复制(Group Replication)3个阶段. (1)传统的异步主从复制 传统的MySQL提供了一种简单的主从复制 ...

  6. mysql group replication观点及实践

    一:个人看法 Mysql  Group Replication  随着5.7发布3年了.作为技术爱好者.mgr 是继 oracle database rac 之后. 又一个“真正” 的群集,怎么做到“ ...

  7. MySQL Group Replication配置

    MySQL Group Replication简述 MySQL 组复制实现了基于复制协议的多主更新(单主模式). 复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事 ...

  8. mysql group replication 安装&配置详解

    一.原起: 之前也有写过mysql-group-replication (mgr) 相关的文章.那时也没有什么特别的动力要写好它.主要是因为在 mysql-5.7.20 之前的版本的mgr都有着各种各 ...

  9. 使用ProxySQL实现MySQL Group Replication的故障转移、读写分离(一)

    导读: 在之前,我们搭建了MySQL组复制集群环境,MySQL组复制集群环境解决了MySQL集群内部的自动故障转移,但是,组复制并没有解决外部业务的故障转移.举个例子,在A.B.C 3台机器上搭建了组 ...

  10. MySQL Group Replication 技术点

    mysql group replication,组复制,提供了多写(multi-master update)的特性,增强了原有的mysql的高可用架构.mysql group replication基 ...

随机推荐

  1. web前端篇:JavaScript基础篇(易懂小白上手快)-2

    目录 一.内容回顾: ECMAScript基础语法 1.基本数据类型和引用数据类型 2.条件判断和循环 3.赋值运算符,逻辑运算符 4.字符串的常用方法 5.数组的常用方法 6.对象 7.函数 8.日 ...

  2. 一个致命的 Redis 命令,导致公司损失 400 万

    什么样的 Redis 命令会有如此威力,造成如此大的损失? 具体消息如下: 看完这个消息后,我心又一惊,为什么这么低级的问题还在犯?为什么线上的危险命令没有被禁用?这事件报道出来真是觉得很低级... ...

  3. 软件管理命令-- rpm

    RPM(红帽软件包管理器) 安装软件 rpm -ivh filename.rpm 升级软件 rpm -Uvh filename.rpm 卸载软件 rpm -e filename.rpm -i 安装一个 ...

  4. 子shell

    http://bbs.csdn.net/topics/392292455 https://www.cnblogs.com/daniaoge/p/6161821.html http://blog.csd ...

  5. Tomcat固定的目录结构

    1. /work Tomcat把由Jsp生成的Servlet放于此目录下. 2. /webapps 当发布Web应用时,默认情况下把Web应用文件放于此目录下. 3. /logs 存放Tomcat的日 ...

  6. P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

    题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人.然而,在任何一群朋友中 ...

  7. JAVA吃货联盟项目。

    1基础通过数组.选择结构.循环等实 现吃货联盟订餐系统. 1.我要订餐: 2.查看餐袋: 3.签收订单: 4.删除订单: 5.我要点赞: 6.退出系统: public class Doy001 { p ...

  8. springMVC 与 struts+hibernate+spring优缺点

    springMVC: Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Tiles.iText 和POI.Spring M ...

  9. jsp实现账户登录、注册!

    jsp连接mysql数据库进行账户登录验证和账户注册 ~jsp: Login.jsp .LoginCl.jsp.Welcome.jsp.Register.jsp.login.css login.css ...

  10. socket使用非阻塞connect

    在使用tcp的connect调用时,默认是使用阻塞方式,当服务器当前不可用时,connect会等待(内部在重试?)直到超时时间到达,而这个超时时间是系统内核规定的,不能使用setSocketOpt来设 ...