MySQL集群MGR架构for单主模式
本文转载自: https://www.93bok.com
MGR简介
MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MySQL组复制提供了高可用、高扩展、高可靠的MySQL集群服务。
1)高一致性
基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;
2)高容错性
只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;
3)高扩展性
节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;
4)高灵活性
有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。
MGR是MySQL数据库未来发展的一个重要方向。
MGR基础结构要求
1、引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查
2、每个表必须有主键,在进行事务冲突检测时需要利用主键值对比
3、必须开启binlog且为row格式
4、必须打开GTID特性,且主从状态信息存于表中
(--master-info-repository=TABLE 、--relay-log-info-repository=TABLE)
5、--log-slave-updates打开
6、一致性检测设置--transaction-write-set-extraction=XXHASH64
MGR使用限制
1、RP和普通复制binlog校验不能共存,需设置--binlog-checksum=none
2、不支持gap lock(间隙锁),隔离级别需设置为read_committed
3、不支持对表进行锁操作(lock /unlock table),不会发送到其他节点执行 ,影响需要对表进行加锁操作的情况,列入mysqldump全表备份恢复操作
4、不支持serializable(序列化)隔离级别
5、DDL语句不支持原子性,不能检测冲突,执行后需自行校验是否一致
6、不支持外键:多主不支持,单主模式不存在此问题
7、最多支持9个节点:超过9台server无法加入组
MGR单主模式部署
一、准备环境
主机IP 主机名 数据库版本 Server ID 操作系统
192.168.10.22 nongziyi22.xin mysql-5.7.19 1 Centos6.5
192.168.10.27 nongziyi27.xin mysql-5.7.19 2 Centos6.5
192.168.10.29 nongziyi29.xin mysql-5.7.19 3 Centos6.5
二、设置hostname和ip映射关系
在三台服务器上都设置:
vim /etc/hosts
192.168.10.22 nongziyi22.xin
192.168.10.27 nongziyi27.xin
192.168.10.29 nongziyi29.xin
三、nongziyi22.xin服务器配置
1、配置my.cnf
vim /etc/mysql/my.cnf
[mysqld]
datadir=/a01/apps/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#Group Replication
server_id = 1 #服务ID
gtid_mode = ON #全局事物
enforce_gtid_consistency = ON #强制GTID的一致性
master_info_repository = TABLE #将master.info元数据保存在系统表中
relay_log_info_repository = TABLE #将relay.info元数据保存在系统表中
binlog_checksum = NONE #禁用二进制日志事件校验
log_slave_updates = ON #级联复制
log_bin = binlog #开启二进制日志记录
binlog_format= ROW #以行的格式记录
transaction_write_set_extraction = XXHASH64 #使用哈希算法将其编码为散列
loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856' #加入的组名
loose-group_replication_start_on_boot = off #不启用自动复制集群功能
loose-group_replication_local_address = '192.168.10.22:33061' #以本机3306端口接收来自组成员的传入连接
loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061, 192.168.10.29:33061' #组中成员访问列表
loose-group_replication_bootstrap_group = off #不启用引导组
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
2、重启mysql服务
service mysqld restart
3、建立复制账号
mysql -u root -p123456
mysql> set SQL_LOG_BIN=0; #停掉日志记录
mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1; #开启日志记录
mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery'; #构建group_replication集群
4、安装group replication插件
#安装插件
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
#查看group replication组件
mysql> show plugins;

5、启动服务器上mysql的group replication
#设置group_replication_bootstrap_group为ON是为了标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置
mysql> set global group_replication_bootstrap_group=ON;
#作为首个节点启动MGR集群
mysql> start group_replication;
mysql> set global group_replication_bootstrap_group=OFF;

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

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

四、nongziyi27.xin服务器配置
1、配置my.cnf(和之前的一样,只是server_id和IP地址不一样而已)
vim /etc/mysql/my.cnf
#Group Replication
server_id = 2
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log_bin = binlog
binlog_format= ROW
transaction_write_set_extraction = XXHASH64
loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856'
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = '192.168.10.27:33061'
loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'
loose-group_replication_bootstrap_group = off
2、重启mysql服务
service mysqld restart
3、建立复制账号
mysql -u root -p123456
mysql> set SQL_LOG_BIN=0; #停掉日志记录
mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1; #开启日志记录
mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery'; #构建group_replication集群
4、安装group replication插件
#安装插件
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
5、启动MGR集群
mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
mysql> start group_replication;
6、查看MGR的状态
mysql> select * from performance_schema.replication_group_members;

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

五、nongziyi29.xin服务器配置
1、配置my.cnf(和之前的一样,只是server_id和IP地址不一样而已)
vim /etc/mysql/my.cnf
#Group Replication
server_id = 3
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log_bin = binlog
binlog_format= ROW
transaction_write_set_extraction = XXHASH64
loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856'
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = '192.168.10.29:33061'
loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'
loose-group_replication_bootstrap_group = off
2、重启mysql服务
service mysqld restart
3、建立复制账号
mysql -u root -p123456
mysql> set SQL_LOG_BIN=0; #停掉日志记录
mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1; #开启日志记录
mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery'; #构建group_replication集群
4、安装group replication插件
#安装插件
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
5、启动MGR集群
mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
mysql> start group_replication;
6、查看MGR的状态
mysql> select * from performance_schema.replication_group_members;

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

查看谁是MGR集群的主节点
mysql> select variable_value from performance_schema.global_status where variable_name='group_replication_primary_member';

从图中我们可以参照上边的MGR集群状态,可以知道,现在是nongziyi22.xin为主节点
MGR集群测试
1、测试集群复制功能
其实呢,我们上边的实验已经测试过了这个功能,因为我们所新添进来的节点,都自动同步了我们主节点上的数据,接下来我们是新插入数据进行测试
A.先在主节点上插入一条数据
mysql> insert into ziyi values (2,'nongkaige');
B.然后去其他两个节点查看数据是否同步过来
节点1:

节点2:

2、测试集群主节点宕机,自动选主功能
A.模仿主节点宕机
mysql> stop group_replication;
B.先查看MGR的集群状态

C.在其他节点上查看现在谁是主节点
mysql> select variable_value from performance_schema.global_status where variable_name='group_replication_primary_member';

很明显,主节点变成了nongziyi29.xin这台主机
说明
1、上边演示了主节点宕机之后集群自动选出一个作为主节点,当原先的主节点恢复之后,只能运行以下命令来使该节点变成从库来运行,而不能恢复成原来的主节点了。
mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
mysql> start group_replication;
2、单主模式中,只有主节点可以写入,从库无法写入,例如在从库上插入数据:
mysql> insert into ziyi values (3,'huanglihua');
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

MySQL集群MGR架构for单主模式的更多相关文章
- MySQL集群MGR架构for多主模式
本文转载自: https://www.93bok.com MGR简介 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决 ...
- MySQL集群(二)之主主复制
前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节 ...
- MySQL集群原理详解
1. 为什么需要分布式数据库2. MySQL Cluster原理3. MySQL Cluster的优缺点4. MySQL Cluster国内应用5. 参考资料 1. 为什么需要分布式数据库 随着计算机 ...
- kingbaseES R3 集群备库转换为单实例库案例
案例说明: 在生产环境需要将集群中架构转换为单实例环境,本案例以备库转换为单实例库为案例,介绍了两种方案,一种在数据库数据量小的环境下采用 sys_dumpall 导出导入方式建立单实例库:另外一种是 ...
- MySQL+MGR 单主模式和多主模式的集群环境 - 部署手册 (Centos7.5)
MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案.MGR是MySQL官方在5.7.17版本引进的一个数据库高可用与 ...
- MySQL集群搭建(5)-MHA高可用架构
1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...
- MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken
MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...
- 【MySQL大系】《Mysql集群架构》
原文地址(微信):[技术文章]<Mysql集群架构> 本文地址:http://www.cnblogs.com/aiweixiao/p/7258444.html 点击关注微信公众号 1.主要 ...
- Galera Cluster——一种新型的高一致性MySQL集群架构
原文链接:https://www.sohu.com/a/147032902_505779,最近被分配定位mysql的问题,学习下. 1. 何谓Galera Cluster 何谓Galera Clust ...
随机推荐
- s01字符串---蓝桥杯
问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据规模和约定 0~ ...
- POJ-3264 Balanced Lineup(区间最值,线段树,RMQ)
http://poj.org/problem?id=3264 Time Limit: 5000MS Memory Limit: 65536K Description For the daily ...
- [JS]實作LinkedList鏈結串列
由於自身資料結構的基礎薄弱,買了一本JavaScript資料結構與演算法實作的書來看,重新把LinkedList鏈結串列學習了一遍,並用JS實作出來. LinkedList鏈結串列 要存放多個元素,最 ...
- 卸载python3
rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 卸载pyhton3 whereis python3 |xargs rm -frv 删除 ...
- P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)
#include<bits/stdc++.h> using namespace std; ; struct node{ int l,r,cnt,lazy; node(,,,):l(l1), ...
- RDD(四)——transformation_key_value类型
这里所有算子均只适用于pairRDD.pairRDD的数据类型是(k,v)形式的键值对: PartitionBy(Partitioner) 对pairRDD进行分区操作,如果原有的partioner和 ...
- jquery时间控件
jQuery 时间控件推荐 博客分类: jQuery 时间控件 My97DatePicker My97DatePicker是一个更全面,更人性化,并且速度一流的日期选择控件.具有强大的日期范围限 ...
- STM32学习中出现的错误
1.添加了多个文件后编译发现出现了无效的重复声明: 原因:文件(头文件)调用的时候重复调用, 解决办法:每个头文件写的时候包含以下代码: #ifndef __STM32F10X_H //头文件 ...
- 使用VSCode调试Javascript的三种方式
Code Runner 在应用商店中搜索Code Runner插件进行安装. 选中你要执行的Javascript脚本,右键选择Run Code,利用Console.log在下方的输出窗口里可以看到输出 ...
- Android内存调优的一些方法
一.巧妙使用软引用和弱引用 软引用,系统内存紧张时会回收软引用对象,一般用用高速缓存,例如图片缓存,我们一般通过内存缓存图片来提高图片加载速度,但内存吃紧的时候可以通过软引用及时对图片资源回收. 弱引 ...