【MySQL】高可用解决方案

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,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。
  • 手动处理负载均衡






相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
SQL 关系型数据库 MySQL
解决MySQL主从慢同步问题的常见的解决方案:
解决MySQL主从慢同步问题的方法有很多,以下是一些常见的解决方案: 1. 检查网络连接:确保主从服务器之间的网络连接稳定,避免网络延迟或丢包导致数据同步缓慢。 2. 优化数据库配置:调整MySQL的配置参数,如增大binlog文件大小、调整innodb_flush_log_at_trx_commit等参数,以提高主从同步性能。 3. 检查IO线程和SQL线程状态:通过SHOW SLAVE STATUS命令检查IO线程和SQL线程的状态,确保它们正常运行并没有出现错误。 4. 检查主从日志位置:确认主从服务器的binlog文件和位置是否正确,避免由于错误的日志位置导致同步延迟。 5.
207 1
|
11天前
|
关系型数据库 MySQL 数据库
深入探讨MySQL并发事务的问题及解决方案
深入探讨MySQL并发事务的问题及解决方案
88 0
|
11天前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
|
11天前
|
Kubernetes 关系型数据库 MySQL
MySQL在Kubernetes上的高可用实现
【5月更文挑战第1天】
|
11天前
|
缓存 关系型数据库 MySQL
【专栏】提升MySQL性能和高可用性的策略,包括索引优化、查询优化和事务管理
【4月更文挑战第27天】本文探讨了提升MySQL性能和高可用性的策略,包括索引优化、查询优化和事务管理。通过合理使用B-Tree和哈希索引,避免过度索引,以及优化查询语句和利用查询缓存,可以改善性能。事务管理中,应减小事务大小并及时提交,以保持系统效率。主从或双主复制可增强高可用性。综合运用这些方法,并根据实际需求调整,是优化MySQL的关键。
|
11天前
|
监控 关系型数据库 MySQL
MySQL高可用集群之MySQL-MMM
MySQL高可用集群之MySQL-MMM
|
11天前
|
缓存 NoSQL 关系型数据库
MySQL与Redis的默契协作:解析数据一致性难题与解决方案
MySQL与Redis的默契协作:解析数据一致性难题与解决方案
29 0
MySQL与Redis的默契协作:解析数据一致性难题与解决方案
|
11天前
|
Ubuntu 关系型数据库 MySQL
解决方案:MySQL数据表明明存在,但是就是报错表不存在,原来是需要配置 MySQL 忽略表名大小写!
解决方案:MySQL数据表明明存在,但是就是报错表不存在,原来是需要配置 MySQL 忽略表名大小写!
27 0
|
11天前
|
存储 SQL 分布式计算
搭建Mysql Cluster集群实现高可用
搭建Mysql Cluster集群实现高可用
28 0
|
11天前
|
关系型数据库 MySQL Linux
centos7下 Mysql+Keepalived 双主热备高可用图文配置详解
centos7下 Mysql+Keepalived 双主热备高可用图文配置详解
32 0