前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL高可用架构

MySQL高可用架构

作者头像
一行舟
发布于 2022-08-25 05:54:07
发布于 2022-08-25 05:54:07
1.3K0
举报
文章被收录于专栏:一行舟一行舟

引言

“高可用”是互联网一个永恒的话题,先避开MySQL不谈,为了保证各种服务的高可用有几种常用的解决方案。

  1. 服务冗余:把服务部署多份,当某个节点不可用时,切换到其他节点。服务冗余对于无状态的服务是相对容易的。
  2. 服务备份:有些服务是无法同时存在多个运行时的,比如说:Nginx的反向代理,一些集群的leader节点。这时可以存在一个备份服务,处于随时待命状态。
  3. 自动切换:服务冗余之后,当某个节点不可用时,要做到快速切换。

总结起来就是 冗余+故障转移

MySQL高可用

MySQL的高可用也是同样的思路,首先要有多个MySQL实例提供服务,其次就是当某个实例挂掉时,可以自动切换流量。同时MySQL作为存储,节点之间数据同步也是一个难题(换句话说,有状态的服务都面临这个问题)。

一主一备:

MySQL的各种高可用架构,都脱离不了MySQL实例之间的数据同步,因此,我们先介绍下最简单的一主一备架构下MySQL的数据同步流程。

上图是主从数据同步的一个示意图。

  • Master节点有Dump进程把binlog中的数据发送到Slave节点,
  • Slave节点有IO进程接收数据写入relay log,
  • Slave节点的SQL进程根据relay log写入数据。

这里还要延伸一点,binlog存在三种形式:Statement、Row、Mixed。

  • Statement:就是把每一条SQL记录到binlog中。
  • Row:是把每一行修改的具体数据记录到binlog中。
  • Mixed:MySQL会灵活的区分,需要记录sql还是具体修改的记录。

只记录SQL的话binlog会比较小,但是有些SQL语句在主从同步数据的时候,可能会因为选择不同的索引在数据同步过程中出现数据不一致。记录Row的话就可以保证主从同步不会存在SQL语意偏差的问题,同时Row类型的日志在做数据恢复的时候也比较容易,但是Row会导致binlog过大。

MySQL主从同步的几种模式:

  • 异步模式: 在这种策略下,主库按照自己的流程处理完数据,会直接返回结果,不会等待主库和从库之间的数据同步。 优点:效率高。

缺点:Master节点挂掉之后,Slave节点会丢失数据。

  • 全同步模式:主库会等待所有从库都执行完sql语句并ACK完成,才返回成功。 优点:有很好的数据一致性保障。 缺点:会造成数据操作延迟,降低了MySQL的吞吐量。
  • 半同步模式:主库会等待至少有一个从库把数据写入relay log并ACK完成,才成功返回结果。半同步模式介于异步和全同步之间。

半同步的复制方案是在MySQL5.5开始引入的,普通的半同步复制方案步骤如下图:

  • Master节点写数据到Binlog,并且执行Sync操作。
  • Master发送数据给Slave节点,同时commit主库的事务。
  • 收到ACK后Master节点把数据返回给客户端。

这种数据提交模式叫:after_commit

after_commit模式存在问题:主库等待ACK时,事务已经commit,主库的其他事务可以读到commit的数据,这个时候如果Master崩溃,slave数据丢失,发生主从切换,会导致出现幻读。为了解决这个问题MySQL5.7提出了新的半同步复制模式:after_sync

把主库的事务提交放到了ACK之后,避免了上述问题。MySQL5.7还引入了enhanced multi-threaded slave(简称MTS)模式, 当slave配置slave_parallel_workers>0并且global.slave_parallel_type=‘LOGICAL_CLOCK’,可支持一个schema下,slave_parallel_workers个worker线程并发执行relay log中主库提交的事务,极大的提高了主从复制的效率。MySQL5.7半同步功能可以通过rpl_semi_sync_master_wait_slave_count参数配置slave节点ACK的个数,认为主从同步完成。

基于MySQL主从同步数据越来越完善,效率越来越高,也就引出了第一种MySQL的高可用架构:

基于MySQL自身的主从同步方案,常用的一种部署架构是:用户通过VIP访问Master和Slave节点,每个节点采用keepalved探活。配置主从关系,进行数据同步。

基于MHA的高可用架构:部署一份MHA的Manager节点,在MySQL各个实例部署MHA Node节点。MHA可以实现秒级的故障自动转移。当然MySQL节点之间的数据同步还要依赖MySQL自身的数据同步方式。

MGR(MySQL Group Replication)模式:感觉MySQL官方更看好MGR集群方案,但是目前我还不知道国内有哪一家公司在使用。MGR集群是由所有的MySQL Server共同组成的,每个Server都有完整的副本数据,副本之间基于Row格式的日志和GTID来做副本之前的数据同步,采用Paxos算法实现数据的一致性保障。MGR架构要比前面讲述的半同步和异步同步数据的方式要复杂,具体可以参照官网(https://dev.mysql.com/doc/refman/8.0/en/group-replication.html)

总结

MySQL的高可用架构没有银弹,了解其原理,选择符合自己业务场景的部署架构就可以了。

参考文章: https://www.jianshu.com/p/5ef1565738ab https://developer.aliyun.com/article/621197 https://zhuanlan.zhihu.com/p/25960208 https://blog.csdn.net/weixin_42452328/article/details/112448974 https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html https://news.51cto.com/art/202006/618971.htm http://www.ttlsa.com/mysql/mysql-5-7-enhanced-multi-thread-salve/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一行舟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL是如何保证不丢数据的(二)
上篇文章我们聊了单机模式下,MySQL是如何保证数据一致性的,但是在实际的生产环境中,很少采用单机模式。现在所有的集群架构都是从MySQL的主从复制演变过来的。MySQL的主从复制是通过将主库的binlog发送至从库,从库重新提交主库的变更来实现主从数据的一致性。MySQL的主从复制主要分为三种:异步复制、半同步复制、组复制(MGR)。
MySQL数据库技术栈
2020/08/05
2.5K0
MySQL是如何保证不丢数据的(二)
MySQL高可用架构-MMM、MHA、MGR、PXC
半同步复制在提交过程中增加了一个延迟:提交事务时,在客户端接收到查询结束反馈前必须保证二进制日志已经传输到一台备库上。
用户4283147
2022/10/27
2K0
MySQL高可用架构-MMM、MHA、MGR、PXC
大厂都在用的MySQL主从复制、读写分离及高可用方案
随着数据量的增大,读写并发的增加,系统可用性要求的提升,单机 MySQL 出现危机:
JavaEdge
2021/02/20
8.3K0
MySQL集群架构[通俗易懂]
题记: 文章内容输出来源:拉勾教育Java高薪训练营。 本篇文章是 MySQL 学习课程中的一部分笔记。
全栈程序员站长
2022/09/18
1.5K0
MySQL集群架构[通俗易懂]
数据库高可用架构设计,看这篇就够了!!!
又赶上一年一度的金九银十的日子,这段期间的招聘岗位相对前几个月会多些,如果在目前公司没有进步、没有前途时,这段时间可以准备一下,去外面看看机会。不过在外面找工作时,可以提前在网上看看招聘信息,看看自己是否达到公司要求。如果多看下高薪资的技术人员招聘要求时,就会发现对三高都有一定的要求,比如下面一家公司的要求就对高并发、高负载和高可用性系统设计要有开发经验。
一个会写诗的程序员
2023/03/08
2.8K0
数据库高可用架构设计,看这篇就够了!!!
MySQL-主从架构探索
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
小小工匠
2021/08/17
3910
mysql学习之mysql集群
​ mysql主从架构部署比较简单,常见架构根据主从节点个数不同分成 一主多从,多主一从,双主节点等。
全栈程序员站长
2022/11/01
3.1K0
mysql学习之mysql集群
面试系列-mysql主从复制
MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点:
用户4283147
2022/10/27
1.3K0
面试系列-mysql主从复制
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
在分布式系统中,单机节点在发生故障时无法提供服务,这可能导致长期的服务不可用,从而影响其他节点的运作,导致的后果非常严重
菜菜的后端私房菜
2024/06/28
5770
MySQL高可用架构案例篇:UCloud最佳实践
内容来源:2017年7月22日,UCloud高级研发工程师王松磊在“饿了么技术沙龙【第九弹】上海研发中心·运维专场”进行《数据库高可用架构》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。 阅读字数:3280 | 9分钟阅读 摘要 分享UCloud在数据库高可用上的最佳实践。首先介绍MYSQL常见的高可用方式,并分析其存在的问题,然后给出UCloud对此的思考和解决方法。 嘉宾演讲视频及PPT回顾:http://suo.im/2obXuQ MySQL
IT大咖说
2018/06/04
7840
技术分享 | 无损半同步复制下,主从高可用切换后数据一致吗?
MySQL5.7 默认参数下我们开启了半同步,在一个事务提交(commit) 的过程时,在 MySQL 层的 write binlog 步骤后,Master 节点需要收到至少一个 Slave 节点回复的 ACK (表示收到了binlog )后,才能继续下一个事务;
爱可生开源社区
2022/08/25
7570
美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新。同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望。 MMM
庞小明
2018/03/09
3.9K0
美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
基于MHA搭建MySQL Replication集群高可用架构
MHA是Master High Availability的缩写,它是目前MySQL高可用方面的一个相对成熟的解决方案,其核心是使用perl语言编写的一组脚本,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
端碗吹水
2020/09/23
1.1K0
基于MHA搭建MySQL Replication集群高可用架构
爱奇艺 MySQL 高可用方案到底有多牛?
爱奇艺每天都为数以亿计的用户提供7x24小时不间断的视频服务。通过爱奇艺的平台,用户可以方便的获取海量、优质、高清的视频资源。但如果服务平台出现故障,会有大量的用户将无法正常播放视频,因此我们的应用服务以及数据库服务都必须具备高可用架构。
开发者技术前线
2020/11/23
1.1K0
爱奇艺 MySQL 高可用方案到底有多牛?
一文搞懂MySQL主从复制方案、读写分离及高可用
随着数据量的增大,读写并发的增加,系统可用性要求的提升,单机 MySQL 出现危机:
JavaEdge
2021/02/03
1.3K0
一文搞懂MySQL主从复制方案、读写分离及高可用
MySQL 主从架构原理
上图展示的是 MySQL 的主从切换流程。在 State-1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行。这样可以保持节点 B 和 A 的数据是相同的。当需要切换的时候,就切成状态 2。这时候客户端读写访问的都是节点 B,而节点 A 是 B 的从库。
张申傲
2020/09/03
1.2K0
MySQL 主从架构原理
MYSQL高可用架构MMM实现
描述: MySQL的MMM(Master-Master replication manager for MySQL)是一套 支持双主故障切换和双主日常管理的脚本程序高可用架构;
全栈工程师修炼指南
2022/09/28
1.1K0
MYSQL高可用架构MMM实现
深入浅出MySQL复制--MySQL的"核心科技"
MySQL复制是MySQL成功的最重要原因之一,前东家某公司内网上有相关资料,低下评论戏称"核心科技",今天将核心科技分享给大家
DBA札记
2023/02/15
4970
深入浅出MySQL复制--MySQL的"核心科技"
高可用架构-- MySQL主从复制的配置
环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 主节点IP:192.168.1.205 主机名:edu-mysql-01 从节点IP:192.168.1.206 主机名:edu-mysql-02 主机配置:4核CPU、4G内存 依赖课程 《高可用架构篇--第13节--MySQL源码编译安装(CentOS-6.6+MySQL-5.6)》 MySQL主从复制官方文档 http://dev.mysql.com/doc/refma
思梦php
2018/03/09
1.7K0
高可用架构-- MySQL主从复制的配置
MySQL集群高可用架构之MHA
记得之前发过一篇文章,名字叫《浅析MySQL高可用架构》,之后一直有很多小伙伴在公众号后台或其它渠道问我,何时有相关的深入配置管理文章出来,因此,民工哥,也将对前面的各类架构逐一进行整理,然后发布出来。那么今天将来发布的MHA的架构整体规划与配置操作。
民工哥
2020/09/16
8170
MySQL集群高可用架构之MHA
推荐阅读
相关推荐
MySQL是如何保证不丢数据的(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档