Mysql高可用架构方案
Mysql 介绍
Mysql是典型的开源关系型数据库,是许多网站、应用程序、企业软件产品的首选数据库。
Mysql特性:
- 易于使用,功能强大,支持事务、触发器、存储过程
- 管理工具多种多样且功能丰富
- 可以作为千万级数据管理的大型数据库
- 采用GPL开源协议,允许自由修改源码并应用到商业系统中
- Mysql的InnoDB事务性存储引擎符合事务ACID模型,能保证完整、可靠地进行数据地存储
高可用结构
主从模式
MHA
MMM
MGR
主从模式
主从模式介绍
主从模式是最基本的Mysql高可用架构,一台服务器作为Master节点,若干服务器作为Slave节点。只有Master处理写数据请求,读请求可仅由Slave节点处理,也可让Master、Slave同时处理。
Master和Slave通过主从复制技术保持数据一致,即Master节点将数据同步给Slave节点。
主从模式具备高可用的基础是主从复制技术。
主从复制技术
- 当Master 数据发生变更(新增、删除、修改)时,Master将变更日志写入二进制日志文件 binlog
- Slave启动单独线程(I/O线程)与Master建立网络连接,从Master的binlog中获取变更日志
- Slave的I/O线程捕获到数据变更日志后,按照顺序保存到中继日志文件 relay log
- Slave启动单独线程(Sql线程)从relay log 中读取日志并执行,使Slave 库的数据和Master一致

主从模式注意事项
Mysql 5.5之前主从复制为异步方式,Master 提交事务不需要经过Slave 们的确认,那么就会有这种极端情况:
- Slave 读取Master 的binlog失败了
- Slave 处理relay log 失败了
- Slave 执行Sql语句失败了
- 等......
类似的极端情况将导致数据不一致。所以在Mysql 5.5 主从复制提供了半同步的方式,具体来说就是增加了ACK确认的机制,当Slave接收到binlog 后,会给Master 发送一条确认消息,Master在接收到ACK确认消息之后才会提交事务。半同步方式可以提高数据的一致性,但是Master在写入数据的时候需要等待Slave的确认,所以性能会有所下降。
复制风暴问题,来考虑这样一种更加极端的情况,一个Master ,10个Slave , 这种情况下基于主从复制技术,Master在写入数据前需要同时处理10个Slave的数据复制请求,这种情况下对于Master只能说是不堪重负,如果在加上“半同步机制”,写入性能将大打折扣,这种情况称之为复制风暴问题。解决这种问题的方法是,Master 仅处理一个Slave的主从复制,其它的Slave复制由Slave负责。
MHA(MasterHighAvailability)
MHA模式介绍
以主从模式为基础,接下来就该考虑如下问题了:
- 如何检测节点故障
- master节点故障之后如何重新选举
MHA就是在解决这两个问题的,理论上,MHA模式可以在10s-30s内完成主从集群的自动故障检测和自动主从切换。
MHA由两个部分组成:
- MHA-Manager:负责自动检测Master是否故障,检查主从复制状态,执行自动主从切换等。需要单独服务器部署。
- MHA-Node:负责修复主从数据的差异,通常和Mysql服务器实例绑定部署。
MHA工作流程
Manager 和 Master之间心跳,如果连续4次探测不到心跳,就认为该Master宕机了,Master实例绑定一个Node。
Manager 分析各个Slave的binlog,选择一个更接近Master数据的Slave作为备选Master,一个Slave实例分别绑定一个Node。
Slave的Node试图通过SSH访问Master所在服务器:
- 如果可达,Slave的Node获取Master的binlog数据,若发现Master和Slave数据存在差异,会将差异数据主动复制到Slave,以保持主从数据一致。
- 如果不可达,Node对比各个Slave的relay log 差异,并做差异数据补齐。
Manager将备选Master提升为Master。
MMM(Multi-MasterReplicationManagerForMysql)
MMM模式简单来说就是引入虚拟IP(vip)技术,这种架构下,一个集群中有两个Master和若干个Slave,当其中一个Master不可用的时候,MMM会指示vip切换到另外一个Master上面,同时会向所有的Slave发送更换Master的消息,之后主从复制将切换到新的Master。
此方案比较古老,不支持Mysql GTID ,并且社区活跃度不够,目前处于无人维护的状态。
MGR(MysqlGroupReplication)
MGR,Mysql组复制模式是Mysql5.7.17版本推出的高可用解决方案,具备如下特性:
- 一致性高:数据复制基于分布式共识算法Paxos,可以保证多个节点数据的一致性
- 容错性高:只要不是超过一半的节点宕机,就可以继续提供服务
- 灵活性强:MGR支持单主模式和多主模式,单主模式下如果Master故障,Slave们会重新选举一个新的Master,多主模式下每一个Mysql节点都可以同时处理写请求
MGR要求至少由3个Mysql节点组成一个复制组,即一主两从,一个事务必须经过复制组内超过半数节点通过后才能提交。
如果在不同的Mysql节点上执行不同的写操作发生了事务冲突,那么先提交的事务先执行,后提交的事务被回滚。在多主模式下,由于每个Mysql节点都可以执行写请求,在写请求高并发的场景下发生事务冲突的概率会非常大,会造成大量事务回滚。
在单主模式下,MGR会自动为复制组选择一个Master负责写请求,如果复制组内超过一半节点与Master通信失败,就认为Master宕机了,这时会根据各个节点的权重和ID标识重新选主。
MGR更加适合一致性强,写并发量不大的场景下使用。
总结
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
Mysql高可用架构方案的更多相关文章
- mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方 ...
- mysql高可用架构方案之中的一个(keepalived+主主双活)
Mysql双主双活+keepalived实现高可用 文件夹 1.前言... 4 2.方案... 4 2.1.环境及软件... 4 2.2.IP规划... 4 2.3.架构图... ...
- MySQL数据库的优化(下)MySQL数据库的高可用架构方案
MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...
- mysql复制(高可用架构方案的基础)
mysql复制:把一个数据库实例上所有改变复制到另外一个数据库库服务器实例的过程特点:1.没有改变就无所谓复制 ;改变是复制的根本与数据源2.所有的改变:是指可以复制全部改变,也可以复制部分改变 可以 ...
- (5.1)mysql高可用系列——高可用架构方案概述
关键词:mysql高可用概述,mysql高可用架构 常用高可用方案 20190918 现在业内常用的MySQL高可用方案有哪些?目前来说,用的比较多的开源方案分内置高可用与外部实现,内置高可用有如下: ...
- mysql高可用架构之MHA,haproxy实现读写分离详解
MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理 权限的管理] 3.容灾 保证数据不丢失. 二.工作中MySQ ...
- (转)MySQL高可用架构之MHA
MySQL高可用架构之MHA 原文:http://www.cnblogs.com/gomysql/p/3675429.html 简介: MHA(Master High Availability)目前 ...
- 从mysql高可用架构看高可用架构设计
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...
- mysql高可用架构
高可用 高可用(High Availabiltity) 应用提供持续不间断(可用)的服务的能力 系统高可用性的评价通常用可用率表示 造成不可用的原因 硬件故障(各种) 预期中的系统软硬件维护 ...
- MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解
MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...
随机推荐
- 一款运行于windows上的linux命令神器-Cmder(已经爱不释手)
一.前言 很多工程师都习惯了使用linux下一些命令,再去用Windows的 cmd 简直难以忍受. 要在windows上运行linux命令,目前比较流行的方式由: GunWin32.Cygwin.W ...
- MySQL如何区分大小写
MySQL CRUD 问题描述 mysql在Windows下是不区分大小写的,而Linux下区分大小写,Windows下将script文件导入MySQL后表名也会自动转化为小写,如果导入Linux服务 ...
- 讲讲Java的序列化反序列化?
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 什么时候会用到 当只在本地 JVM 里运行下 Java 实例,这个时候是不需要什么序列化 ...
- Linux 常见编辑器
命令行编辑器 Vim Linux 上最出名的编辑器当属 Vim 了.Vim 由 Vi 发展而来,Vim 的名字意指 Vi IMproved,表示 Vi 的升级版.Vim 对于新手来说使用比较复杂,不过 ...
- SQL Server使用脚本实现自动备份
因服务器安装的SQL Server版本不支持自动定时备份,需自行实现,大概思路为: 创建备份数据库的脚本 创建批处理脚本执行步骤一中的脚本 创建Windows定时任务执行步骤二中的脚本 1. 创建SQ ...
- ZEGO 自研客户端配置管理系统 —— 云控
一.常规客户端配置的弊端 客户端配置信息通常会通过一个静态文件进行管理,或存放在本地或者通过远程获取.存在本地最大的问题是不易更新,所以通常做法是通过远程获取. 我们通过两种常见的场景来看看静态文件管 ...
- Angular 18+ 高级教程 – Component 组件 の Angular Component vs Web Component
前言 在 初识 Angular 中我有提到, Angular 团队是一群不爱创新.爱 follow 标准.爱小题大做的一群人. 所以,要理解 Angular Component,我们就非得要先搞懂远古 ...
- CSS – rem, em, px
参考: 掘金 – 如何更愉快地使用em -- 别说你懂CSS相对单位 绝对值 vs 相对值 px, cm, mm 这些是绝对值. rem, em 是相对值. 绝对值就是最终的尺寸. 相对值的意思是它不 ...
- JAVAEE——idea安装
一.安装idea 1.点击这里下载jar包 2.点击这里下载idea2019 提取码:1234 (也可自行官网下载付费版自行寻找破解) 3.下载后jar压缩包后解压,把里面那个jar文件随意放在 ...
- HBase集群安装及集成
Hbase集群搭建 注意:在安装hbase或者hadoop的时候,要注意hadoop和hbase的对应关系.如果版本不对应可能造成系统的不稳定和一些其他的问题.在hbase的lib目录下可以看到had ...