MySQL常见的高可用架构

2023-11-02

概述:

高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。虽然互联网服务号称7天24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法发微博,发微信等。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能保证整个系统的高可用。对于数据库服务而言,高可用可能更复杂,对用户的服务可用,不仅仅是能访问,还需要有正确性保证,因此讨论数据库的高可用方案时,一般会同时考虑方案中数据一致性问题。

1.基于共享存储的方案SAN

方案介绍:SAN(Storage Area Network)简单点说就是可以实现网络中不同服务器的数据共享,共享存储能够为数据库服务器和存储解耦。使用共享存储时,服务器能够正常挂载文件系统并操作,如果服务器挂了,备用服务器可以挂载相同的文件系统,执行需要的恢复操作,然后启动MySQL。
在这里插入图片描述

优点:

1.可以避免存储外的其它组件引起的数据丢失。
2.部署简单,切换逻辑简单,对应用透明。
3.保证主备数据的强一致。

限制或缺点:

1.共享存储是单点,若共享存储挂了,则会丢失数据。
2.价格比价昂贵。

2.基于磁盘复制的方案 MySQL+DRDB架构

通过DRBD基于block块的复制模式,快速进行双主故障切换,很大程度上解决主库单点故障问题。
方案介绍:DRBD(Distributed Replicated Block Device)是一种磁盘复制技术,可以获得和SAN类似的效果。DBRD是一个以linux内核模块方式实现的块级别同步复制技术。它通过网卡将主服务器的每个块复制到另外一个服务器块设备上,并在主设备提交块之前记录下来。DRBD与SAN类似,也是有一个热备机器,开始提供服务时会使用和故障机器相同的数据,只不过DRBD的数据是复制存储,不是共享存储。DRBD的架构图如下:在这里插入图片描述

优点:

1.切换对应用透明。
2.保证主备数据的强一致。

限制或缺点:

1.影响写入性能,由于每次写磁盘,实质都需要同步到网络服务器。
2.一般配置两节点同步,可扩展性比较差。
3.备库不能提供读服务,资源浪费。

3、MySQL+MHA架构

MHA目前在Mysql高可用方案中应该也是比较成熟和常见的方案,它由日本人开发出来,在mysql故障切换过程中,MHA能做到快速自动切换操作,而且还能最大限度保持数据的一致性。
在这里插入图片描述

优点:

1、 代码开源,方便结合业务场景二次开发
2、故障切换时,可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。
3、 可以灵活选择VIP方案或者全局目录数据库方案(更改Master IP映射)来进行切换。

缺点:

1、无法保证强一致,因为从故障Master上保存二进制日志并不总是可行,比如Master磁盘坏了,或者SSH认证失败等。
2、只支持一主多从架构,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。
3、采用全局目录数据库方案切换时,需要应用感知变化,因此对应用不透明,因此要保持切换对应用透明,依然依赖于VIP。
4、不适用于大规模集群部署,配置比较复杂。
5、MHA管理节点本身的HA无法保证。

4、MySQL+MMM架构

MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器),是关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件。
在这里插入图片描述

优点:

1、安全、稳定性较高,可扩展性好
2、对服务器数量要求至少三台及以上
3、双主热备模式,读写分离,SLAVE集群可线性扩展(主从复制性要求较高)
4、 同样可实现读写分离。

缺点:

读写分离需要在程序端解决,Master大批量写操作时会产生主从延时

服务器资源:

1、至少五台PC Server,2台MySQL主库,2台MySQL从库,1台MMM Monitor;
2、1台MMM Monitor选择低配;
3、如果不采用F5作为从库的负载均衡器,可用2台PC SERVER部署LVS或HAProxy+Keepalived组合来代替;

参考资料:
https://www.likecs.com/show-855612.html
https://www.jb51.net/article/83400.htm
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/mysql-innodb-cluster-introduction.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL常见的高可用架构 的相关文章

  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 显示标准化数据

    跟进问题 添加 2 个不同表的总和 https stackoverflow com questions 39717541 adding sum from 2 different tables 我创建了3个表 members videos v
  • 海量记录的bulk_create最佳实践

    I use bulk create将 1 mio 记录插入到新表中 需要 80 秒 Django 只使用一个 CPU 核心 大约 25 CPU 但没有一个核心达到 100 我相信有改进的潜力 这是代码 class Stock models
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • mysql 中的二进制、十六进制和八进制值

    我对在 mysql 数据库中使用二进制 十六进制和八进制系统非常感兴趣 首先 请给我一个建议 为什么我们在存储信息时需要它们 因为信息太多 或者为什么 另外 哪种类型的值必须存储在标记系统中 另外这里还有像 这是例子 gt SELECT 5
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • 删除行导致锁超时

    当我尝试从表中删除行时 我不断收到这些错误 这里的特殊情况是我可能同时运行5个进程 该表本身是一个 Innodb 表 约有 450 万行 我的 WHERE 子句中使用的列没有索引 其他指数按预期运行 这是在事务中完成的 首先删除记录 然后插
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同

随机推荐

  • Centos7 离线安装 nginx

    背景 某些项目处于私有云中 并不能连接互联网 此时安装各种组件都是相当的麻烦 本文记录在某项目中离线安装部署Nginx 首先是安装依赖包 附件地址上传到csdn 免积分下载 nginx 1 21 6及Nginx依赖的rpm安装包 Linux
  • 华为数字化转型之道 平台篇 第十一章 统一的数据底座

    平台篇 第十一章 统一的数据底座 在从传统信息化向数字化转型的过程中 企业积累了海量数据 并且还在爆发式增长 数据很多 但真正能产生价值的数据却很少 数据普遍存在分三年 不拉通的问题 缺乏统一的定义和架构 找到想要的 能用的数据越来越难 如
  • C语言结构体与共用体(1)

    结构体 有时需要将不同类型的数据组合成一个人有机的整体 以便于引用 如 一个学生有学号 姓名 性别 年龄 地址等属性 int num char name 20 char sex int age char addr 30 定义一个结构体的一般
  • php和tp5学习笔记

    之前看过php的基础教学视频 了解了一下 自己没有上手实践 现在为了项目需要 需要扎实学习一下 所以做一下笔记吧 php学习笔记 1 环境 1 用phpstudy搭建php环境 2 搭建thinkphp环境 2 知识点 2 1 URL 2
  • python判断一个集合是否为另一个集合的子集

    a 1 2 3 4 b set 1 2 b issubset a
  • FusionAD:用于自动驾驶预测和规划任务的多模态融合

    论文背景 自动驾驶 AD 任务通常分为感知 预测和规划 在传统范式中 AD中的每个学习模块分别使用自己的主干 独立地学习任务 以前 基于端到端学习的方法通常基于透视视图相机和激光雷达信息直接输出控制命令或轨迹 论文提出了基于BEV多模态的多
  • new JSONObject(true)

    构造容量为16个单位的HashMap作为JSONObject JSONObject jsonObject new JSONObject 构造容量为16个单位JSONObject 可选择器容器是否有序 LinkedHashMap true H
  • Mysql GROUP_CONCAT(expr) 介绍

    1 MYSQL版本 Welcome to the MySQL monitor Commands end with or g Your MySQL connection id is 86693 Server version 5 7 23 My
  • TCP和UDP的最完整的区别

    转自 https blog csdn net li ning article details 52117463 TCP UDPTCP与UDP基本区别 1 基于连接与无连接 2 TCP要求系统资源较多 UDP较少 3 UDP程序结构较简单 4
  • 防逆向技术简史:从代码混淆到虚拟机保护技术

    那么如何才能保护自己开发APP不被逆向破解呢 在道高一尺魔高一丈的网络安全攻防对抗中 防逆向保护技术也在不停更新演进 我在这里梳理了几个关键时期的防逆向保护技术 让大家对APP防护有一个更好理解 启蒙阶段 防逆向保护始于代码混淆技术 这个时
  • git使用——merge、rebase 区别和 idea 里的 Merge into current、Rebase current onto seleced 使用

    文章目录 1 Git 中 merge 和 rebase 的区别 2 在Intellij idea 中的使用 1 Git 中 merge 和 rebase 的区别 简介 git pull rebase和 git pull区别 是git fet
  • 【记录】mmsegmentation 训练自己的数据集

    文章目录 数据集标注工具选择 labeme 标注 精灵标注助手 photoshop标注 标准格式转换 转化为COCO格式 转化为VOC格式 json文件 mask图像 划分训练集和测试集 修改配置文件 修改data root为自己的路径 搜
  • vue:vue的计算属性以及监听属性(三)

    1 计算属性 相较于函数而言计算属性更加智能 他是基于它们的响应式依赖进行缓存的 也就是说只要相关依赖 下述例子中的area 没有发生改变 那么这个计算属性的函数不会重新执行 而是直接返回之前的值 这个缓存功能让计算属性访问更加高效 只要修
  • 解决STM32进行IAP升级跳转至APP后无法进中断问题

    最近碰到STM32在进行IAP升级时跳转至APP后无法进入中断 导致程序无法运行 正常情况下STM32进行IAP升级时 在跳转至APP程序之前 应该关闭外设 关闭中断 BootLoader中跳转程序如下 typedef void pFunc
  • Centos7 使用nginx 和 supervisord 部署python +tornado+nodejs

    一 我用到的工具是netty winscp linux 环境下安装nginx步骤 开始前 请确认gcc g 开发类库是否装好 默认已经安装 yum y install gcc gcc c 安装gcc和c 编译器 1 centOS安装依赖 y
  • vue动态判断input readonly属性

    1 如果isReadOnly等于true时 input只读 否则可以编辑
  • chatgpt赋能python:Python怎么求平均值?全面解析平均值计算方法

    Python怎么求平均值 全面解析平均值计算方法 作为一种简洁易用的计算机编程语言 Python的应用范围已经越来越广泛 在Python中 我们可以轻松地进行各种统计和计算工作 其中求平均值是最常见的计算之一 在本文中 我们将全面解析Pyt
  • JVM——8.调优工具1(jstat)

    文章目录 1 使用背景 2 jstat 的介绍及使用 2 1 jstat gc PID 介绍 2 2 其他的 jstat命令 2 3 jstat gc PID 使用 3 关注指标及计算分析 3 1 关注指标 3 2 计算分析 1 使用背景
  • linux 下家目录,根目录区别,以及普通用户到root用户的转换

    根目录 指的是最上层的目录 根目录之下有很多目录 如 home etc lib root 家目录 一般普通用户 家目录是 home 用户名 root用户 家目录是 root 如何普通用户切换到root用户 1 su 2 su root 需要
  • MySQL常见的高可用架构

    MySQL常见的高可用架构 概述 1 基于共享存储的方案SAN 优点 限制或缺点 2 基于磁盘复制的方案 MySQL DRDB架构 优点 限制或缺点 3 MySQL MHA架构 优点 缺点 4 MySQL MMM架构 优点 缺点 服务器资源