【译】MySQL 组复制 - 部分网络故障对性能的影响

news2024/11/17 16:13:28

原文地址:MySQL Group Replication – Partial Network Failure Performance Impact

在这个由两部分组成的博客系列中,我想介绍一些使用组复制的故障转移场景。在第一部分中,我将讨论我在撰写这些文章时发现的一种有趣的行为和性能下降。在第二部分中,我将展示几个故障转移场景,并演示 Group Replication 如何处理每种情况。

测试环境非常简单,是在 MySQL 8.0.19 上使用默认设置的三节点 Group Replication(mysql1,mysql2,myslq3),mysql2主节点

在这种情况下,我测试的是当一个节点与主节点分离,但其他节点仍能看到它时发生的部分网络故障。
在这里插入图片描述
你会认为 mysql3 会失去法定节点数并退出集群,但事实并非如此。在集群内部,所有节点都在不断相互通信,不仅主节点在与 mysql3 通信,mysql1 也在与 mysql3 通信。
在这里插入图片描述
如果我们从主服务器询问群集状态,它将显示 mysql3 不可达。

MySQL mysql2:3306 ssl JS > cluster.status();
{
"clusterName": "my_innodb_cluster",
"defaultReplicaSet": {
"name": "default",
"primary": "mysql2-T1:3306",
"ssl": "DISABLED",
"status": "OK_NO_TOLERANCE",
"statusText": "Cluster is NOT tolerant to any failures. 1 member is not active",
"topology": {
"mysql1-T1:3306": {
"address": "mysql1-T1:3306",
"mode": "R/O",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.19"
},
"mysql2-T1:3306": {
"address": "mysql2-T1:3306",
"mode": "R/W",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.19"
},
"mysql3-T1:3306": {
"address": "mysql3-T1:3306",
"mode": "n/a",
"readReplicas": {},
"role": "HA",
"shellConnectError": "MySQL Error 2003 (HY000): Can't connect to MySQL server on 'mysql3-T1' (110)",
"status": "UNREACHABLE",
"version": "8.0.19"
}
},
"topologyMode": "Single-Primary"
},
"groupInformationSourceMember": "mysql2-T1:3306"

但如果我们询问 mysql1 的状态,它会说一切正常:

MySQL mysql1:3306 ssl JS > cluster.status();
{
"clusterName": "my_innodb_cluster",
"defaultReplicaSet": {
"name": "default",
"primary": "mysql2-T1:3306",
"ssl": "DISABLED",
"status": "OK",
"statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
"topology": {
"mysql1-T1:3306": {
"address": "mysql1-T1:3306",
"mode": "R/O",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.19"
},
"mysql2-T1:3306": {
"address": "mysql2-T1:3306",
"mode": "R/W",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.19"
},
"mysql3-T1:3306": {
"address": "mysql3-T1:3306",
"mode": "R/O",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.19"
}
},
"topologyMode": "Single-Primary"
},
"groupInformationSourceMember": "mysql2-T1:3306"

对我来说,这有点令人困惑,因为我询问的是同一个集群的两个成员,但报告的状态却不同,我希望在所有节点上看到相同的集群状态。

但这意味着什么?

我还能向集群写入数据吗?mysql3 是否也会获得新的更改?为了回答这些问题,让我们做一些简单的测试。

我创建了一个简单的表:

CREATE TABLE `lab` (
`id` int NOT NULL AUTO_INCREMENT,
`hostname` varchar(20) DEFAULT NULL,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_created` (`created_at`)
) ENGINE=InnoDB

现在,我在主服务器上启动了以下循环写入数据:

while true;do mysql -usbtest -pxxxxx -P3306 -h127.0.0.1 -e "INSERT INTO sysbench.lab (hostname) VALUES ( @@hostname)"; done 2>/dev/null

它将打印输出每秒在 mysql2 和 mysql3 上插入的行数。

我使用 iptables 切断了 mysql2 和 mysql3 之间的网络:

mysql3# iptables -A INPUT -s mysql2 -j DROP; iptables -A OUTPUT -s mysql2 -j DROP

在此之后,mysql3 仍能获取更改,但如何获取?它无法连接 mysql2。 但它仍能连接到 mysql1,而 mysql1 将充当 mysql2 和 mysql3 之间的中继节点。这听起来很不错,因为即使在部分网络中断的情况下,我们仍然可以使用 mysql3,因为它会获取更改。但是,这种行为在任何地方都没有记录。所以我不知道它在引擎盖下是如何工作的。我打开了一个错误报告,以更新文档。

查阅上述错误报告,最后的结论是非Bug

性能严重下降

不过,我也注意到性能因此严重下降。当所有节点都连接在一起时,我每秒可以插入 60-80 行。一旦我切断网络,这个数字就会下降到每秒插入 2-5 行,下降了 80-90%。这可能会严重影响任何应用程序的性能,这意味着使用组复制时,即使是部分网络中断,或错误实施 Iptables 规则等,都可能导致生产问题。

在这里插入图片描述
由于记录不全,我无法确定发生这种情况的原因。在组复制中,多数人确认事务就足够了,因此理论上,mysql2 和 mysql1 就足够了,所以我们不能用网络延迟来解释这种性能下降,因为多了一跳。

如何与 Percona XtraDB Cluster 协同工作?

Percona XtraDB Cluster 基于 Galera,后者是另一种 MySQL 集群解决方案。在 Galera 中,这种行为是众所周知的;节点甚至可以充当数据中心之间的中继节点。我在一个三节点 PXC8 集群上也重复了同样的测试。当我切断主节点(我写程序的地方)和 mysql3 之间的网络时,有 3 秒钟的间隙,直到集群重新计算集群视图并重新路由流量,之后一切恢复正常,没有明显的性能影响,mysql3 通过 mysql1 获得所有更改:

mysql3 62 2020-03-31 14:13:12
mysql3 65 2020-03-31 14:13:13
mysql3 67 2020-03-31 14:13:14
mysql3 69 2020-03-31 14:13:15
mysql3 47 2020-03-31 14:13:16
mysql3 0 2020-03-31 14:13:17
mysql3 0 2020-03-31 14:13:18
mysql3 0 2020-03-31 14:13:19
mysql3 41 2020-03-31 14:13:20
mysql3 71 2020-03-31 14:13:21
mysql3 72 2020-03-31 14:13:22

此外,在 PXC8 中,所有节点都报告了相同的群集状态,甚至连 mysql2 也不例外。

结论

由于组复制和 Galera 的实施和方法不同,因此对性能的影响也不同。与组复制相比,Galera 对网络问题的容忍度更高。

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

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

相关文章

Kubernetes中 Requests 和 Limits 的初步理解

1 灵魂拷问 我们在使用 Kubernetes 时是否遇到以下情况: 你会不会部署负载的时候将 CPU requests/limits 设置得过低或过高?你会不会部署负载的时候将 内存 requests/limits 设置得过低或过高?又或者你根本不设置 requests/limits&#xff…

【Linux网络编程】IO多种转接之Reactor

Reactor 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 基于上一篇epoll的学习,现在我们也知道epoll的工作模式有两种&#xff0c…

前端菜鸡,对于35+程序员失业这个事有点麻了

“经常看到30岁程序员失业的新闻,说实话,有点麻。目前程序员供求关系并未失衡,哪怕是最基础的前端或者后台、甚至事务型的岗位也是足够的。 事实上,现在一个开出的岗位要找到一位尽职尽责能顺利完成工作的程序员并不是一件那么容…

石油化工巡检机器人:应对挑战的创新力量

在石油化工领域,安全始终是高悬的达摩克利斯之剑。人工巡检面临诸多痛点,如高危环境对人身安全的巨大威胁,复杂工况下难以做到全面细致监测,对有害气体检测存在滞后性,还有恶劣天气对巡检工作的严重干扰。而这些痛点&a…

[LLM-Agent]万字长文深度解析规划框架:HuggingGPT

HuggingGPT是一个结合了ChatGPT和Hugging Face平台上的各种专家模型,以解决复杂的AI任务,可以认为他是一种结合任务规划和工具调用两种Agent工作流的框架。它的工作流程主要分为以下几个步骤: 任务规划:使用ChatGPT分析用户的请求…

【linux】新增磁盘的使用

查看硬盘和分区信息 【Linux】lsblk 命令使用-CSDN博客 lsblk 根据您提供的lsblk命令输出,我们可以看到系统中的块设备及其分区信息。以下是对每个设备的解释: vda:这是一个大小为40G的磁盘设备。 vda1:这是vda磁盘的第一个分区…

unidbg入门笔记

一、unidbg 介绍 unidbg 是凯神 在 2019 年初开源的一个轻量级模拟器,一个基于Java的跨平台解密引擎,专门用于动态分析和逆向工程应用程序。它可以模拟不同CPU架构、操作系统和指令集,从而使用户能够在一个统一的环境中分析各种不同类型的二…

利用Python去除PDF水印

摘要 本文介绍了如何使用 Python 中的 PyMuPDF 和 OpenCV 库来从 PDF 文件中移除水印,并将每个页面保存为图像文件的方法。我们将深入探讨代码背后的工作原理,并提供一个简单的使用示例。 导言 简介:水印在许多 PDF 文件中都很常见&#x…

用 vue3 + phaser 实现经典小游戏:飞机大战

本文字数:7539字 预计阅读时间:30分钟 01 前言 说起小游戏,最经典的莫过于飞机大战了,相信很多同学都玩过。今天我们也来试试开发个有趣的小游戏吧!我们将从零开始,看看怎样一步步实现一个H5版的飞机大战&a…

MyBatis从入门到“入土“

💕喜欢的朋友可以关注一下,下次更新不迷路!💕(●◡●) 目录 一、Mybatis为何物?👌 二、快速入门🤣 1、新建项目😊 2、数据库建表😊 3、导入依赖的jar包😊…

【高级数据结构】B树

B树 一、概念性问题1、前置知识:常见搜索结构2、常规使用数据结构缺陷问题3、B树概念4、存放数量分析 二、代码实现逻辑1、结点定义和基本框架2、Find查找函数(1)思想(2)代码实现 3、InsertKey插入关键字函数--InsertK…

采用伪代码及C代码演示如何解决脱机最小值问题

采用伪代码及C代码演示如何解决脱机最小值问题 问题背景算法设计伪代码实现C代码实现证明数组正确性使用不相交集合数据结构最坏情况运行时间的紧确界 问题背景 脱机最小值问题涉及到一个动态集合 ( T ) (T) (T&…

国内大模型价格战全面爆发:新旧势力逐鹿江湖【附主流模型价格对比】

近年来,随着人工智能技术的不断发展,大模型逐渐成为行业的焦点。然而,伴随而来的却是一场价格战。DeepSeek率先推出超低价服务,随后字节跳动、阿里巴巴、百度、科大讯飞、腾讯等巨头纷纷跟进,使得这一领域的竞争愈演愈…

echarts-树图、关系图、桑基图、日历图

树图 树图主要用来表达关系结构。 树图的端点也收symbol的调节 树图的特有属性: 树图的方向: layout、orient子节点收起展开:initialTreeDepth、expandAndCollapse叶子节点设置: leaves操作设置:roam线条&#xff1a…

Mysql触发器优化大数据表

背景 数据库的订单数量过多,需要分出热表用于快速查询,热表仅保存10天的订单数据。 解决思路 每次数据库订单表触发增删改时,同步操作到trigger_order_mul_info表,然后trigger_order_mul_info会定期删除超过10天的数据。 增删…

【编译原理复习笔记】正则表达式与自动机

正则表达式 正则表达式是一种用来描述正则语言的更紧凑的表达方法 e.g. r a ( a ∣ b ) ∗ ( ϵ ∣ ( . ∣ ) ( a ∣ b ) ) ra(a|b)^*(\epsilon|(.|\\_ )(a|b)) ra(a∣b)∗(ϵ∣(.∣)​(a∣b)) 正则表达式可以由较小的正则表达式按照特定的规则递归地构建。每个正则表达式定义…

【笔记】软件架构师要点记录(1)

【笔记】软件架构师要点记录 20240517 20240517 连续性:恢复能力;可用性:保持稳定态的时长 增量开发模式:在增量开发中,每个增量都有明确的范围和功能,并按照特定的功能顺序完成。增量之间的范围划分在开发…

防火墙技术基础篇:基于IP地址的转发策略

防火墙技术基础篇:基于IP地址的转发策略的应用场景及实现 什么是基于IP地址的转发策略? 基于IP地址的转发策略是一种网络管理方法,它允许根据目标IP地址来选择数据包的转发路径。这种策略比传统的基于目的地地址的路由更灵活,因…

图片转excel技术在医疗领域的应用探讨

在医疗行业中,图片转Excel技术的应用已经逐渐普及,为医护人员提供了极大的便利。这种技术利用OCR(光学字符识别)和机器学习的先进算法,将图片中的信息自动转化为Excel表格,大大提高了数据处理和分析的效率。…

智能锁千千万,谁是你的NO.1,亲身实测凯迪仕传奇大师K70旗舰新品

智能锁千千万,谁是你的NO.1。欢迎来到智哪儿评测室,这次我们为大家带来了凯迪仕传奇大师K70系列的一款重磅新品。 在科技的浪潮中,家居安全领域正经历着前所未有的变革。智能锁越来越成为家的安全守护神,以及智能生活的得力助手。…