likes
comments
collection
share

MySQL高级 - 集群架构

作者站长头像
站长
· 阅读数 114

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战

MySQL高可用设计

高可用介绍

什么是高可用性

维基百科的解释是:

高可用性(英语:High availability,缩写为 HA),IT术语,指系统无中断地执行其功能的能力,代表系统的可用性程度。是进行系统设计时的准则之一。高可用性系统与构成该系统的各个组件相比可以更长时间运行。

计算公式:A表示可用性;MTBF表示平均故障间隔;MTTR表示平均恢复时间

MySQL高级 - 集群架构

高可用有一个标准,9越多代表越容错,可用性越高

MySQL高级 - 集群架构

假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。很多公司的高可用目标是4个9,也就是99.99%

MySQL高可用介绍

我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面:

  • 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。
  • 用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。
  • 客户端通过Master对数据库进行写操作,slave端进行读操作,并可进行备份。Master出现问题后,可以手动将应用切换到slave端。

MySQL高可用集群方案

主从复制+读写分离

此种架构,一般初创企业比较常用,也便于后面步步的扩展, 客户端通过Master对数据库进行写操作,slave端进行读操作,并可进行备份。Master出现问题后,可以手动将应用切换到slave端。

MySQL高级 - 集群架构

主从复制的优点:

  1. 实时灾备,用于故障切换(高可用)
  2. 读写分离,提供查询服务(读扩展)
  3. 数据备份,避免影响业务(高可用)

读写分离的优点:

  1. 主从只负责各自的写和读,极大程度的缓解锁争用
  2. 从库可配置myisam引擎,提升查询性能以及节约系统开销
  3. 从库同步主库,通过主库发送来的binlog恢复数据
  4. 读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制

双主从复制

很多企业刚开始都是使用MySQL主从模式,一主多从、读写分离等。但是单主如果发生单点故障,从库切换成主库还需要作改动。因此,如果是双主或者多主,就会增加MySQL入口,提升了主库的可用性

MySQL高级 - 集群架构

双主模式是指两台服务器互为主从,任何一台服务器数据变更,都会通过复制应用到另外一方的数据库中。

问题:使用双主双写还是双主单写

建议大家使用双主单写,因为双主双写存在以下缺点:

  • ID冲突 在A主库写入,当A数据未同步到B主库时,对B主库写入,如果采用自动递增容易发生ID主键的冲突。

可以采用MySQL自身的自动增长步长来解决,例如A的主键为1,3,5,7...,B的主键为2,4,6,8... ,但是对数据库运维、扩展都不友好。

  • 更新丢失

同一条记录在两个主库中进行更新,会发生前面覆盖后面的更新丢失。

MMM架构

MMM(Master-Master Replication Manager for MySQL)是一套用来管理和监控双主复制,支持双主故障切换 的第三方软件。MMM 使用Perl语言开发,虽然是双主架构,但是业务上同一时间只允许一个节点进行写入操作。

  • MMM故障处理机制 MMM 包含writer和reader两类角色,分别对应写节点和读节点。
    • 当writer节点出现故障,程序会自动移除该节点上的VIP
    • 写操作切换到 Master2,并将Master2设置为writer
    • 将所有Slave节点会指向Master2

除了管理双主节点,MMM也会管理Slave节点,在出现宕机、复制延迟或复制错误,MMM会移除该节点的VIP,直到节点恢复正常。

MHA架构

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本人开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。

在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器, 一主二从,即一台充当master,一台充当备用master,另外一台充当从库

  • MHA Manager管理多组主从复制

MySQL高级 - 集群架构

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。

  • MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。
  • MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

MHA故障处理机制:

  • 把宕机master的binlog保存下来
  • 根据binlog位置点找到最新的slave
  • 用最新slave的relay log修复其它slave
  • 将保存下来的binlog在最新的slave上恢复
  • 将最新的slave提升为master
  • 将其它slave重新指向新提升的master,并开启主从复制

MHA优点:

  • 自动故障转移快
  • 主库崩溃不存在数据一致性问题
  • 性能优秀,支持半同步复制和异步复制
  • 一个Manager监控节点可以监控多个集群
转载自:https://juejin.cn/post/7056043313824169997
评论
请登录