文章目录

  • MGR
  • MGR特点
  • 组复制故障检测
  • 组复制的限制
  • MGR主从复制实战
      • 环境清理(这步可忽略)
      • 三台机器的准备工作
      • 安装数据库:每个机器都做,MySQL版本最好一致
    • master配置内容
      • 配置[mysqld]
      • 启动数据库
      • 创建复制组的用户
      • 复制用户凭据到复制组通道
      • 查看复制组插件是否装载
      • 启动复制组
      • 查看复制组
    • 两台slave配置内容
      • 配置[mysqld]
      • 启动MySQL服务器
      • 连接服务器
      • 切换数据库
      • 创建复制组用户
      • 复制用户凭据到复制组通道
      • 查看复制组插件是否装载
      • 启动复制组
      • 查看复制组
      • 如果需要停止复制组,则使用
    • 测试
      • master创建数据库
      • slave查看数据库

MGR

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

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

 引入组复制,主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。组复制 依靠分布式一致性协议(Paxos协议的变体),实现了分布式下数据的最终一致性,提供了真正 的数据高可用方案

MGR特点

MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与 高扩展的解决方案,以插件形式提供,实现了分布式下数据的最终一致性,总结MGR特点如 下:

**高一致性:**基于分布式paxos协议实现组复制,保证数据一致性;

**高容错性:**自动检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机 制;

**高扩展性:**节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增 量数据,直到与其他节点数据一致;

**高灵活性:**提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主 节点进行,多主模式支持多节点写入。

组复制故障检测

​ 故障检测是提供关于哪些 server 可能已死的信息(猜测)的分布式服务。 某个 server 无响应时 触发猜测,组中其余成员进行协调决定以排除给定成员。如果某个 server 与组的其余成员隔 离,则它会怀疑所有其他 server 都失败了。由于无法与组达成协议(因为它无法确保仲裁成员 数),其怀疑不会产生后果。

​ 当服务器以此方式与组隔离时,它无法执行任何本地事务。 在线 server 列表通常称为视图,新成员server的加入离开,无论是自愿还是被迫的离开,该组都会 动态地重新规划其配置,并触发视图更新

组复制的限制

存储引擎必须为Innodb,即仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;

每个表必须提供主键;

只支持ipv4,网络需求较高;

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

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

目前一个MGR集群组最多支持9个节点;

不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚; 二进制日志binlog不支持Replication event checksums;

多主模式(也就是多写模式) 不支持SERIALIZABLE事务隔离级别;

多主模式不能完全支持级联外键约束;

多主模式不支持在不同节点上对同一个数据库对象并发执行DDL(在不同节点上对同一行并发 进行RW事务,后发起的事务会失败);

MGR主从复制实战

master:192.168.10.138 mgr1

slave1: 192.168.10.139 mgr2

slave2: 192.168.10.140 mgr3

mysql的用户统一创建user:mgr password:SYCRedhat23

环境清理(这步可忽略)

yum remove mysql-server -y
rm -rf /etc/my.cnf.d/
rm -rf /var/lib/mysql/
rm -rf /var/log/mysql/

三台机器的准备工作

  • 修改主机名 hostnamectl set-hostname 主机名
  • 修改/etc/hosts,映射关系
  • 关闭和禁用防火墙 systemctl stop firewalld systemctl disable firewalld
  • 做免密登录 ssh
  • 验证密码登录

安装数据库:每个机器都做,MySQL版本最好一致

#挂载镜像
mount /dev/sr0 /mnt
#安装本地仓库的mysql
yum install mysql-server -y
#初始化:启动、停止
systemctl start mysqld
systemctl stop mysqld

master配置内容

配置[mysqld]

vim /etc/my.cnf.d/mysql-server.cnf# 追加内容
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"#server_id 确保每个机器不一样
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ONlog_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64plugin_load_add='group_replication.so'#uuid确保每个机器都一样,可以用uuidgen生成
group_replication_group_name="8e1969ec-3ae3-4bd1-b80f-6de58b837ff5"
group_replication_start_on_boot=off#当前主机的主机名和复制组端口,建议用主机名
group_replication_local_address= "mgr1:33061"
group_replication_group_seeds= "mgr1:33061,mgr2:33061,mgr3:33061"
group_replication_bootstrap_group=off

启动数据库

[root@mgr01 ~]# systemctl start mysqld
[root@mgr01 ~]# mysql -uroot -p
mysql> use mysql;

创建复制组的用户

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER mgr@'%' IDENTIFIED BY 'SYCredhat123';
mysql> GRANT REPLICATION SLAVE ON *.* TO mgr@'%';
mysql> GRANT BACKUP_ADMIN ON *.* TO mgr@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;

复制用户凭据到复制组通道

mysql> CHANGE MASTER TO MASTER_USER='mgr', MASTER_PASSWORD='SYCredhat123' FOR CHANNEL 'group_replication_recovery';

查看复制组插件是否装载

mysql> SHOW PLUGINS;
# 如果有以下内容则表示已装载group_replication   | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL

启动复制组

mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION USER='mgr', PASSWORD='SYCredhat123';
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

查看复制组

mysql> SELECT * FROM performance_schema.replication_group_members;
# 出现以下信息表示成功
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | a49b5c8f-fd44-11eb-a9e2-000c29707010 | mgr1       |        3306 | ONLINE       | PRIMARY     | 8.0.21         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
1 row in set (0.00 sec)

两台slave配置内容

配置[mysqld]

【slave1】

只需要更改server_id=2和group_replication_local_address= “mgr2:33061”

【slave2】

只需要更改server_id=3和group_replication_local_address= “mgr3:33061”

vim /etc/my.cnf.d/mysql-server.cnf# 追加内容
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"#server_id 确保每个机器不一样
server_id=2
gtid_mode=ON
enforce_gtid_consistency=ONlog_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64plugin_load_add='group_replication.so'#uuid确保每个机器都一样,可以用uuidgen生成
group_replication_group_name="8e1969ec-3ae3-4bd1-b80f-6de58b837ff5"
group_replication_start_on_boot=off#当前主机的主机名和复制组端口,建议用主机名
group_replication_local_address= "mgr2:33061"
group_replication_group_seeds= "mgr1:33061,mgr2:33061,mgr3:33061"
group_replication_bootstrap_group=off

启动MySQL服务器

[root@mgr2 ~]# systemctl start mysqld

连接服务器

[root@mgr2 ~]# mysql -uroot -p

切换数据库

mysql> use mysql;

创建复制组用户

SET SQL_LOG_BIN=0;
CREATE USER mgr@'%' IDENTIFIED BY 'SYCredhat123';
GRANT REPLICATION SLAVE ON *.* TO mgr@'%';
GRANT BACKUP_ADMIN ON *.* TO mgr@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

复制用户凭据到复制组通道

mysql> CHANGE MASTER TO MASTER_USER='mgr', MASTER_PASSWORD='SYCredhat123' FOR CHANNEL 'group_replication_recovery';

查看复制组插件是否装载

mysql> show plugins;
# 如果有以下内容则表示已装载group_replication   | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL

启动复制组

mysql> START GROUP_REPLICATION USER='mgr', PASSWORD='SYCredhat123';

查看复制组

mysql> SELECT * FROM performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | a49b5c8f-fd44-11eb-a9e2-000c29707010 | mgr1       |        3306 | ONLINE       | PRIMARY     | 8.0.21         |
| group_replication_applier | a9eed5dc-fd44-11eb-aec2-000c29de2f00 | mgr2       |        3306 | ONLINE       | SECONDARY   | 8.0.21         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)

如果需要停止复制组,则使用

mysql> stop GROUP_REPLICATION

测试

master创建数据库

mysql> create database school;
Query OK, 1 row affected (0.01 sec)

slave查看数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| sys                |
+--------------------+
5 rows in set (0.01 sec)affected (0.01 sec)

MySQL之MGR原理+保姆级配置部署相关推荐

  1. STM32 FSMC/FMC原理保姆级讲解(二)

    上一话我们说了FSMC的基本原理及控制逻辑,这一讲我们来说下FSMC如何通过HAL库来进行配置,及具体参数 STM32 FSMC/FMC原理保姆级讲解(一) FSMC的初始化 在使用SRAM之前,我们 ...

  2. STM32 FSMC/FMC原理保姆级讲解(一)

    FSMC通俗讲解 FSMC 框图 FMC引脚说明 FMC地址映射 FSMC不同位宽操作 FSMC寄存器 FSMC时钟 FSMC 四种模式 FSMC参数设置 FSMC 控制异步 NOR FLASH 的时 ...

  3. Java EE系列(九)——Java EE连接Mysql数据库(JDBC保姆级教学)

    最近几天,peter xiao所在的项目小组也逐渐开始进行做最后的Java web课程大作业了,我们组所做的是运动会报名服务系统,其中涉及到很多数据的增删查改,所以需要依靠Mysql数据库来解决这些问 ...

  4. Centos7部署MySQL 8.0数据库环境保姆级教程

    MySQL官网地址:https://dev.mysql.com/downloads/mysql 一.安装MySQL 1.选择相应的mysql操作系统版本. ​ 2.选择RPM捆绑包,也就是第一项,下载 ...

  5. 保姆级教程—部署SpringBoot项目至云服务器(华为云)

    SpringBoot项目部署到云服务器(华为云) 部署项目主要有两种,一种是通过jar包进行部署,一种是通过war包进行部署 jar包部署 可以通过xshell先连接到远程服务器,这里的账号密码是你云 ...

  6. 教你彻底卸载MySQL 并重装(保姆级教程 )

    前言:都是自己踩过的坑(其他博主也有,不过我的特殊,按步骤走完重新安装仍要输入原密码,本篇主要解决和我问题类似的情况),跟着以下步骤走就行. 步骤一:关闭MySQL服务 右击[计算机],选择[管理], ...

  7. ELK保姆级安装部署教程

    一.ELK简介 在后台开发中,日志系统是一个很重要的系统,一个架构良好的日志系统,可以帮助开发者更清楚的了解服务器的状态和系统安全状况,从而保证服务器的稳定运行.日志主要包括系统日志和应用程序日志,运 ...

  8. Navicat的安装与mysql数据库的连接保姆级教程

    概述 上节写了mysql的安装与使用的详细方法,接下来为大家介绍Navicat的安装与mysql的连接. Navicat的安装 一.软件下载 网盘提取链接: https://pan.baidu.com ...

  9. MAC:查看和更改Mysql端口号(保姆级解决方案)

    MAC:查看和更改Mysql端口号 第零步: 进入终端,使用sudo su命令,并输入用户密码开启root高权限 sudo su 第一步: 终端输入命令如下,输入密码后进入mysql mysql -u ...

最新文章

  1. Adobe Reader阅读器打开时显示上次看到的页面
  2. python tensorflow tf.Session().run()函数(运行操作并评估“fetches”中的张量)
  3. 重新认识二级指针(Pointers to Pointers)
  4. 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件(转)
  5. centos安装llvm_Linux CentOS上编译并安装Clang教程
  6. php是啥_php是什么
  7. 用电脑对手机进行抓包
  8. 线段树(单点更新) HDOJ 4288 Coder
  9. Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”
  10. 计算机操作系统详细学习笔记(二):处理器管理
  11. C++ STL库学习——容器
  12. Matlab在线运行网站
  13. 斩波电路---视频课笔记
  14. ViewData与ViewBag比较
  15. 数据库范式讲解(1NF、2NF、3NF、BCNF)
  16. echarts基准线
  17. Kafka原理+操作+实战
  18. VMware vMotion简介
  19. 蟠桃c语言,【蟠桃记】 (C语言代码)递归法和归纳法
  20. Word 2016 如何设置黑底白字

热门文章

  1. 【ROS】—— 机器人系统仿真 —Rviz中控制机器人模型运动与URDF集成Gazebo(十五)
  2. 公式编辑器中也能自定义样式哦!
  3. 木耳泡多久最好 木耳泡多久就不能吃了
  4. 另一个 OleDbParameterCollection 中已包含 OleDbParameter
  5. 计算机在未关机的情况下重启,电脑不能关机,详细教您电脑关机后总是重启怎么办...
  6. 【第15周复盘】B站是个学习的网站
  7. 计算机主机省电模式,打开计算机显示屏后即显示省电模式,如何处理
  8. android虚线包裹布局,Android控件封装之虚线(一)
  9. android改微信号码,微信已支持改微信号:仅限安卓最新版,附修改办法
  10. Unity 启动时带参数,网页后端进行数据交互 UnityWebRequest ,Post,Get,Delete