Mysql高可用架构

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql高可用架构

一致性:

  • 最终一致性:时效性要求不高,在一定时间内达到一致即可
  • 强一致性:时效性要求严格

提要

正常情况下,只要主库更新生成的 bin log,都能传到备库且正确执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是,Mysql 要提供高可用能力,只有最终一致性是不够的,今天我们就来聊聊这个问题。

这里再放一下,上一篇文章中的双 M 机构的主备切换流程图。

主备延迟

主备切换可能是主动运维的动作,比如,软件升级、主库所在机器计划下线等等,也有可能是被动操作,比如主库所在机器掉电等。

在介绍主动切换流程前,先说明一个概念“同步延迟”:

  1. 主库 A 完成一个事务,写bin log,这个时刻记为 T1;
  2. 之后传给备库 B,B收到bin log 时刻记为 T2;
  3. 备库B 解析并执行完这个事务,这个时刻记为 T3。

所谓主备延迟,指的是同一个事务,在备库执行完成时间与在主库执行完成时间的差值,也就是T3-T1。

你可以在备库上执行 show slave status 命令,通过返回结果的 seconds_behind_master 查看当前备库与主库延迟了多少秒,精度为秒。seconds_behind_master 的计算方法是这样的:

  1. 每个事务的 bin log 里,都会记录这个事务在主库上写入的时间;
  2. 备库取出这个时间,跟自己当前系统时间计算差值,得到 seconds_behind_master 。
    说明:如果主库和备库的系统时间不一致,备库在连接到主库的时候,会通过执行 SELECT UNIX_TIMESTAMP() 函数获取主库的系统时间,如果不一致,备库在计算 seconds_behind_master 的时候会扣掉这个差值

在网络正常的时候,binlog 在传给备库的时间是很短的,这种情况下,主备延迟的主要来源就是备库接收完bin log 和执行完这个事务的时间差。

主备延迟的来源

一、 非对称部署,就是说备库所在的机器性能要比主库所在机器的性能差。

二、即使对称部署,在备库压力大时,也会出现主备延迟。对于主库,由于会影响业务,大家用起来比较克制,从而忽视了备库的压力控制。结果就是备库上的查询耗费了大量的cpu资源,影响了同步速度,造成主备延迟。这种情况,一般可以这么处理:

  • 一主多从。除了备库外,再多接几个从库,让这些从库来分担读的压力;
  • 通过 binlog 输出到外部系统,比如 Hadoop 这类系统,让外部系统提供一部分查询能力。

一般会采用一主多从的方式,因为数据系统还必须保证有定期的全量备份。而从库就很适合用来做备份。

三、大事务

这种情况很好理解,只有等到主库上的事务执行完成才会写入 bin log,再传给备库。所以,如果一个在主库上执行了10分钟的语句,那么这个事务很可能会导致从库延迟10分钟。尽量减少大事务,如:一次性delete 掉太多数据。

四、备库的复制能力,下一篇文章展开讨论。

主备切换策略

一、可靠性优先策略

在双M架构下,从状态1切换到状态2的流程如下:

  1. 在备库上查看 seconds_behind_master ,如果小于某个值(比如5秒)继续下一步,否则持续重试第一步;
  2. 这里 seconds_behind_master 已经小于我们预期的值了,把主库改为只读状态;
  3. 判断备库的 seconds_behind_master 是否为 0,直到为 0 为止;
  4. 把备库 B 改为可读写状态;
  5. 把业务请求切到备库 B。

细心的同学可能意识到了,这种策略有一段时间的服务不可用,也就是等 seconds_behind_master 为0 的这段时间。所以,在第一步就需要保证 seconds_behind_master 足够小,尽量减少不可用时间。

二、可用性优先策略

也就是说,强行把步骤4、5 提到最开始执行,也就是说不等主备一致,直接切换。结果就是主备数据可能不一致

总结

在满足数据可靠性的前提下,数据库的高可用性,是依赖于主备延迟的。延迟越小,在主库故障的时候,切换的时间就越短,可用性就越高。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
163 3
Mysql高可用架构方案
|
2月前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
143 1
|
3月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
1月前
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
【赵渝强老师】MySQL的体系架构
|
23天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
123 3
|
3天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
13 3
|
3天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
19 3
|
3天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
22 2

推荐镜像

更多