玩转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.mzph.cn/news/587689.shtml

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

相关文章

QT+OSG/osgEarth编译之四十八:pcre+Qt编译(一套代码、一套框架,跨平台编译,版本:Cal3D-0.13)

目录 1、pcre介绍 2、文件下载 3、文件分析 4、pro文件 5、编译实践 1、pcre<

redis客户端

3、Redis客户端 3.1 Redis自带的客户端 带密码进入客户端 [rootqianfeng01 redis-4.0.14]# src/redis-cli -h 192.168.10.101 -p 6379 -a root Warning: Using a password with -a option on the command line interface may not be safe. 192.168.10.101:6379> keys * (…

js遍历后端返回的集合将条件相同的放入同一个数组内

项目场景&#xff1a; echarts折线图需要根据条件动态展示多条不同曲线 解决方案&#xff1a; 后端直接将使用sql将数据查询出来返回即可,因为我这里不是Java使用的C#不是很熟练后台不好写逻辑,所以在前端js完成的 代码如下: function createline(villagename, buildingname…

【MySQL】主从异步复制配置

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

Java面试题76-85

76、heap和stack有什么区别。 java的内存分为两类&#xff0c;一类是栈内存&#xff0c;一类是堆内存。栈内存是指程序进入一个方法时&#xff0c;会为这个方法单独分配一块私属存储空间&#xff0c;用于存储这个方法内部的局部变量&#xff0c;当这个方法结束时&#xff0c;…

rime中州韵 easyEnglish输入法

根据前面的几个自定义配置的练手,想必大家已经熟悉了所谓的 程序文件夹&#xff0c;用户文件夹&#xff0c;custom.yam 文档这几个概念了。在接下来的自定义配置讲述中&#xff0c;将默认大家是懂得所做的修改应该在哪个文件中进行的&#xff0c;讲述的速度将会有所加快。 今天…

给idea添加右键打开功能

添加文件夹右键程序打开 开始运行regedit 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 1、右键shell目录新建项Idea 2、右键Idea新建command 3、选择Idea 右侧空白出新建字符串 名字为Icon 值填入idea的运行程序地址 4、选择command 默认项填入idea的运行…

自定义异常面试及答案

1、为什么要使用自定义异常&#xff1f; 使用自定义异常&#xff08;Custom Exceptions&#xff09;在程序设计中是一个良好的实践&#xff0c;它有几个重要的好处&#xff1a; 提高代码可读性&#xff1a; 自定义异常的名称如果能清晰表达出异常的情况&#xff0c;那么阅读代…

25、商城系统(七):商城项目基础功能pom.xml(重要),mybatis分页插件

截止这一章,我们就不把重心放在前端,后台的基础代码,因为后面都是业务层面的crud。 前端直接替换这两个文件夹即可,后台代码也直接复制: 一、重新更新一下所有的pom.xml 这个地方我踩了好多坑,最后得到一个完整的pom.xml,建议大家直接用我的pom.xml替换即可。 1.comm…

08-C++ STL-容器

c STL-容器 1. 引入 我们想存储多个学员的信息&#xff0c;现在学员数量不定&#xff1f; 我们可以创建一个 数组 存储学员的信息但是这个数组大小是多少呢?过大会导致空间浪费&#xff0c;小了又需要扩容对其中的数据进行操作也较为复杂每次删除数据后还要对其进行回收等操…

K8s之声明式APIs

大家好&#xff0c;我是升仔 引言 Kubernetes&#xff08;K8s&#xff09;是一个开源的容器编排系统&#xff0c;用于自动化部署、扩展和管理容器化应用。在K8s中&#xff0c;声明式APIs&#xff08;Application Programming Interfaces&#xff09;是一种核心概念&#xff0…

springboot+mybatis项目

1:pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

2023 NCTF writeup

CRYPTO Sign 直接给了fx,gx&#xff0c;等于私钥给了&#xff0c;直接套代码&#xff0c;具体可以参考&#xff1a; https://0xffff.one/d/1424 fx [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

【逗老师的无线电】ICOM IC-705终端模式Terminal Mode直连反射器配置-内置网关IP直连篇

各位友台大家好呀&#xff0c;逗老师最近整了一台IC-705&#xff0c;最吸引人的莫过于这玩意可以IP直连反射器。下面简单介绍一下这个功能和其配置方法 目录 一、功能二、依赖条件三、配置3.1、IC-705连接WIFI3.2、配置Terminal Mode3.2.1、点击MENU进入菜单&#xff0c;翻到第…

C# JsonString转Object以及Object转JsonString

主要讲述了两种方法的转换&#xff0c;最后提供了格式化输出JsonString字符串。 需要引用程序集 System.Web.Extensions.dll、Newtonsoft.Json.dll System.Web.Extensions.dll可直接在程序集中引用&#xff0c;Newtonsoft.Json.dll需要在NuGet中下载引用。 详细代码&#xf…

WEB 3D技术 three.js 雾 基础使用讲解

本文 我们说一下 雾 在three.js中有一个 Fog类 它可以创建线性雾的一个效果 她就是模仿现实世界中 雾的一个效果 你看到远处物体会组件模糊 直到完全被雾掩盖 在 three.js 中 有两种雾的形式 一种是线性的 一种是指数的 个人觉得 线性的会看着自然一些 他是 从相机位置开始 雾…

报错大全(未完待续)

springboot Could not find artifact org.springframework.boot:spring-boot-maven-plugin 报错环境&#xff1a;昨天的springboot项目的pom文件正常&#xff0c;今天再打开就会有些依赖爆红 解决步骤&#xff1a; 去maven的仓库里找你下载的依赖文件&#xff0c;路径是你的…

【机电、机器人方向会议征稿|不限专业|见刊快】2024年机械、 图像与机器人国际会议(IACMIR 2024)

【机电、机器人方向会议征稿|不限专业|见刊快】2024年机械、 图像与机器人国际会议&#xff08;IACMIR 2024&#xff09; 2024 International Academic Conference on Machinery, Images, and Robotics 会议将聚焦“机械、成像和机器人”相关的最新研究领域&#xff0c;为国内…

蓝桥杯C/C++程序设计——特别数的和

题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 0&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 n 中&#xff0c;所有这样的数的…

S32K312使用ITCM向FLASH代码区写入数据

使用C40_IP的系列方法向FLASH代码区写入数据时&#xff0c;程序会卡死在读取写操作的状态C40_Ip_MainInterfaceWriteStatus()这个方法中。本文主要介绍S32K312通过ITCM的方式&#xff0c;通过C40_IP的方法向FLASH代码区成功写入数据的方法和步骤。 首先&#xff0c;验证一下C4…