1. MGR介绍

MySQL Group Replication(下简称:MGR)是MySQL官方推出的一种基于Paxos协议的状态机复制。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL 5.7版本开始支持无损半同步复制(lossless semi-sync replication),从而进一步提示数据复制的强一致性

1.1 MySQL异步复制

master事务的提交不需要经过slave的确认,slave是否接收到master的binlog,master并不care。slave接收到master binlog后先写relay log,最后异步地去执行relay log中的sql应用到自身。由于master的提交不需要确保slave relay log是否被正确接受,当slave接受master binlog失败或者relay log应用失败,master无法感知

1.2 MySQL半同步复制

基于传统异步存在的缺陷,mysql在5.5版本推出半同步复制。可以说半同步复制是传统异步复制的改进,在master事务的commit之前,必须确保一个slave收到relay log并且响应给master以后,才能进行事务的commit。但是slave对于relay log的应用仍然是异步进行的,原理如下图所示:

1.3 MySQL组复制(MGR)

基于传统异步复制和半同步复制的缺陷——数据的一致性问题无法保证,MySQL官方在5.7.17版本正式推出组复制(MySQL Group Replication,简称MGR)。

由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能得以提交。如上图所示,由3个节点组成一个复制组,Consensus层为一致性协议层,在事务提交过程中,发生组间通讯,由2个节点决议(certify)通过这个事务,事务才能够最终得以提交并响应。

引入组复制,主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。组复制依靠分布式一致性协议(Paxos协议的变体),实现了分布式下数据的最终一致性,提供了真正的数据高可用方案(是否真正高可用还有待商榷)。其提供的多写方案,给我们实现多活方案带来了希望。

1.4 MySQL组复制的特性和限制

特性优点:

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

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

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

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

1、仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;

2、必须打开GTID特性,二进制日志格式必须设置为ROW,用于选主与write set

3、COMMIT可能会导致失败,类似于快照事务隔离级别的失败场景

4、目前一个MGR集群最多支持9个节点

5、不支持外键于save point特性,无法做全局间的约束检测与部分事务回滚

6、二进制日志不支持binlog event checksum

2. MGR搭建

loose-group_replication_single_primary_mode=FALSE

loose-group_replication_enforce_update_everywhere_checks= TRUE

2.1 机器分布

主机ip

安装服务

权重

192.168.142.48

mysql server 5.7.18

50

192.168.142.49

mysql server 5.7.18

40

192.168.142.50

mysql server 5.7.18

30

权重:新主选举时的优先级参照,越大,优先级越高

2.2 创建hostname和ip的映射

在三台数据库服务器上都设置:

192.168.142.48 dbtest1

192.168.142.49 dbtest2

192.168.142.50 dbtest3

2.3 需要额外说明的是配置文件my.cnf额外配置

# Replication Framework

server_id=1

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

log_bin=binlog

binlog_format=ROW

log_slave_updates=ON

binlog_checksum=NONE

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address= "192.168.142.48:33061"

loose-group_replication_group_seeds= "192.168.142.48:33061,192.168.142.49:33061,192.168.142.50:33061"

loose-group_replication_bootstrap_group=off

loose-group_replication_member_weight=50

2.4 创建数据库实例

手动搭建或者自动化脚本分别在三台主机上配置mysql实例,这里可参考MySQL单实例搭建的方法,不在赘述

2.5 第一个节点配置

1、设置复制账号权限

SET SQL_LOG_BIN=0;

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

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

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

2、指定恢复渠道channel

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

3、安装插件plugin和查看

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

show plugins;

4、开启组复制

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

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

5、查看mgr的状态

# 查询表performance_schema.replication_group_members

select * from performance_schema.replication_group_members;

2.6 第二个节点配置和第三个节点配置

1、设置复制账号权限

SET SQL_LOG_BIN=0;

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

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

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

2、指定恢复渠道channel

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

3、安装插件plugin和查看

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

show plugins;

4、开启组复制

# 这里不再需要开启group_replication_bootstrap_group,由于复制组已经被创建了,只需要将第二个节点添加进去即可

START GROUP_REPLICATION;

5、查看mgr的状态

# 查询表performance_schema.replication_group_members

select * from performance_schema.replication_group_members;

3. 观察相关状态和切换

1、切换

STOP GROUP_REPLICATION;会根据权重重新选择新的主master

START GROUP_REPLICATION;新加入后作为从服务器slave

2、相关状态查看

1、当前组成员列表

select * from performance_schema.replication_group_members;

2、当前节点详细日志应用信息

select * from performance_schema.replication_group_member_stats;

3、当前复制渠道连接信息

select * from performance_schema.replication_connection_status;

4、当前复制渠道应用信息

select * from performance_schema.replication_applier_status;

5、当前主master

select a.variable_value,b.member_host,b.member_port,member_state from performance_schema.global_status a ,performance_schema.replication_group_members b where a.variable_value=b.member_id and variable_name= 'group_replication_primary_member';

4. MGR动态新增和删除节点

4.1 动态新增节点配置

例如原有192.168.142.48,192.168.142.49,192.168.142.50组成MGR的基础上动态新增节点192.168.142.51

1、创建hostname和ip的映射

在四台数据库服务器上都设置:

192.168.142.48 dbtest1

192.168.142.49 dbtest2

192.168.142.50 dbtest3

192.168.142.51 dbtest4

2、192.168.142.51的my.cnf配置文件和上面my.cnf保持一致,额外修改的如下

loose-group_replication_local_address= "192.168.142.51:33061"

loose-group_replication_group_seeds= "192.168.142.48:33061,192.168.142.49:33061,192.168.142.50:33061,192.168.142.51:33061"

3、创建数据库实例

手动搭建或者自动化脚本分别在三台主机上配置mysql实例,这里可参考MySQL单实例搭建的方法,不在赘述

4、设置复制账号权限

SET SQL_LOG_BIN=0;

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

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

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

5、指定恢复渠道channel

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

6、安装插件plugin和查看

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

show plugins;

7、集群中已存在的节点配置修改group_replication_group_seeds的值

1、分别在192.168.142.48,192.168.142.49,192.168.142.50对应节点服务器配置参数

set global group_replication_group_seeds="192.168.142.48:33061,192.168.142.49:33061,192.168.142.50:33061,192.168.142.51:33061";

2、将对应参数值写入配置文件my.cnf持久化

8、开启组复制

# 这里不再需要开启group_replication_bootstrap_group,由于复制组已经被创建了,只需要将新增节点添加进去即可

START GROUP_REPLICATION;

9、查看mgr的状态

# 查询表performance_schema.replication_group_members

select * from performance_schema.replication_group_members;

4.2 动态删除节点配置

例如原有192.168.142.48,192.168.142.49,192.168.142.50,192.168.142.51组成MGR的基础上动态删除节点192.168.142.51

1、停止192.168.142.51上组复制

STOP GROUP_REPLICATION;

slave关闭后就被移除了组成员

2、集群中剩余的节点配置修改group_replication_group_seeds的值

1、分别在192.168.142.48,192.168.142.49,192.168.142.50对应节点服务器配置参数

set global group_replication_group_seeds="192.168.142.48:33061,192.168.142.49:33061,192.168.142.50:33061";

2、将对应参数值写入配置文件my.cnf持久化

3、彻底清理192.168.142.51节点相关组信息,配置修改group_replication_group_seeds和group_replication_local_address的值

1、在192.168.142.51对应节点服务器配置参数

set global group_replication_group_seeds="";

set global group_replication_local_address="";

2、将对应参数值写入配置文件my.cnf持久化(添加注释)

4、删除插件plugin、复制账号权限

mysql mgr搭建_MGR的搭建部署相关推荐

  1. mysql mgr监控_MGR监控报警

    一.报警思路 m.conf文件记录配置信息,只需要修改这个文件的内容即可(需要将mysql_stat.sh里面的信息写到这里,进行中) mysql_stat.sh文件作为MGR状态监测脚本,加入定时任 ...

  2. MySQL MGR搭建过程中常遇见的问题及解决办法

    这篇文章主要介绍了MySQL MGR搭建过程中常遇见的问题及解决办法,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下 MGR搭建过程中遇到的一些故障.更多资源请访问www.ffu9.c ...

  3. mysql 主从 keepalived_一次mysql主从加keepalived配置搭建及切换演示

    [需求] 根据需求需要搭建mysql主从架构数据库及加keepalived进行自动切换VIP(没有使用脚本进行检查对端数据库及互换主从) [环境介绍] 系统环境:CentOS release 6.4 ...

  4. 从零搭建Linux服务器以及部署Web项目指南

    在Web项目开发中,服务器搭建是非常重要的,同时部署web项目也是经常需要进行的事情,下面对一系列流程工作进行阐述. 1.搭建服务器 可以购买或者自行搭建 首先需要一台服务器,在服务器中安装好Cent ...

  5. Kubernetes集群搭建及容器化部署

    Kubernetes集群搭建及容器化部署 目录 一.k8s 集群部署 2 1.k8s 快速入门 2 2.k8s 集群安装 10 二.k8s 容器化部署 18 1.Kubectl命令行部署 18 2.K ...

  6. Chukwa搭建、安装、部署、应用

    hadoop培训课程:Chukwa搭建.安装.部署.应用 1.搭建环境 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用 ...

  7. Mysql Cluster 8.0.26搭建

    Mysql Cluster 8.0.26搭建 一.基础环境部署 1.基本环境(每个节点都需要) 1.1 关闭防火墙 systemctl stop firewalld # 关闭防火墙 systemctl ...

  8. 5 mysql 凤舞天骄_凤舞天骄mysql初始化失败平台的搭建

    以前用的是ASP的,这次毕业设计要求 主要研究内容.设计目标及开发环境: 1. 按软件工程过程,进行需求分析.系统设计 2. 实现软件系统(可以模仿著名的网上书店) 3. 部署系统 4. 开发环境:J ...

  9. MySQL读写分离介绍及搭建

    MySQL读写分离介绍及搭建 转载于:https://www.cnblogs.com/gotodsp/p/6511297.html

最新文章

  1. 【深度学习入门到精通系列】CIFAR-10数据集说明
  2. MongoDB学习之路(三)
  3. Vista下将目录的所有者恢复为 TrustedInstaller 的方法
  4. Hadoop MapReduce容错性分析
  5. 跨域(CORS)请求问题[No 'Access-Control-Allow-Origin' header is present on the requested resource]常见解决方案
  6. C#之操作窗口模拟键鼠事件文件监控等知识使用
  7. Linux磁盘的划分
  8. testflight开发者已将您从测试计划中移除_使用 TestFlight 测?试 App
  9. 身高2m,体重2kg,这样的数据“看上去很好”?
  10. php5.3.3php5.4如何支持zend,php5.3不支持ZendOptimizer的解决办法(Zend Guard Loader)
  11. django1.11使用mysql_django 1.11.1 连接MySQL
  12. Yii中设置时间分区
  13. 非双一流普通院校毕业,你凭什么斩获 BAT 的 Offer?
  14. UDP通信的简单实现(程序)
  15. 巧用金山网盾对付游戏插件强行锁定主页
  16. 黑色的cms商城网站后台管理模板——后台
  17. 鸡兔同笼python程序怎么写_梦见鸡_周公解梦梦到鸡是什么意思_做梦梦见鸡好不好_周公解梦官网...
  18. 《c语言程序设计》第一次网上作业,精编国家开放大学电大《C语言程序设计》《劳动与社会保障法》网络课形考网考作业(合集)答案...
  19. DDR扫盲——DDR与DDR2、DDR3的区别
  20. 传播问卷调查数据不够?自己生成假数据!

热门文章

  1. linux上如何创建超链接,GridView中的超链接
  2. 【简记】在Ubuntu 16.04 LTS上执行命令“dmesg -l err”返回一系列错误
  3. 下载hotspot源码
  4. ClickHouse删除分区报错:Exception: Table or Partition in default.od event xdr followas not dropped Reason:
  5. Android音频内核级驱动设计
  6. java毕业设计大学生兼职管理系统Mybatis+系统+数据库+调试部署
  7. C++ 抓取和批量下载网站上的图片或文件
  8. Android 开发中原始音频的录播和和自定义音频控制条的讲解及实战(超详细 附源码)
  9. 关于图结构的相似度比较
  10. 百度总裁李彦宏的“五招”创业经