本文转载自: https://www.93bok.com

MGR简介

MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MySQL组复制提供了高可用、高扩展、高可靠的MySQL集群服务。

1)高一致性

基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;

2)高容错性

只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;

3)高扩展性

节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;

4)高灵活性

有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。

MGR是MySQL数据库未来发展的一个重要方向。

MGR基础结构要求

  1. 1、引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查
  2. 2、每个表必须有主键,在进行事务冲突检测时需要利用主键值对比
  3. 3、必须开启binlog且为row格式
  4. 4、必须打开GTID特性,且主从状态信息存于表中
  5. (--master-info-repository=TABLE 、--relay-log-info-repository=TABLE
  6. 5、--log-slave-updates打开
  7. 6、一致性检测设置--transaction-write-set-extraction=XXHASH64

MGR使用限制

  1. 1RP和普通复制binlog校验不能共存,需设置--binlog-checksum=none
  2. 2、不支持gap lock(间隙锁),隔离级别需设置为read_committed
  3. 3、不支持对表进行锁操作(lock /unlock table),不会发送到其他节点执行 ,影响需要对表进行加锁操作的情况,列入mysqldump全表备份恢复操作
  4. 4、不支持serializable(序列化)隔离级别
  5. 5DDL语句不支持原子性,不能检测冲突,执行后需自行校验是否一致
  6. 6、不支持外键:多主不支持,单主模式不存在此问题
  7. 7、最多支持9个节点:超过9server无法加入组

MGR多主模式部署

一、准备环境

  1. 主机IP 主机名 数据库版本 Server ID 操作系统
  2. 192.168.10.22 nongziyi22.xin mysql-5.7.19 1 Centos6.5
  3. 192.168.10.27 nongziyi27.xin mysql-5.7.19 2 Centos6.5
  4. 192.168.10.29 nongziyi29.xin mysql-5.7.19 3 Centos6.5

二、设置hostname和ip映射关系

在三台服务器上都设置:

  1. vim /etc/hosts
  2. 192.168.10.22 nongziyi22.xin
  3. 192.168.10.27 nongziyi27.xin
  4. 192.168.10.29 nongziyi29.xin

三、nongziyi22.xin服务器配置

1、配置my.cnf(和单主模式只差两句配置在末尾)
  1. vim /etc/mysql/my.cnf
  2. [mysqld]
  3. datadir=/a01/apps/mysql/data
  4. socket=/tmp/mysql.sock
  5. user=mysql
  6. # Disabling symbolic-links is recommended to prevent assorted security risks
  7. symbolic-links=0
  8. #Group Replication
  9. server_id = 1 #服务ID
  10. gtid_mode = ON #全局事物
  11. enforce_gtid_consistency = ON #强制GTID的一致性
  12. master_info_repository = TABLE #将master.info元数据保存在系统表中
  13. relay_log_info_repository = TABLE #将relay.info元数据保存在系统表中
  14. binlog_checksum = NONE #禁用二进制日志事件校验
  15. log_slave_updates = ON #级联复制
  16. log_bin = binlog #开启二进制日志记录
  17. binlog_format= ROW #以行的格式记录
  18. transaction_write_set_extraction = XXHASH64 #使用哈希算法将其编码为散列
  19. loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856' #加入的组名
  20. loose-group_replication_start_on_boot = off #不启用自动复制集群功能
  21. loose-group_replication_local_address = '192.168.10.22:33061' #以本机3306端口接收来自组成员的传入连接
  22. loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061' #组中成员访问列表
  23. loose-group_replication_bootstrap_group = off #不启用引导组
  24. loose-group_replication_single_primary_mode = off #关闭单master模式
  25. loose-group_replication_enforce_update_everywhere_checks = ON #多主一致性检查
  26. [mysqld_safe]
  27. log-error=/var/log/mysqld.log
  28. pid-file=/var/run/mysqld/mysqld.pid
2、重启mysql服务
  1. service mysqld restart
3、建立复制账号
  1. mysql -u root -p123456
  2. mysql> set SQL_LOG_BIN=0; #停掉日志记录
  3. mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
  4. mysql> flush privileges;
  5. mysql> set SQL_LOG_BIN=1; #开启日志记录
  6. mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery'; #构建group_replication集群
4、安装group replication插件

#安装插件

  1. mysql> install PLUGIN group_replication SONAME 'group_replication.so';

#查看group replication组件

  1. mysql> show plugins;

5、启动服务器上mysql的group replication

#设置group_replication_bootstrap_group为ON是为了标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置

  1. mysql> set global group_replication_bootstrap_group=ON;

#作为首个节点启动MGR集群

  1. mysql> start group_replication;
  2. mysql> set global group_replication_bootstrap_group=OFF;

6、查看MGR的状态
  1. mysql> select * from performance_schema.replication_group_members;

7、插入数据以便一会别的主机添加到集群中的时候查看效果
  1. mysql> create database nongkaige;
  2. mysql> use nongkaige;
  3. mysql> create table ziyi(id int primary key,name varchar(20));
  4. mysql> insert into ziyi values (1,'nongziyi');
  5. mysql> select * from nongkaige.ziyi;

四、nongziyi27.xin服务器配置

1、配置my.cnf(和之前的一样,只是server_id和IP地址不一样而已)
  1. vim /etc/mysql/my.cnf
  2. #Group Replication
  3. server_id = 2
  4. gtid_mode = ON
  5. enforce_gtid_consistency = ON
  6. master_info_repository = TABLE
  7. relay_log_info_repository = TABLE
  8. binlog_checksum = NONE
  9. log_slave_updates = ON
  10. log_bin = binlog
  11. binlog_format= ROW
  12. transaction_write_set_extraction = XXHASH64
  13. loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856'
  14. loose-group_replication_start_on_boot = off
  15. loose-group_replication_local_address = '192.168.10.27:33061'
  16. loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'
  17. loose-group_replication_bootstrap_group = off
  18. loose-group_replication_single_primary_mode = off
  19. loose-group_replication_enforce_update_everywhere_checks = ON
2、重启mysql服务
  1. service mysqld restart
3、建立复制账号
  1. mysql -u root -p123456
  2. mysql> set SQL_LOG_BIN=0; #停掉日志记录
  3. mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
  4. mysql> flush privileges;
  5. mysql> set SQL_LOG_BIN=1; #开启日志记录
  6. mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery'; #构建group_replication集群
4、安装group replication插件

#安装插件

  1. mysql> install PLUGIN group_replication SONAME 'group_replication.so';
5、启动MGR集群
  1. mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
  2. mysql> start group_replication;
6、查看MGR的状态
  1. mysql> select * from performance_schema.replication_group_members;

7、检测数据是否同步过来
  1. mysql> select * from nongkaige.ziyi;

五、nongziyi29.xin服务器配置

1、配置my.cnf(和之前的一样,只是server_id和IP地址不一样而已)
  1. vim /etc/mysql/my.cnf
  2. #Group Replication
  3. server_id = 3
  4. gtid_mode = ON
  5. enforce_gtid_consistency = ON
  6. master_info_repository = TABLE
  7. relay_log_info_repository = TABLE
  8. binlog_checksum = NONE
  9. log_slave_updates = ON
  10. log_bin = binlog
  11. binlog_format= ROW
  12. transaction_write_set_extraction = XXHASH64
  13. loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856'
  14. loose-group_replication_start_on_boot = off
  15. loose-group_replication_local_address = '192.168.10.29:33061'
  16. loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'
  17. loose-group_replication_bootstrap_group = off
  18. loose-group_replication_single_primary_mode = off
  19. loose-group_replication_enforce_update_everywhere_checks = ON
2、重启mysql服务
  1. service mysqld restart
3、建立复制账号
  1. mysql -u root -p123456
  2. mysql> set SQL_LOG_BIN=0; #停掉日志记录
  3. mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
  4. mysql> flush privileges;
  5. mysql> set SQL_LOG_BIN=1; #开启日志记录
  6. mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery'; #构建group_replication集群
4、安装group replication插件

#安装插件

  1. mysql> install PLUGIN group_replication SONAME 'group_replication.so';
5、启动MGR集群
  1. mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
  2. mysql> start group_replication;
6、查看MGR的状态
  1. mysql> select * from performance_schema.replication_group_members;

7、检测数据是否同步过来
  1. mysql> select * from nongkaige.ziyi;

查看谁是MGR集群的主节点

  1. mysql> select variable_value from performance_schema.global_status where variable_name='group_replication_primary_member';

和单主模式不同,这里所有的主机都是主服务器,都能进行写操作

MGR集群测试

测试是否3个节点都能进行写操作

1、在nongziyi22这台主机上插入一条数据看看能否写入
  1. mysql> insert into nongkaige.ziyi values (3,'huanglihua');

2、在nongziyi27这台主机插入一条数据看看能否写入
  1. mysql> insert into nongkaige.ziyi values (4,'nongkaige');

3、在nongziyi29这台主机插入一条数据看看能否写入
  1. mysql> insert into nongkaige.ziyi values (5,'pipixia');

MySQL集群MGR架构for多主模式的更多相关文章

  1. MySQL集群MGR架构for单主模式

    本文转载自: https://www.93bok.com MGR简介 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决 ...

  2. MySQL集群(二)之主主复制

    前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节 ...

  3. MySQL集群原理详解

    1. 为什么需要分布式数据库2. MySQL Cluster原理3. MySQL Cluster的优缺点4. MySQL Cluster国内应用5. 参考资料 1. 为什么需要分布式数据库 随着计算机 ...

  4. MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken

    MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...

  5. 【MySQL大系】《Mysql集群架构》

    原文地址(微信):[技术文章]<Mysql集群架构> 本文地址:http://www.cnblogs.com/aiweixiao/p/7258444.html 点击关注微信公众号 1.主要 ...

  6. Galera Cluster——一种新型的高一致性MySQL集群架构

    原文链接:https://www.sohu.com/a/147032902_505779,最近被分配定位mysql的问题,学习下. 1. 何谓Galera Cluster 何谓Galera Clust ...

  7. MySQL集群搭建(6)-双主+keepalived高可用

    双主 + keepalived 是一个比较简单的 MySQL 高可用架构,适用于中小 MySQL 集群,今天就说说怎么用 keepalived 做 MySQL 的高可用. 1 概述 1.1 keepa ...

  8. MySQL集群搭建(5)-MHA高可用架构

    1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...

  9. MySQL集群搭建(1)-主备搭建

    数据库在任何业务中都是最重要的环节之一,这就对数据库架构提出的较高的要求.单点数据库永远不应该出现在生产环境,我们已经目睹过太多由于单点.备份缺失造成的损失,所以,搭建高可用 MySQL 集群是非常有 ...

随机推荐

  1. log4j日志配置和使用

    一.日志配置变量参数说明 1. 日志设置说明:# log4j.rootLogger = debug,stdout,D,E# 等号之后的值表示appender对象,每个apperder对象表示一个日志输 ...

  2. 二十、linux文件系统讲解

    1.分区和文件系统的关系: 为什么需要格式化呢?这是因为分区文件系统在没有格式化前,操作系统是无法识别系统分区的格式的,就没办法组织文件目录属性和权限等内容,把分区格式化成操作系统支持的某个文件系统后 ...

  3. 实验报告8 AC+Fit AP组网通过三层网络注册(DHCP Option 43)

    实验报告8 课程名称 无线网络与安全技术 实验名称 AC+Fit AP组网通过三层网络注册(DHCP Option 43) 姓名 学号 班级 实 验 目 的   [实验目的] 了解AC+Fit AP跨 ...

  4. Codeforces Round #572 (Div. 1) 差E

    Codeforces Round #572 (Div. 1) A2 题意:给一棵树,带边权,互不相同且为偶数.每次操作是选两个叶子然后在路径上同时加一个数.初始边权全是0,求一个操作序列使得最终边权与 ...

  5. 5-7 学生cpp成绩统计

    完成“学生cpp成绩计算”之后,修改Person和Student类,各自增加两个无参构造函数. 仍以Person类为基础,建立一个派生类Teacher,增加以下成员数据: int ID;//教师工号 ...

  6. ckeditor深入挖掘吃透

  7. StringTokenizer(字符串分隔解析类型)

    java.util.StringTokenizer 功效:将字符串以定界符为界,分析为一个个的token(可理解为单词),定界符可以自己指定.  1.构造函数. 1. StringTokenizer( ...

  8. HDU1233 还是畅通工程

    题目: Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连 ...

  9. centos7 开机/etc/rc.local 不执行的问题(转载)

    最近发现centos7 的/etc/rc.local不会开机执行,于是认真看了下/etc/rc.local文件内容的就发现了问题的原因了 #!/bin/bash # THIS FILE IS ADDE ...

  10. 如何有效地报告Bug

    英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...