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模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。

相关推荐
Fleshy数模4 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
az44yao4 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
秦老师Q6 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
橘子137 小时前
MySQL用户管理(十三)
数据库·mysql
Dxy12393102167 小时前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋7 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣507 小时前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
人道领域7 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
千寻技术帮8 小时前
10404_基于Web的校园网络安全防御系统
网络·mysql·安全·web安全·springboot
spencer_tseng9 小时前
MySQL table backup
mysql