Mysql高可用架构

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 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 提到最开始执行,也就是说不等主备一致,直接切换。结果就是主备数据可能不一致

总结

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
45 1
|
1月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
2月前
|
存储 Cloud Native 关系型数据库
PolarDB 高可用架构设计与实践
【8月更文第27天】 在现代互联网应用中,数据库作为核心的数据存储层,其稳定性和可靠性尤为重要。阿里云的 PolarDB 作为一款云原生的关系型数据库服务,提供了高可用、高性能和自动化的特性,适用于各种规模的应用。本文将详细介绍 PolarDB 的高可用架构设计,并探讨其实现数据安全性和业务连续性的关键技术。
69 0
|
2月前
|
运维 监控 关系型数据库
【一文搞懂PGSQL】7. PostgreSQL + repmgr + witness 高可用架构
该文档介绍了如何构建基于PostgreSQL的高可用架构,利用repmgr进行集群管理和故障转移,并引入witness节点增强网络故障检测能力。repmgr是一款轻量级的开源工具,支持一键部署、自动故障转移及分布式节点管理。文档详细描述了环境搭建步骤,包括配置postgresql参数、安装与配置repmgr、注册集群节点以及配置witness节点等。此外,还提供了故障手动与自动切换的方法及常用命令,确保集群稳定运行。
|
2月前
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
|
2月前
|
数据挖掘 关系型数据库 MySQL
Serverless高可用架构的解决方案体验
Serverless高可用架构的解决方案体验
152 6
|
2月前
|
弹性计算 运维 关系型数据库
云上Serverless高可用架构一键部署体验与测评
在数字化转型背景下,Serverless架构因其实现业务敏捷、降低成本及提升服务可靠性而备受青睐。本文以阿里云Serverless应用引擎(SAE)为核心,展示了一种高可用、低成本且易于扩展的解决方案。通过单地域双可用区部署,构建了具备自动伸缩与故障恢复能力的架构。借助阿里云的一键部署功能,大幅简化了搭建流程,实现了快速部署,并通过性能与成本分析验证了其优势。对比传统ECS,SAE在资源利用与运维效率上表现更佳,特别适合平均负载较低的应用场景。
|
2月前
|
弹性计算 运维 关系型数据库
Serverless高可用架构解决方案评测
Serverless高可用架构方案提供卓越效能与极简运维体验,支持服务托管、弹性伸缩及按量付费,有效降低成本并优化性能。一键部署快速启动,流程直观,文档详实;但在高级配置与特定场景实践方面指导有限。方案采用双可用区部署确保高可用性,自动故障切换保障服务连续。成本模型按需计费,减轻企业负担。功能上集成监控、日志与负载均衡,简化运维,加速上线。性能方面,秒级弹性伸缩保证资源高效匹配负载。总体而言,此方案竞争力强,特别推荐给初创公司及需灵活应对流量波动的场景。
146 2
|
2月前
|
运维 监控 负载均衡
如何构建高可用的系统基础架构
【8月更文挑战第15天】构建高可用的系统基础架构是一个复杂而系统的工程,需要综合考虑设计原则、关键技术和实践策略等多个方面。通过冗余设计、分布式架构、自动化与智能化等技术的运用,可以显著提升系统的可用性和稳定性。同时,加强运维团队的能力建设和制定完善的高可用性策略也是确保系统高可用性的重要保障。希望本文能为读者在构建高可用系统时提供有益的参考和借鉴。
|
2月前
|
关系型数据库 Serverless 分布式数据库
阿里云 Serverless 高可用架构
阿里云的《卓越效能,极简运维,Serverless高可用架构》解决方案提供了全托管服务、自动扩展、高可用性、无缝集成以及内置安全等核心功能。该方案通过免除底层基础设施的管理,允许用户专注于应用程序开发,同时确保应用的稳定运行和资源的有效利用。 **核心功能简介**: - **全托管服务**:用户无需关心底层硬件,由阿里云负责维护和扩展计算资源。 - **自动扩展**:根据业务需求自动调整资源,确保应用在高峰期有足够的计算能力,低谷期则节省成本。 - **高可用性**:多地域和多可用区部署,实现故障自动切换,确保业务连续性。 - **无缝集成**:与阿里云的其他服务(如数据库、消息队列等)深度