mysql高可用之组复制 (MGR)

目录

1 MySQL的主从复制介绍

2 组复制流程

3 组复制单主和多主模式

3.1 single-primary mode(单写或单主模式)

3.2 multi-primary mode(多写或多主模式)

4 实现mysql组复制

4.1 MASTER 1

4.2 MASTER 2

4.3 MASTER 3

4.4 MASTER 1 检验


1 MySQL的主从复制介绍

MySQL Group Replication(简称 MGR ) MySQL 官方于 2016 12 月推出的一个全新的高可用与高扩 展的解决方案

组复制是 MySQL 5.7.17 版本出现的新特性,它提供了高可用、高扩展、高可靠的 MySQL 集群服务

MySQL 组复制分单主模式和多主模式,传统的mysql复制技术仅解决了数据同步的问题,

MGR 对属于同一组的服务器自动进行协调。对于要提交的事务,组成员必须就全局事务序列中给定事务的顺序达成一致

提交或回滚事务由每个服务器单独完成,但所有服务器都必须做出相同的决定

如果存在网络分区,导致成员无法达成事先定义的分割策略,则在解决此问题之前系统不会继续进行,这是一种内置的自动裂脑保护机制

MGR由组通信系统( Group Communication System GCS ) 协议支持

该系统提供故障检测机制、组成员服务以及安全且有序的消息传递

2 组复制流程

首先我们将多个节点共同组成一个复制组,在执行读写(RW)事务的时候,需要通过一致性协议层 (Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里大多数人(对应 Node 节点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1),这样才可以进行提交,而不是原发起方一个说了算。而针对只读(RO)事务则不需要经过组内同意,直接 提交 即可

节点数量不能超过 9

3 组复制单主和多主模式

3.1 single-primary mode(单写或单主模式)

单写模式 group 内只有一台节点可写可读,其他节点只可以读。当主服务器失败时,会自动选择新的主服务器

3.2 multi-primary mode(多写或多主模式)

组内的所有机器都是 primary 节点,同时可以进行读写操作,并且数据是最终一致的。

4 实现mysql组复制

为了避免出错,在所有节点中从新生成数据库数据

编辑主配置文件:

4.1 MASTER 1

[root@mysql-01 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server_id=10
gtid_mode=ON
enforce-gtid-consistency=ON
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"# 将主从复制的信息存储在表中  提高性能很重要
master_info_repository=TABLE
relay_log_info_repository=TABLE# 禁止对二进制日志校验
binlog_checksum=NONE# 开启从服务器的日志更新记录
log_slave_updates=ON# 二进制日志文件名
log_bin=binlog# 二进制日志格式
binlog_format=ROW# 加载 Group Replication 插件
plugin_load_add='group_replication.so'transaction_write_set_extraction=XXHASH64# 设置 Group Replication 的集群名称
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"# 控制 MySQL 服务启动时是否自动启动 Group Replication
group_replication_start_on_boot=off# 指定本地实例的地址和端口,用于 Group Replication
group_replication_local_address="192.168.239.210:33061"# 指定集群种子成员列表,用于新成员加入集群
group_replication_group_seeds="192.168.239.210:33061,192.168.239.220:33061,192.168.239.230:33061"# 设置允许连接到 Group Replication 的 IP 白名单
group_replication_ip_whitelist="192.168.239.0/24,127.0.0.1/8"# 控制是否将当前实例作为集群的第一个成员启动
group_replication_bootstrap_group=off# 控制是否启用单主模式  禁用单主那就是多主
group_replication_single_primary_mode=OFF# 强制执行跨所有实例的更新检查
group_replication_enforce_update_everywhere_checks=ON# 允许具有不连续 GTID 的实例加入集群
group_replication_allow_local_disjoint_gtids_join=1
mysql> alter user root@'localhost' identified by 'Openlab123!';-- 禁用二进制日志记录,以避免在创建用户时记录日志
mysql> set sql_log_bin=0;
mysql> create user shuyan@'%' identified by 'Openlab123!';-- 授予 shuyan 用户复制从属权限,允许其从任何主机连接
mysql> grant replication slave on *.* to shuyan@'%';
mysql> flush privileges;-- 重新启用二进制日志记录
mysql> set sql_log_bin=1;-- 设置复制源(Master)的用户名和密码,用于 Group Replication 的恢复过程
mysql> change master to -> master_user='shuyan',-> master_password='Openlab123!'-> for channel 'group_replication_recovery';-- 允许当前实例作为集群的第一个成员启动 Group Replication
mysql> set global group_replication_bootstrap_group=on;-- 启动 Group Replicatio
mysql> start group_replication;-- 禁止当前实例作为集群的第一个成员启动 Group Replication
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 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 14ffce7c-61e9-11ef-bec7-000c29a51779 | mysql-01    |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

4.2 MASTER 2

[root@mysql-02 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server_id=20
gtid_mode=ON
enforce-gtid-consistency=ON
#禁用指定存储引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
# 打开数据库中继
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
# 加载组复制插件
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64 #把每个事件编码为加密散列
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="192.168.239.220:33061"
group_replication_group_seeds="192.168.239.210:33061,192.168.239.220:33061,192.168.239.230:33061"
group_replication_ip_whitelist="192.168.239.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
group_replication_allow_local_disjoint_gtids_join=1
mysql> alter user 'root'@'localhost' identified by 'Openlab123';
mysql> set sql_log_bin=0;
mysql> create user shuyan@'%' identified by 'Openlab123!';
mysql> grant replication slave on *.* to shuyan@'%';
mysql> flush privileges;
mysql> set sql_log_bin=1;
mysql> change master to -> master_user='shuyan',-> master_password='Openlab123!'-> for channel 'group_replication_recovery';mysql> start group_replication;
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 14ffce7c-61e9-11ef-bec7-000c29a51779 | mysql-01    |        3306 | ONLINE       |
| group_replication_applier | 51a6613a-61eb-11ef-bdb3-000c299efdf0 | mysql-02    |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

4.3 MASTER 3

[root@mysql-03 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=30
gtid_mode=ON
enforce-gtid-consistency=ON
#禁用指定存储引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
# 打开数据库中继
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
# 加载组复制插件
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64 #把每个事件编码为加密散列
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="192.168.239.230:33061"
group_replication_group_seeds="192.168.239.210:33061,192.168.239.220:33061,192.168.239.230:33061"
group_replication_ip_whitelist="192.168.239.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
group_replication_allow_local_disjoint_gtids_join=1
mysql> set sql_log_bin=0;
mysql> create user 'shuyan'@'%' identified by 'Openlab123!';
mysql> grant replication slave on *.* to shuyan@'%';
mysql> flush privileges;
mysql> set sql_log_bin=1;
mysql> change master to-> master_user='shuyan',-> master_password='Openlab123!'-> for channel 'group_replication_recovery';mysql> start group_replication;

4.4 MASTER 1 检验

[root@mysql-01 ~]# mysql -uroot -pOpenlab123! -e "select * from performance_schema.replication_group_members;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 14ffce7c-61e9-11ef-bec7-000c29a51779 | mysql-01    |        3306 | ONLINE       |
| group_replication_applier | 51a6613a-61eb-11ef-bdb3-000c299efdf0 | mysql-02    |        3306 | ONLINE       |
| group_replication_applier | 6d1255c0-61ec-11ef-99d9-000c298f2a8a | mysql-03    |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

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

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

相关文章

【Linux】初步识操作系统

linux专栏:《Linux入门系列》 系列文章:gdb-调试器初入门(简单版使用) 编辑器vim入门(概念模式转换技巧) 目录 1. 概念 2. 设计操作系统的目的 3. 定位:操作系统负责管理 4. 如何理解管理 …

使用IntelliJ IDEA将本地项目推送到远程Git

1,安装Git 打开 下载地址,下载Git安装包。根据引导程序,完成安装。 2,IntelliJ IDEA配置Git 打开IntelliJ IDEA,依次点击File>>Settings…>>Git,然后配置自己的Git的路径,然后点…

mysql 死锁 锁表的解决方法

查看那个表锁了 SHOW OPEN TABLES where In_use > 0; show processlist SELECT * FROM information_schema.INNODB_TRX; 查看锁的进程 kill 掉进程id (trx_mysql_thread_id)

PCIE-Precode

Transmitter Precode Request: Precoding可以有效的降低Burst errors(突发连续)的影响,但是Bit Error Rate(BER)将上升为之前的两倍. ​​​​​​[FPGA 实现及PCIe IP 核知识点] PCIe为什么要增加Precoding&#xff…

趣味算法------拯救阿拉德大陆

目录 ​编辑 题目描述: 思路解析: 具体代码: 总结: 题目描述: 此时一批勇士也随之而来,但其能力也是参差不齐,我们需要挑选出最优秀的勇士来守护这片大陆。每位勇士都有属于自己的编号&am…

网络安全售前入门04——审计类产品了解

目录 1.前言 2.数据库审计介绍 2.1产品架构功能 2.2应用场景 2.3部署形式 2.4产品价值 2.5选型依据 1.前言 为方便初接触网络安全售前工作的小伙伴了解网安行业情况,我制作一系统售前入门(安全产品,安全服务,法律法规等)文章介绍,希望能给初进网安职场的小伙伴提供…

上书房信息咨询:医疗满意度调研

随着人们生活水平的不断提高,医疗服务的需求日益增长。近期,上书房信息咨询受托完成了某市医疗市场的满意度调研,旨在深入了解市民对医疗服务的评价和需求,为提升医疗服务质量提供有力支持。 近年来,某市致力于推进医…

国产游戏技术能否引领全球

目录 1.概述 1.1.面临的挑战 1.2.机遇 1.3.IT技术创新如何推动行业发展 2.技术解析 2.1.图形渲染技术 2.2.物理引擎 2.3.人工智能 (AI) 3.行业影响 3.1.对国内游戏开发行业的影响 3.2.IT人才需求变化 3.3.技术发展方向 4.未来展望 4.1. 发展前景 4.2. IT技术人员…

分布式基础理论——CAP理论和BASE理论

文章目录 CAP 理论BASE 理论参考资料 CAP 理论 CAP定理(CAP theorem)指出,在分布式系统中,设计读写操作时只能同时满足以下三个特性中的两个: 一致性(Consistency) : 所有节点访问同一份最新的…

用于目标说话人提取的统一视听线索

第二章 目标说话人提取之《Unified Audio Visual Cues for Target Speaker Extraction 》 文章目录 前言一、任务二、动机三、挑战四、方法1.总体架构2.tes网络3. 融合网络4.损失函数 五、实验评价1.数据集2.消融实验3.客观评价4.主观评价 六、结论七、知识小结 前言 语音新手…

93.WEB渗透测试-信息收集-Google语法(7)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:92.WEB渗透测试-信息收集-Google语法(6) • intext • intext 的作…

[数据集][目标检测]电力场景输电线导线散股检测数据集VOC+YOLO格式3890张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3890 标注数量(xml文件个数):3890 标注数量(txt文件个数):3890 标注…

亲测好用,吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【2024年9月 更新】

废话不多说,直接分享正文~ 以下是小编为大家搜集到的最新的ChatGPT国内站,各有优缺点。 1、AI Plus(稳定使用) 推荐指数:⭐⭐⭐⭐⭐ yixiaai.com 该网站已经稳定运营了1年多了。2023年3月份第一批上线的网…

网络udp及ipc内存共享

大字符串找小字符串 调试 1. 信号处理函数注册:•一旦使用 signal 函数注册了信号处理函数,该函数就会一直有效,直到程序结束或者显式地取消注册。2. 注册多次的影响:•如果多次注册同一信号的处理函数,最后一次注册的…

PHP软件下载-安装-环境配置

.1.下载 下载地址如下 windows.php.net - /downloads/releases/ 安装包如下. .2.安装 可以在D盘或者E盘的根目录创建一个自定义目录。注意文件夹目录中不能包含中文,不能包含空格等特殊字符。 版本说明: (1)ts表示非线程安全版本。这个安装包还指明了…

Spring security 密码加密使用

一、密码加密 2011年12月21日,有人在网络上公开了一个包含600万个CSDN 用户资料的数据库,数据全部为明文储存,包含用户名、密码以及注册邮箱。事件发生后CSDN 在微博、官方网站等渠道发出了声明、解释说此数据库系2009 年备份所用&#xff0c…

Adobe After Effects的插件--------CC Ball Action

CC Ball Action是粒子效果器,其将2D图层变为一个个由3D小球构成的图层。它是AE内置的3D插件。 使用条件 使用该插件的图层需是2D图层。 我们以一张图片素材为例: 给图片图层添加CC Ball Action效果控件,然后新建一个摄像机(利用摄像机旋转、平移、推拉工具,方便在各个角…

OpenCV几何图像变换(6)计算反转仿射变换函数invertAffineTransform()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 反转一个仿射变换。 该函数计算由 23 矩阵 M 表示的逆仿射变换: [ a 11 a 12 b 1 a 21 a 22 b 2 ] \begin{bmatrix} a_{11} & a…

OpenCV绘图函数(2)绘制圆形函数circle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 绘制一个圆。 cv::circle 函数用于绘制一个给定中心和半径的简单圆或填充圆。 函数原型 void cv::circle (InputOutputArray img,Point cen…

【JVM】垃圾回收算法(一)

垃圾回收算法 Java程序在运行过程中会产生大量的对象,但是内存大小是有限的,如果光用而不释放,那内存迟早被耗尽。如C/C程序,需要程序员手动释放内存,Java则不需要,是由垃圾回收期去自动回收。垃圾回收器回…