【MySQL】高可用解决方案

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 面试官:我们简单聊一下mysqlq高可用相关东西吧。不了解是吧,行,那我们今天面试先到这。

MySQL系列文章

背景


为了避免单台数据库意外宕机引发单点故障导致生产环境瘫痪,一般都会在数据库层做相应的集群处理。网上对MySQL集群方案的整理都比较凌乱,今天来整理一下高可用方案。


高可用方案

主要分成主从复制(一主多从);MMM架构(双主多从);MHA架构(多主多从)三种解决方案


主从复制

主从复制原理

image.png

Master 数据库只要发生变化,立马记录到Binlog 日志文件中,Slave数据库启动一个I/O thread连接Master数据库,请求Master变化的二进制日志。Slave I/O获取到的二进制日志,保存到自己的Relay log 日志文件中。Slave 有一个 SQL thread定时检查Realy log是否变化,变化那么就更新数据


半同步复制

image.png

异步同步binlog复制数据会产生主从数据不一致的情况MySQL在5.6版本中推出半同步复制,在同步数据协议中添加了一个同步操作,这样意味主节点在commit操作,需要确认最少一个从节点确认接收到并且返回ACK,只有这样主节点才能正确提交数据。


组复制

image.png

MySQL于2016年12月发布MySQL 5.7.17推出的一个全新高可用和高扩展的解决方案。组复制,MySQL MGR 集群最少3个server节点共同组成的分布式集群,一种share-nothing复制方案(每个节点之间仅有网络通信,不存在数据交互),每个server节点都有完整的副本


  • 故障检测

组复制不需要依赖外部工具,自带提供一种故障检测机制,这个机制能报告哪个组成员是无响应的,并且如何判断该成员是否排除集群组。


假设服务器A在预定时间段内未收到来自服务器B的消息,如果组内其他成员也同样未收到来自服务器B的消息,那么确认判断B发生故障,这样由其他成员判定将失联组成员从集群中剔除。


此时服务器B与其他服务节点都无法联系,处于游离状态,不能对外提供服务。


  • 容错

MySQL组复制构建在Paxos分布式算法基础上实现的,需要节点数量半数以上server处于活动状态以防止脑裂。


实践中组里必须有三个server,如果出现一个故障,仍然有两个服务器形成半数以上原则继续提供服务。如果第二个server意外地宕掉则整个集群done掉。


MMM架构

image.png

两主多从架构,还是基于主从复制,增加了master备用机制


  • 工作流程
  • 主备服务器切换为备用主服务器
  • 主备服务器迁移写VIP到自己
  • 从服务器切换指向新的主服务器
  • 完成原主服务器上已复制日志的恢复。
  • 使用Change Master to命令连接指向新的主服务器。
  • 缺点
  • 无法完全保证数据的一致性。如主1挂了,MMM monitor已经切换到主2上来了,而若此时双主复制中,主2数据落后于主1(即还未完全复制完毕),那么此时的主2已经成为主节点,对外提供写服务,从而导致数据不一。


MHA架构

image.png

开源的 MySQL 高可用程序,当下比较成熟的解决方案,基于标准的主从复制提供了故障转换功能。但是缺少虚拟ip,需要配合keepalived等一起使用。


MHA节点分为管理节点(类似哨兵)数据节点管理节点会定时探测集群中的master节点,当 master节点出现故障时,它可以自动将拥有最新数据的 slave 节点提升为新的master节点。


并且一个MHA Manager可以管理多个集群,组成MHA集群最少需要4个节点。manager管理节点一台,数据节点三台(一主两从)


  • 工作流程
  • MAH 的目的在于维护 MySQL复制中master库的高可用性。
  • 从宕机崩溃的 master 保存二进制日志事件(bin log events)。
  • 识别含有最新更新的slave。
  • 应用差异的中继日志(relay log)到其他的 slave。
  • 把 master 保存的二进制日志事件(bin log events)应用到要提升为 master 节点的 slave。
  • 解除这个 slave 的只读模式,并提升为新 master。
  • 让其他的 slave 连接到新的 master 进行复制。
  • 缺点
  • MHA架构实现读写分离,最佳实践是在应用开发设计时提前规划读写分离事宜,在使用时设置读连接池与写连接池,或选择折中方案即引入SQL Proxy。
  • 手动处理负载均衡






相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
67 0
|
16天前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
83 3
Mysql高可用架构方案
|
3月前
|
关系型数据库 MySQL 索引
MySQL in 太多的解决方案
MySQL in 太多的解决方案
419 0
|
3月前
|
存储 算法 关系型数据库
(二十二)全解MySQL之分库分表后带来的“副作用”一站式解决方案!
上篇《分库分表的正确姿势》中已经将分库分表的方法论全面阐述清楚了,总体看下来用一个字形容,那就是爽!尤其是分库分表技术能够让数据存储层真正成为三高架构,但前面爽是爽了,接着一起来看看分库分表后产生一系列的后患问题,注意我这里的用词,是一系列而不是几个,也就是分库分表虽然好,但你要解决的问题是海量的。
367 3
|
3月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
11天前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
37 3
|
11天前
|
存储 监控 关系型数据库
MySQL自增ID耗尽解决方案:应对策略与实践技巧
在MySQL数据库中,自增ID(AUTO_INCREMENT)是一种特殊的属性,用于自动为新插入的行生成唯一的标识符。然而,当自增ID达到其最大值时,会发生什么?又该如何解决?本文将探讨MySQL自增ID耗尽的问题,并提供一些实用的解决方案。
19 1
|
26天前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
53 3
|
2月前
|
存储 Java 关系型数据库
JPA不识别MySQL枚举类型的解决方案
在JPA中处理MySQL的枚举类型,需要在实体类与数据库之间进行适当的转换。可以选择使用 `@Enumerated`注解、实现自定义的转换器,或者使用原生SQL查询来解决JPA不直接支持MySQL枚举类型的问题。选择最佳方案时,应考虑项目的具体需求和架构。通过正确的映射和转换,可以确保JPA与MySQL数据库间高效且安全的数据交互。
76 6
|
3月前
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
下一篇
无影云桌面