玩转MYSQL|详细分析mysql-MGR集群搭建

 

目录

 

1、简介

2、环境准备

2.1 数据库服务器规划

2.2 安装mysql5.7.20

2.3 设置hostname和ip映射

3、创建复制环境

3.1 服务器host68.cn

3.1.1 配置/etc/my.cnf

3.1.2 服务器host68.cn上建立复制账号:

3.1.3 在mysql服务器host68.cn上安装group replication插件

3.1.4 启动服务器host68.cn上mysql的group replication

3.1.5 查看mgr的状态

3.1.6 测试服务器host68.cn上的mysql

3.2 复制组添加新实例host69.cn

3.2.1 修改/etc/my.cnf 配置文件,方法和之前相同

3.2.2 用户授权

3.2.3 把实例添回到之前的复制组

3.2.4 在host68.cn上查看复制组状态

3.3 以同样方法添加host70.cn

3.4 查看复制组状态


1、简介

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

  • 高一致性,基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;
  • 高容错性,只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;
  • 高扩展性,节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;
  • 高灵活性,有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。

2、环境准备

2.1 数据库服务器规划

ip地址主机名数据库端口号server Id
10.10.10.68host68mysql-5.7.203306100
10.10.10.69host69mysql-5.7.203306101
10.10.10.70host70mysql-5.7.203306102

2.2 安装mysql5.7.20

在这里就不详细介绍。

2.3 设置hostname和ip映射

10.10.10.68 host68.cn
10.10.10.69 host69.cn
10.10.10.70 host70.cn

注意;在三台数据库服务器上都设置。

3、创建复制环境

3.1 服务器host68.cn

3.1.1 配置/etc/my.cnf

vim /etc/my.cnf[mysqld]# Group Replication
server_id = 100  #服务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 = 'host68.cn:33061' #以本机端口33061接受来自组中成员的传入连接
loose-group_replication_group_seeds =' xuhost.cn:33061, xueghostn:33062, xuegodhost33063' #组中成员访问表
loose-group_replication_bootstrap_group = off #不启用引导组

重启mysql服务

3.1.2 服务器host68.cn上建立复制账号:

mysql> set SQL_LOG_BIN=0;   #停掉日志记录
mysql> grant replication slave on *.* to repl@'10.10.10.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1;  #开启日志记录
mysql> change master to master_user='repl',master_password='123456'  for channel 'group_replication_recovery';  #构建group replication集群

3.1.3 在mysql服务器host68.cn上安装group replication插件

-- 安装插件

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

-- 查看group replication组件

mysql> show plugins。

3.1.4 启动服务器host68.cn上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;

3.1.5 查看mgr的状态

-- 查询表performance_schema.replication_group_members
mysql> select * from performance_schema.replication_group_members;

3.1.6 测试服务器host68.cn上的mysql

mysql> create database test;
Query OK, 1 row affected (0.01 sec)mysql> use test;
Database changed
mysql> create table t1 (id int primary key,name varchar(20));  #注意创建主键
Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 values (1,'man');
Query OK, 1 row affected (0.01 sec)mysql> select * from t1;
+----+------+
| id  | name |
+----+------+
|  1 | man   |
+----+------+
1 row in set (0.00 sec)mysql> show binlog events;
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| Log_name      | Pos | Event_type     | Server_id | End_log_pos | Info                                                              |
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| binlog.000001 |   4 | Format_desc    |       181 |         123 | Server ver: 5.7.17-log, Binlog ver: 4                             |
| binlog.000001 | 123 | Previous_gtids |       181 |         150 |                                                                   |
| binlog.000001 | 150 | Gtid           |       181 |         211 | SET @@SESSION.GTID_NEXT= 'ce9be252-2b71-11e6-b8f4-00212844f856:1' |
| binlog.000001 | 211 | Query          |       181 |         270 | BEGIN                                                             |
| binlog.000001 | 270 | View_change    |       181 |         369 | view_id=14916679781649312:1                                       |
| binlog.000001 | 369 | Query          |       181 |         434 | COMMIT                                                            |
| binlog.000001 | 434 | Gtid           |       181 |         495 | SET @@SESSION.GTID_NEXT= 'ce9be252-2b71-11e6-b8f4-00212844f856:2' |
| binlog.000001 | 495 | Query          |       181 |         585 | create database test                                              |
| binlog.000001 | 585 | Gtid           |       181 |         646 | SET @@SESSION.GTID_NEXT= 'ce9be252-2b71-11e6-b8f4-00212844f856:3' |
| binlog.000001 | 646 | Query          |       181 |         769 | use `test`; create table t1(c1 int primary key, c2 text not null) |
| binlog.000001 | 769 | Gtid           |       181 |         830 | SET @@SESSION.GTID_NEXT= 'ce9be252-2b71-11e6-b8f4-00212844f856:4' |
| binlog.000001 | 830 | Query          |       181 |         898 | BEGIN                                                             |
| binlog.000001 | 898 | Table_map      |       181 |         941 | table_id: 219 (test.t1)                                           |
| binlog.000001 | 941 | Write_rows     |       181 |         983 | table_id: 219 flags: STMT_END_F                                   |
| binlog.000001 | 983 | Xid            |       181 |        1010 | COMMIT /* xid=40 */                                               |
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
15 rows in set (0.00 sec)

3.2 复制组添加新实例host69.cn

3.2.1 修改/etc/my.cnf 配置文件,方法和之前相同

[mysqld]# Group Replication
server_id = 101   #注意服务ID不一样
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= ROWtransaction_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 = 'host69.cn:33062'
loose-group_replication_group_seeds = 'xuhost.cn:33061, xueghostn:33062, xuegodhost33063'
loose-group_replication_bootstrap_group = off#重启mysql服务

3.2.2 用户授权

mysql> set SQL_LOG_BIN=0;   #停掉日志记录
mysql> grant replication slave on *.* to repl@'10.10.10.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1;  #开启日志记录
mysql> change master to master_user='repl',master_password='123456'  for channel 'group_replication_recovery';  #构建group replication集群-- 安装group replication插件
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.00 sec)

3.2.3 把实例添回到之前的复制组

mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
Query OK, 0 rows affected (0.00 sec)mysql> start group_replication;
Query OK, 0 rows affected (6.65 sec)

3.2.4 在host68.cn上查看复制组状态

mysql> select * from performance_schema.replication_group_members;

3.2.5 在新回的实例上查看数据库发现test库和t1表已经同步

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)mysql> select * from t1;
+----+------+
| id  | name |
+----+------+
|  1 | man |
+----+------+
1 row in set (0.00 sec)

3.3 以同样方法添加host70.cn

#详细步骤请参考3.2, 这里只给出配置文件/etc/my.cnf:
[mysqld]# Group Replication
server_id = 102  #注意服务id不一样
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= ROWtransaction_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 = 'host70.cn:33063'
loose-group_replication_group_seeds ='xuhost.cn:33061, xueghostn:33062, xuegodhost33063'
loose-group_replication_bootstrap_group = off#重启mysql服务 然后参照第二个节点步骤操作加入组复制。

3.4 查看复制组状态

mysql> select * from performance_schema.replication_group_members;

以上单master节点的集群就搭建完毕!

查看集群参数设置列表show variables like 'group_replication%';


multi-primary模式(多主master模式):

1、该模式启用需设置两个参数

group_replication_single_primary_mode=0 #这个参数很好理解,就是关闭单master模式

group_replication_enforce_update_everywhere_checks=1 #这个参数设置多主模式下各个节点严格一致性检查

2、 默认启动的都是单master模式,其他节点都设置了read_only、super_read_only这两个参数,需要修改这两个配置

3、 完成上面的配置后就可以执行多点写入了,多点写入会存在冲突检查,这耗损性能挺大的,官方建议采用网络分区功能,在程序端把相同的业务定位到同一节点,尽量减少冲突发生几率。

由单主模式修改为多主模式方法

在原来单主模式的主节点执行操作如下:

stop GROUP_REPLICATION;

set global group_replication_single_primary_mode=off;

set global group_replication_enforce_update_everywhere_checks=ON;

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

而对于其他的节点,执行下面的操作即可。

stop GROUP_REPLICATION;
set global group_replication_allow_local_disjoint_gtids_join=ON;(即使含有组中不存在的事务,也允许当前server加入组)
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=ON;
start group_replication;

直接搭建多主master模式

#my.cnf配置文件:
# Group Replication
server_id = 100  #服务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 = 'host68.cn:33061' #以本机端口33061接受来自组中成员的传入连接
loose-group_replication_group_seeds = 'host.cn:33061,hostn:33062,host33063' #组中成员访问表
loose-group_replication_bootstrap_group = off  #不启用引导组
group_replication_single_primary_mode = off  #关闭单master模式
group_replication_enforce_update_everywhere_checks = ON  #多主一致性检查

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/227921.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tuxera NTFS for Mac2024免费Mac读写软件下载教程

在日常生活中,我们使用Mac时经常会遇到外部设备不能正常使用的情况,如:U盘、硬盘、软盘等等一系列存储设备,而这些设备的格式大多为NTFS,Mac系统对NTFS格式分区存在一定的兼容性问题,不能正常读写。 那么什…

Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动

为什么要使用MQ? 在Spring Boot Event这篇文章中已经通过Guava或者SpringBoot自身的Listener实现了事件驱动,已经做到了对业务的解耦。为什么还要用到MQ来进行业务解耦呢? 首先无论是通过Guava还是Spring Boot自身提供的监听注解来实现的事…

C语言——扫雷

扫雷是一款经典的小游戏,那如何使用C语言实现一个扫雷游戏呢? 一、全部源码 直接把全部源码放在开头,如有需要,直接拿走。 源码分为三个文件: test.cpp/c 主函数的位置 #include "game.h"int main() {…

x-cmd pkg | gum - 很好看的终端 UI 命令行工具

目录 简介首次用户功能特点Bubbles 与 Lip Gloss进一步探索 简介 gum 由 Charm 组织于 2022 年使用 Go 语言开发。旨在帮助用户编写 Shell 脚本与 dotfiles 时提供一系列快捷使用,可配置,可交互,美观的 Terminal UI 组件。 首次用户 使用 x…

常用的 MySQL 可视化客户端

数据库可视化客户端(GUI)让用户在和数据库进行交互时,能直观地查看、创建和修改对象,如:表、行和列。让数据库操作变得更方便了。 今天,我们来了解下目前市场上最常用的 MySQL 可视化客户端。 官方&#x…

详解数组的轮转

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

c# listbox 添加图标和文字

给listbox 添加 DrawItem 事件 private void listBox1_DrawItem(object sender, DrawItemEventArgs e){int index e.Index;//获取当前要进行绘制的行的序号,从0开始。Graphics g e.Graphics;//获取Graphics对象。Rectangle bound e.Bounds;//获取当前要绘制的行的…

【设计模式】状态模式

文章目录 引例状态模式理论状态模式代码优化结合享元模式并发问题解决 策略模式 VS 状态模式 引例 交通信号灯系统的设计与实现 方案一 传统设计方案 定义交通灯颜色的枚举 public enum LightColor { Green,Red,Yellow }交通灯类TrafficLight,处理颜色转换等业务…

【AMD Xilinx】ZUBoard(3):通过AXI GPIO接收PL端的按键输入

【AMD Xilinx】ZUBoard(3):通过AXI GPIO接收PL端的按键输入 一、本项目实现的功能二、Vivado工程1. 添加AXI GPIO2. 配置AXI GPIO3. 根据原理图查找对应管脚4. I/O Planning5.XDC 三、ARM代码1. 地址空间2. 函数说明3. 实际的C代码实现4. 运行…

VitulBox中Ubuntu虚拟机安装JAVA环境——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项

前言 在进行之后操作是请下载好JDK,之后的内容是以Ubuntu虚拟机中安装java环境续写。 提示:以下操作是在虚拟机hadoop用户下操作的,并为安装java环境作准备 一、更新APT 为了确保Hadoop安装过程顺利进行,建议用hadoop用户登录…

基于SpringBoot实现的前后端分离电影评分项目,功能:注册登录、浏览影片、热门影片、搜索、评分、片单、聊天、动态

一、项目介绍 本项目主要基于SpringBoot、Mybatis-plus、MySQL、Redis实现的影片评分项目。 本系统是前后端分离的,分别由三个子项目构成:java服务端、用户前端、管理员管理前端 关键词:springboot java vue mysql reids websocket 毕业设计…

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷①

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项(高职组) 样题(第1套) 目录 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项(高职组) 样题(第1套) 模块一…

Java Log 学习笔记

参考文章: 1.Java 日志从入门到实战 2.Java日志框架的发展历史,你不想了解一下吗 背景 想自定义 logback 配置文件进行日志分级别记录到不同文件,遇到了几个问题(使用的是 spring-boot 构建的项目,spring-boot 版本为…

多模态大模型-CogVLm 论文阅读笔记

多模态大模型-CogVLm 论文阅读笔记 COGVLM: VISUAL EXPERT FOR LARGE LANGUAGEMODELS 论文地址 :https://arxiv.org/pdf/2311.03079.pdfcode地址 : https://github.com/THUDM/CogVLM时间 : 2023-11机构 : zhipuai,tsinghua关键词: visual language model效果:(2023…

MySQL基础入门(二)

多表内容 一对多 这个内容是黑马的入门问题,可以带大家思考一下这个怎么设计 我们要知道一个岗位可以对应很多用户,而一个用户只能对应一个岗位,这就属于一对多的类型 那么我们需要怎么将他们进行关联呢? 现在我们可以通过一个…

蓝桥杯C/C++程序设计——单词分析

题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出…

Zookeeper 实战 | Zookeeper 和Spring Cloud相结合解决分布式锁、服务注册与发现、配置管理

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

Media Encoder各版本安装指南

Media Encoder 链接地址如下: https://pan.baidu.com/s/1qOowHfm9rhrOOMljYgQCsA?pwd0531 1.鼠标右击【ME2023(64bit)】压缩包选择(win11系统需先点击“显示更多选项”)【解压到 ME2023(64bit)】。 2.打开解压后的文件夹,鼠标右…

16.综合项目实战

一、基础演练: 1、建库、建表 # 创建数据库 create database mysql_exampleTest; use mysql_exampleTest; # 学生表 CREATE TABLE Student( s_id VARCHAR(20), s_name VARCHAR(20) NOT NULL DEFAULT , s_birth VARCHAR(20) NOT NULL DEFAULT , s_sex VARC…

分布式存储考点梳理 + 高频面试题

欢迎来到分布式存储模环节,本文我将和你一起梳理面试中分布式系统的数据库的高频考点,做到温故知新。 面试中如何考察分布式存储 广义的分布式存储根据不同的应用领域,划分为以下的类别: 分布式协同系统 分布式文件系统 分布式…