MySQL 常用高可用方案

2023-11-20

这一节内容来简单聊聊 MySQL 最常用的几种高可用方案。

1 主从或主主 + Keepalived

主从或主主 + Keepalived 算是历史比较悠久的 MySQL 高可用方案,常见架构如下:

其大致原理是:在主实例的 Keepalived 中,增加监测本机 MySQL 是否存活的脚本,如果监测 MySQL 挂了,就会重启 Keepalived,从而使 VIP 飘到从实例。

优点

  • 部署简单。
  • 只有两个节点,没有主实例宕机后选主的问题。

缺点:

  • 级联复制或者一主多从在切换之后,其他从实例需要重新配置连接新主。
  • 云环境使用不了。

2 MHA

MHA(Master High Avaliable) 是一款 MySQL 开源高可用程序,MHA 在监测到主实例无响应后,可以自动将同步最靠前的 Slave 提升为 Master,然后将其他所有的 Slave 重新指向新的 Master。常见架构如下:

优点

  • 可以根据需要扩展 MySQL 的节点数量。
  • 只要复制没有延迟,MHA 通常可以在几秒内实现故障切换。
  • 可以使用任何存储引擎。

缺点

  • 仅监视主数据库。
  • 需要做 SSH 互信
  • 使用 Perl 开发,二次开发困难。
  • 跟不上 MySQL 新版本,最近一次发版是 2018 年。

3 PXC

PXC(Percona XtraDB Cluster)是一个完全开源的 MySQL 高可用解决方案。它将 Percona Server、Percona XtraBackup 与 Galera 库集成在一起,以实现多主复制的 MySQL 集群。常见架构图如下:

优点

  • 去中心:任何节点宕机,集群都可以继续运行而不会丢失任何数据。
  • 每个节点都可以写入数据并自动同步到其他节点。
  • 数据写入需要集群所有节点验证通过才会提交,保证了数据的强一致性。

缺点

  • 只支持 InnoDB 引擎。
  • 木桶效应:集群吞吐量取决于性能最差的节点。
  • 增加节点时,必须从现有节点之一复制完整的数据集。

4 MGR/InnoDB Cluster

MySQL 5.7 推出了 MGR(MySQL Group Replication),与 PXC 类似,也实现了多节点数据写入和强一致性的特点。MGR 采用 GCS(Group Communication System)协议同步数据,GCS 可保证消息的原子性。在使用 MGR 时,如果要实现完整的高可用方案,就需要用到 InnoDB Cluster。架构图如下:

InnoDB Cluster 由以下技术组成:

  • MySQL Shell,MySQL 的高级客户端和代码编辑器,用于管理 MGR 集群。
  • Group Replication,提供一组高可用的 MySQL 实例。
  • MySQL Router,在应用程序和集群之间提供透明的路由。当 MGR 发生切换树,自动路由到新的 MGR 主节点。

优点

  • 支持多节点写入,有冲突检测机制。
  • 强一致性。

缺点

  • 只支持 InnoDB 表,每张表都要有主键。
  • 最多只支持 9 个节点。

5 Xenon

Xenon 是一个使用 Raft 协议的 MySQL 高可用和复制管理工具,使用 Go 语音编写。架构图如下:

Xenon 基于 Raft 协议进行无中心化选主,并能实现秒级切换。

优点

  • 不需要管理节点。
  • 无数据丢失的快速故障转移。

缺点

  • 只适用于 GTID。
  • 默认情况下,Xenon 和 MySQL 跑在同一个账号下。

6 Orchestrator

Orchestrator是 Go 语音编写的 MySQL 高可用性和复制管理工具,作为服务运行并提供命令行访问、HTTP API 和 Web 界面。架构图如下:

优点

  • 自动发现 MySQL 拓扑,可以拖动拓扑图进行复制关系的变更。
  • 提供命令行和 API 接口,方便运维管理。
  • 快速故障转移。
  • 多种故障等级,应对不同故障等级可配置不同处理办法。

缺点

  • 相对于其他高可用组件,参数多很多。
  • 在某些场景可能出现丢数据的情况,数据补偿机制需要优化。

其他参考资料:

MySQL的高可用 - Gabydawei - 博客园

五大常见的MySQL高可用方案分享

实战 MySQL 高可用架构

Mysql高可用架构

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 常用高可用方案 的相关文章

  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 对于相同的查询,MySQL Workbench 比 Python 快得多

    MySQL Workbench 中的以下查询需要 0 156 秒才能完成 SELECT date time minute price id FROM minute prices WHERE contract id 673 AND TIMES
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 如何通过 PDO 使用密码哈希来使我的代码更安全? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的代码实际上可以工作 但它一点也不安全 我不想使用 MD5 因为它不是那么安全 我一直在查找密码哈希 但我不确定如何将其合并到我的代
  • 在 MySQL 中执行触发器需要什么权限?

    我发现 MySQL 手册中对 DEFINER 的解释令人困惑 因此我不确定运行应用程序的 执行用户 需要什么权限 为了安全起见 我喜欢将 执行用户 限制为所需的最少权限 我知道触发器 存储过程的创建者需要超级权限 但是 执行用户 是否也需要
  • 我应该定义索引(A)和索引(B),还是索引(A,B),或者两者都定义?

    在我的表中 我有两个密切相关的列 A 和 B 我应该考虑哪些因素来决定是否创建 索引 A 和索引 B 索引 A B 以上两者 如果我 仅使用类似的查询where A 5 and B 10 并且从不喜欢where A 5 也可以使用类似的查询
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 如何从 MySQL 中的布尔类型返回不同的字符串?

    如果我在 MySql 中将一列设置为布尔值 则查询将返回以下值 0 or 1 是否可以做这样的事情 SELECT bool value AS yes OR no 我的意思是 根据真假返回两个不同的字符串 SELECT CASE WHEN b
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • 重置 MySQL root 密码不起作用

    我花了很多时间阅读并尝试了数十种重置 root 密码的方法 但我一无所获 我发现 并尝试过 的最完整的说明如下 顺便说一句 我在 Win7 32 位上运行 MySQL 5 5 我创建了一个文件 c mysqlinit txt 其中包含两行
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 使用 md5 加密的 PHP 和 Mysql 查询出现问题

    我使用普通的 php mysql 插入查询并使用 md5 加密密码 这是插入查询 sql mysql query INSERT INTO user username password role approved values usernam

随机推荐

  • Linux系统下如何修改主机名

    Linux系统安装好后 都会有默认的主机名 这里是用CentOS系统为例 默认的主机名是localhost localdomain 为了便于使用 我们常常需要修改主机名 下面演示是永久修改主机名的方法 第一步 更改 etc sysconfi
  • 利用docker搭漏洞环境并复现案例(crlf、目录穿越)

    准备 1 安装docker 2 导入漏洞环境文 3 配置漏洞文件 CRLF 原理 复现 目录穿越漏洞 准备 1 安装docker 1 更新系统软件包 sudo yum update 2 安装 Docker 的依赖软件包 sudo yum i
  • 腾讯云CVM云服务器实例族是什么?区别选择攻略

    腾讯云服务器CVM有多种实例族 如标准型S6 标准型S5 SA3实例 高IO型 内存 计算型及GPU型实例等 如何选择云服务器CVM实例规格呢 腾讯云服务器网建议根据实际使用场景选择云服务器CVM规格 例如Web网站应用可以选择标准型S5或
  • UML总结4---UML九种图关系说明

    UML中包括九种图 用例图 类图 对象图 状态图 时序图 协作图 活动图 组件图 配置图 用例图 Use Case Diagram 它是UML中最简单也是最复杂的一种图 说它简单是因为它采用了面向对象的思想 又是基于用户视角的 绘制非常容易
  • gRPC C++开发环境搭建

    特别需要强调 grpc需要6 3以上的gcc g 版本 如果低于此版本的需要参考文档进行升级 cmake gcc的版本 ubuntu16 04默认的版本不支持 1 安装必要的依赖工具 安装必要的依赖工具 sudo apt get insta
  • OneNote 深度评测:使用资源、插件、模版

    评测 OneNote 是生产力办公套件 Office 微软所提供 大厂背景 不用担心微软跑路 免费 主要是指使用免费 由于 OneNote 默认是存储至 OneDrive 之上 如果你要存一些比较大的文件 那边需要你付费购买 OneDriv
  • JVM的类加载机制

    1 概述 JVM是Java语言实现跨平台的关键 Java语言的运行过程 java通过编译器编译为 class 通用字节码文件并不能直接被操作系统所识别 针对不同的操作系统可安装对应的JVM JVM将字节码解释为当前平台所能识别的机器码实现
  • Failed to bind properties under ‘spring.datasource.type‘ to java.lang.Class<javax.sql.DataSource>

    Description Failed to bind properties under spring datasource type to java lang Class
  • 准备三个月,终拿快手offer!薪资28k*16

    昨天有VIP小伙伴给小孟说 拿到了快手的offer 聊了半个小时 待遇还不错 准备去了 28k 16薪 快手的k3c职级可对标阿里的P7 前面我说过 能去大厂就去大厂 有机会就去争取 年纪轻轻的 多努力就完事了 找工作运气占很大的成分 甚至
  • 关于Robomaster机甲大师比赛的Yaw轴电机齿轮比不为1:1的解决方法

    Yaw轴电机齿轮比不为1 1的解决方法 问题 解决办法 弊端 问题 在Robomaster比赛中我们的英雄机器人的机械结构没做好 整体做得稍微有点大 云台也是很有质量 于是采用了6020电机带动齿轮1 1 5转动 但这样带来的结果就是有时候
  • 大数据技术之Zookeeper

    大数据技术之Zookeeper 一 zookeeper特点 二 zookeeper单机模式 三 zookeeper 常用命令 四 查看zookeeper 状态的几种方式 一 zookeeper特点 Zookeeper 文件系统 通知机制 1
  • 从零玩转人脸识别之RGB人脸活体检测

    从零玩转RGB人脸活体检测 前言 作者个人博客 点击前往 本期教程人脸识别第三方平台为虹软科技 本文章讲解的是人脸识别RGB活体追踪技术 免费的功能很多可以自行搭配 希望在你看完本章课程有所收获 ArcFace 离线SDK 包含人脸检测 性
  • short定义的两个数相加最后越界问题

    Java 程序语言提供了一些可以作用在整数值上的操作数 比较运算子 得到 boolean 型别的值 数值比较运算子 lt gt gt 和 gt 15 20 1 数值相等运算子 和 15 21 1 数值运算子 得到 int 或 long 型别
  • java pakage、import关键字

    package介绍 常用的包 import 案例
  • C语言结构体初始化的四种方法

    定义 struct InitMember int first double second char third float four 方法一 定义时赋值 struct InitMember test 10 3 141590 method o
  • 静态功耗具体指什么

    之前我的理解一直为静态功耗等同于关机功耗 今天专门搜索了解了下 百度百科给出的定义是指漏电流功耗 是电路状态稳定时的功耗 其数量级很小 其实这个定义很模糊 怎样的状态是电路稳定状态 我自己的理解是静态功耗为两种 一 等同于关机功耗 即器件全
  • ssh连接很慢GSS failure解决办法

    什么导致了 scp 和 ssh 的登陆提示速度下降 就我自身所遇到的情况来看 这些延迟绝大部分是 GSSAPI 的认证功能导致的 你可以用 v 选项确认你的情况 例如 下面是 ssh 的详细登陆过程 cherry cherry ssh v
  • 原生JS实现随着鼠标滚动到元素位置触发对应css3动画,简单易用

    废话不多说 直接上代码 附用法 纯博主手写 看完后 觉得好左上角请点个赞 觉得不好的请留下您的建议 谢谢 此代码改版很方便 大家可以任意发挥 注意 如果不想自己写动画的 可以引入Animate css 相信这个动画库大家都不陌生 body
  • modbus协议crc校验c语言代码,modbus协议crc校验

    数据校验是数据传输必不可少的一部分 主要目的就是防止数据传输过程中出现差错 本文主要根据原理实现它的核心代码 预置1个16位的寄存器为十六进制FFFF 全1 此寄存器为CRC寄存器 把第一个8位二进制数据 即通讯信息帧的第一个字节 与16位
  • MySQL 常用高可用方案

    这一节内容来简单聊聊 MySQL 最常用的几种高可用方案 1 主从或主主 Keepalived 主从或主主 Keepalived 算是历史比较悠久的 MySQL 高可用方案 常见架构如下 其大致原理是 在主实例的 Keepalived 中