MySQL复制技术方案——组复制

news2024/11/24 20:20:45

1.原理

增强半同步复制虽然解决了HA切换之后的幻读问题,也从一定程度上使得主从实例 之间的数据一致性保障得到增强,但是仍然还有很多问题需要解决。

例如:
HA切换程度需要依赖于MySQL服务器之外的第三方程序实现,维护十分繁琐, 当发生HA切换之后,原主库重新加入集群还需要处理其上的一些多余数据(在半同步复制下,主库的最后一个binlog事务或最后一个binlog队列中的事务可能从库并未收到(大概率),当原主库崩溃恢复之后,MySQL服务器会根据binlog中已经落盘的内容对这些事 务进行重新提交,而这些事务在新主库中并不存在,需要对这些事务进行回滚处理)。

无法很好地解决写节点多活问题,主从复制架构虽然可以通过搭建双主(两个实例互为主从)架构来实现在任意一个节点中的数据变更都可以同步到互为主从的节点中, 但是如果两个节点同时对一条数据做修改,将产生相互覆盖且结果不可预期的现象,无法做到有效的事务冲突检测 为了解决上述棘手的问题,组复制技术应运而生。

Oracle MySQL 官方基于主从复制 基础架构实现的组复制(MySQL Group Repliation,MGR,以下提到MGR都是指官方集群复制技术),是当下主流的集群复制架构之一,当然还有其他集群复制技术[例如: Percona Server分支基于第三方的Galera复制插件实现的集群复制技术 Percona Xtradb Cluster(PXC);

MariaDB 分支基于第三方的Galera复制插件实现的集群复制技术 MariaDB Galera Cluster(MGC),这里不展开介绍了,有兴趣的读者请自行研究]。 那么问题来了,MGR是如何解决上述两个棘手的问题的呢?首先,我们来看看MGR 的应用架构,如下图所示(该图来自Oracle MySQL 官方),至少需要3个节点(建议最多不要超过8个,因为节点越多写性能越差)。
在这里插入图片描述

为什么至少需要3个节点呢?因为实现集群复制技术的组复制插件是基于Paxos 协议实现的,而Paxos协议提供了一种仲裁机制,用于在写节点崩溃之后,通过集群内部节点之间的仲裁来决定是否需要剔除故障节点,并选举出新的写节点,类似于下图1所示(该图来自Oracle MySQL官方)。

当S1节点崩溃之后,在集群内部重新选举S2作为写节点, 发起写请求的客户端就可以继续对集群发起写请求了。整个写请求故障转移的过程都是在组复制插件内部自动完成的,无须人工干预(注意:这里的无须人工干预指的是数据库集群自身的可用性,而不是应用的写请求路由,应用的写请求发往哪个节点的路由还是需要依赖第三方路由插件或者使用智能DNS解析的)。

在单节点写模式下,故障自动转移示意图,如下图所示。
在这里插入图片描述
在多节点写模式下,自动故障转移示意图如下图所示。
在这里插入图片描述
通过上述功能MGR解决了故障自动转移的问题,那么多节点写的事务冲突是如何解决的呢?请见下图(该图来自Oracle MySQL官方)。

前面说过,MGR是基于主从复制基础架构实现的,主要是在事务提交的过程中嵌入单独的binlog封装逻辑,并通过专门的 group_replication_recovery复制通道进行数据传输,组复制插件使用Paxos协议的原子广播特性来保证集群内的大多数节点都能接收到数据包,当节点接收到write set(写集)之后,每个节点上的分布式状态机按照相同的规则对事务进行排序,并进行事务的冲突认证检测。

对于写节点(主节点)而言,当冲突认证检测通过之后,将数据变更写入自身的 binlog中,然后在存储引擎层进行提交(如果发现事务冲突,则进行事务回滚);对于读 节点(从节点)而言,当冲突认证检测通过之后,就把主库发送过来的binlog写入自身的 relay log中,然后SQL线程读取relay log进行重放,并把重放的binlog写入自身的binlog 中,接下来在存储引擎内部进行提交(如果发现事务冲突,则丢弃主库发送过来的binlog)。
在这里插入图片描述

2.配置示例

(1)写节点(主节点)
在这里插入图片描述
(2)读节点(从节点)
在这里插入图片描述

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

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

相关文章

2022年12月安全事件盘点

2022年12月安全事件盘点 一、基本信息 2022年12月安全事件共造成约8327万美元损失,金额数量较上月有所下降。本月RugPull数量基本与上月持平。但临近年底,熊市社媒诈骗等较上个月有所增加,Discord攻击诈骗成为重灾区。另外本月依然有钱包&…

产线工控设备安全现状分析

工控设备安全现状 工业控制系统是支撑国民经济的重要设施,是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域,支撑起国计民生的关键基础设施。 随着传统的工业转型,数字化、网络化和智能化的工…

IB课程为什么深受国际学生的喜爱?

凯恩斯是一个被大自然包围的城市。由于得天独厚的地理位置,在凯恩斯随时都可以让你感受到与自然融为一体的亲近与惬意。此外,安全性高也是一大优势,昆士兰当地人对国际学生非常热情友好,在你需要帮助的时候,从来不会感…

C++跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架源码

C跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架源码 完整代码下载地址:跨平台的网络通信库及服务器编程框架源码 一、描述 1.1、库组成1.2、功能模块组成 1.2.1…

linux配置xrdp

源码 https://github.com/neutrinolabs/xrdp.git xrdp需要安装openssl-devel, pam-devel, libX11-devel, libXfixes-devel, libXrandr-devel ./bootstrap //git submodule下载,需要安装nasm,autoconf生成configure ./configure && make -j4 &a…

区块链与智慧城市

智慧城市的概念涵盖了城市领域的硬件、软件、管理、计算、数据分析等服务的集成。概括地说,就是利用信息通信技术(ICT)对城市运行各个环节的关键信息进行感知、整合、存储、处理、分析、预测和响应,从而提供智能响应和辅助决策。满…

工业建筑的应急照明系统的设计原则及常见电气设计问题与解决方案

【摘要】:文章根据《消防应急照明和疏散指示系统技术标准》(GB513O9-2018),介绍了工业建筑的应急照明系统的设计原则及常见电气设计问题与解决方案。 【关键词】:工业建筑;消防;应急照明;疏散标志;系统设计;安科瑞 李…

p2机器学习基本概念简介

2. 第 1 讲:机器学习基本概念简介上_哔哩哔哩_bilibili 机器学习找一个合适的函数: 随着找的函数不同,机器学习就有了不同的类别,下面了解一些专有名词: Regression:假设找的函数输出是一个数值&#xff…

学习笔记4:数据的存储

目录 一. 整形家族数据在内存中的存储 1.整形数据的原码,反码和补码 2.数据的大小端存储 3.相关练习 1.编写一个函数用于判断当前机器是大端存储类型还是小端存储类型 2.阅读代码判断程序输出内容 3.阅读代码判断程序输出内容 4.阅读代码判断程序输出内容 5.附头文…

5G NR标准 第13章 重传协议

第13章 重传协议 通过无线信道的传输容易出错,例如,由于接收信号质量的变化。 在某种程度上,这种变化可以通过第 14 章中讨论的链路适配来抵消。但是,接收机噪声和不可预测的干扰变化无法抵消。 因此,几乎所有无线通…

数字化时代,聊一聊企业的信息化整合

现如今,企业搭建的OA、ERP、CRM、HR、BI 以及财务软件等软件系统,其数据格式、数据库类别、操作系统、应用系统等不尽相同,位置分散相互独立,甚至有的企业在同一个系统下的财务、办公、销售、生产等系统也各自独立,相互…

蓝牙资讯|消息称苹果正开发 AirPods Lite 耳机

据 9to5Mac 报道,苹果目前正销售四种不同型号的 AirPods,包括第二代 AirPods 到定位更高端的 AirPods Max。虽然 AirPods 已成为非常受欢迎的耳机,但其并不便宜。 据海通国际分析师 Jeff Pu 爆料,苹果目前正在研发新的“AirPods…

SAP入门技术分享二:数据类型

数据类型1.概要2.数据类型的种类(1)ABAP基本数据类型(2)局部数据类型(3)全局数据类型3.DATA语句(1)TYPE type(2)LIKE num(3)VALUE int…

智能车|ROS主控与STM32建立通信软硬件全方位讲解

智能车|ROS主控与STM32建立通信软硬件全方位讲解前言智能车控制器功能通信内容硬件连接软件设置更新电平转换芯片的serial创建设备别名使用设备别名ROS与STM32串口通信代码ROS主控读取stm32发送的数据ROS主控向stm32发送数据前言 通常复杂的机器人会存在多个控制器,…

吴恩达《机器学习》——神经网络与反向传播

神经网络与反向传播1. 神经网络1.1 神经网络的前馈传播1.2 利用反向传播求梯度1.2.1 正则化梯度2. 目标函数(损失函数)2.1 PyTorch官方文档版本2.2 吴恩达讲解版本2.3 两种版本的区别在哪?2.4 正则化目标函数3. Python实现3.1 梯度校验3.2 封…

hcie-路由引入与控制

关于本实验:本实验主要介绍了路由选择工具ACL和IP-Prefix的配置,路由引入的配置以及路由策略的配置方法及注意事项。 实验目的:掌握路由选择工具的配置方法,路由策略与策略路由的配置与注意事项。 实验组网介绍: 实验…

美颜sdk人脸美妆代码分析、算法流程

美颜sdk人像美妆是非常重要的一个功能,目前深受广大用户喜爱,本篇文章小编将为大家讲解一下美颜sdk人像美妆功能的代码以及算法实现流程。 1、人像美妆算法流程 首先进行妆容模板制作,主要由Photoshop等编辑软件制作,最终由设计…

解微信弹性布局--简单搭建一个页面

Flex布局简介布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float属性什么是flex布局?Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Fle…

SpringBoot连接MySQL报错CommunicationsException: Communications link failure

情况说明 一个定时任务查询数据进行汇总,查询时间大约在20-30秒,应用链接报错。 CommunicationsException: Communications link failureThe last packet successfully received from the server was 10,026 milliseconds ago. 环境 MySQL8.0 mysql…

Java Eclipse如何调试代码

下面通过一个简单的例子来了解一下 Eclipse 调试程序的方法。上述代码完成的主要功能是如果 i 值满足小于或等于 5 的条件,就一直执行输出语句。可以看到 for 关键字后面的小括号中有三个表达式,第一个表达式int i0的作用是定义一个 int 类型的变量并赋初…