我们需要什么样的HA

news2025/1/13 3:09:00

作为DBA,大家在运维数据库的时候都会遇到 数据库发生 Failover /Switchover 切换的场景。数据库发生切换导致业务连续性受损,少则分钟级,多则小时级别。(最近互联网的故障比较多)。

本文 基于 MySQL 数据库架构场景来分析我们在遇到数据库 HA 切换时是系统会面临什么问题以及期待的解决方法。

一 导致HA 切换原因和影响

导致数据库切换的因素:

图片

当数据库发生HA/容灾切换时,无论是计划内还是计划外,运维人员的主要目标是使系统恢复在线并最大程度的减少数据丢失,因为每一分钟的停机时间都会产生直接和间接成本(比如不能 打车/付款/刷脸, 其他各种服务不可用), 衡量停机影响的指标就是 RTO 和 RPO。

恢复时间目标(RTO): 是指业务中断的持续时间,从业务故障开始到全部恢复到可稳定访问的状态。

恢复点目标(RPO): 可接受数据丢失的度量。它是故障前最后提交的数据事务与故障后恢复的最新数据之间的时间间隔或延迟。实际数据丢失可能会有所不同,具体取决于发生故障时系统上的工作负载、故障类型以及所使用的高可用性解决方案的类型。

对于数据库系统来说 RTO 和 RPO 类似天平的两端,需要系统设计进行平衡。RTO 指标的影响时间除了探活时间 之外还有数据库系统本身的恢复时间。数据库系统的重要功能是保证事务的 ACID 能力,其中最重要的是保证“一致性”,这就需要对故障系统中已经提交的数据进行恢复,对没有提交的数据进行回滚。

所以往往追求减少 RTO 时间就会导致短期数据不一致。如果既要追求 RTO、又要追求RPO怎么办?这也不是完全不能达到的,一般来看都是增加物理硬件资源的投入,要么增加副本数、提高数据传输性能、使用非易失内存、使用高端的存储服务器,使用新的数据库架构,比如共享存储解决 RPO 时间长的问题等等。

二 不同架构 HA 切换遇到的问题

传统架构: 基于主从复制 + VIP /Proxy

图片

传统主备模式的 MySQL的高可用都是基于 binlog 复制,存在复制延迟,sync_binlog 等参数配置等因素带来如下问题:

  1. 主备数据不一致(大事务/DDL 等因素导致主从延迟),需要人工介入进行数据回补。

  2. 业务连接闪断,事务回滚,会话中断等可能持续 30s+ 访问报错 ,这段耗时主要看 应用处理异常并且重新建联的时间。

  3. 故障探测时间周期 比如  每5秒一次,3次失败之后切换,15秒的探测时间导致 RTO  偏长,数据库切换完成,到业务恢复基本要60s 甚至更久。

  4. 还要需要系统或者DBA 接入处理RPO 相关的事情,DB切换时 binlog 是否传递到备库或者备库是否能及时获取全部的主库日志,多个从库场景下日志补齐等等,都影响整体的 RPO 指标。

MGR + Proxy

MGR场景下,数据安全性有非常大提高,解决数据丢失的风险。基于binnlog 复制的基础技术框架下,还是有问题:

  1. 有 DDL ,大事务 导致数据延迟的风险。

  2. 业务访问 DB 会话闪断,事务回滚的问题。

  3. 需要设置 group_replication_consistency 来平衡性能和数据一致性。

共享存储架构

基于共享存储的高可用通过物理复制 Redo,数据共享解决数据延迟以及基于主从架构的数据丢失的安全风险,规避 DDL 影响"主从延迟"的问题。但是该架构依然需要解决连接闪断和事务保持的问题。

三 云数据库如何解决?

基于前面谈到的高可用切换的痛点 ,PolarDB MySQL 开发新特性: 热备无感秒切技术,通过 VDS全局预热系统连接和事务保持三大特性,解决的故障探测、切换速度和切换体验问题, 直白的说 就是 提升系统切换的 RTO 和 RPO,做到"既要又要"。

故障探测:引入全新的高可用模块Voting Disk Service(简称VDS),该模块基于共享存储架构,实现自治的集群节点管理,大幅降低故障检测和集群选主耗时。

图片

切换速度:新增支持全局预热系统的热备节点,通过对存储引擎内部的多个模块提前预热,优化升主的执行耗时。

图片

热备节点是弱化版的只读节点,同时也是一个更接近主节点,并随时准备切换的灾备。相较于普通的只读节点,它保留了有限的读服务,预留了更多的 CPU 和 Memory 资源来优化切换速度。全局预热系统是热备切换中最核心的模块,主要负责实时同步主节点的元信息,将一些关键数据提前加载进内存,来提升未来潜在的升主切换速度。

切换体验:结合数据库代理(PolarProxy),支持连接保持和事务保持功能。在集群升降配或小版本升级过程中,开启连接保持和事务保持功能后,系统会尽可能地保证用户的连接和事务不中断,实现基本无感知的主动运维。

假设应用程序在 PolarDB 执行 UPDATE 的过程中,主节点出现故障。此时 PolarProxy 并不会立刻将底层的报错传给应用连接,而是将整个请求 hold 一段时间。热备切换选主之后,新的主节点通过Redo Log构建出所有的未提交事务,并异步等待未提交的事务,且暂时不进行回滚。

图片

PolarProxy 在探测到主备切换成功信息后,会利用自身缓存的会话信息和事务信息,借助 PolarDB 的 Attach Trx 接口,桥接事务状态。PolarDB 会根据 PolarProxy 信息,判断相关的事务信息是否有效。如果事务有效,会将事务信息绑定到这个连接上,并回滚至最后一条语句(即上文的UPDATE)对应undo_no的Savepoint中。

四 别废话,动手体验

来都来了,动手试试吧,反正也不要钱。

为了能够让感兴趣的朋友对 PolarDB  M 的无感切换有更加立体的认识和体验,(talk is cheap ,show me the code  ) 我们开发线上功能体验馆,只要登陆官网然后动动鼠标即可免费体验到 无感切换的功能。

感兴趣的朋友可以通过 阅读原文 一键直达 PolarDB MySQL 无感切换功能体验页面。

测试场景
1. PolarDB 集群开启热备集群。
2. 通过 sysbench oltp_write_only,并发16,压测180s, 测试 PolarDB集群一主一只读节点的写入性能
3. 在压测过程中 主动 kill 主库 或者触发 switchover 动作切换数据库
4. 通过 sysbench的报告数据 体现 2种 切换对 TPS 的影响。

登陆体验馆,进入体验页面

实际体验页面:  https://yaochi.console.aliyun.com/overview,点击 功能体验馆,进入 无感切换页面。

图片

测试方法说明: https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/free-experience-polardb-mysql-failover

创建任务

单击页面下方 创建任务 按钮,并在弹出框中单击 确定 开始创建 Sysbench 压测任务。

图片

注意后台启动任务需要大概 30s 左右,请耐心等待,操作标题对应的 查看详情变蓝

根据如下图示 右上角的 刷新 按钮 ,刷新任务列表,可以看到用户创建的压测任务已开始。

图片

进入切换页面

切换压测任务创建成功之后,点击体验记录 或者  操作标题对应的  查看详情 ,进入切换页面 ,进入实时压测情况页面。可以看到,压测任务已经开始,两个 PolarDB 集群在相同压测任务下的TPS水位是动态一致的。

点击切换测试 ,查看切换数据

单击左上角 开始切换测试,后台会触发两个 PolarDB 集群切换动作,通过动态实时 输出 sysbench 的压测数据,我们可以观测到如下结果:

图片

普通切换的 PolarDB 集群的TPS 直接跌零,并持续了近15-20秒左右才恢复正常水平。这里的正常切换同样适用于其他 MySQL 架构的切换场景。

开启 无感秒切的PolarDB 集群的 TPS并未跌零,只是出现了短暂的下降,三秒后就恢复了正常水平。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1274529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue的Nuxt项目部署在服务器,pm2动态部署和npm run build静态部署

Nuxt项目的部署有两种方式,一种是静态部署,一种是动态部署 静态部署需要关闭项目的ssr功能,动态部署则不需关闭,所以怎么部署项目就看你用不用ssr功能了 。 1.静态部署 先说静态部署,很简单,只需要在nuxt…

【自动化测试】pytest 用例执行中print日志实时输出

author: jwensh date: 20231130 pycharm 中 pytest 用例执行中 print 日志 standout 实时命令行输出 使用场景 在进行 websocket 接口进行测试的时候,希望有一个 case 是一直执行并接受接口返回的数据 def on_message(ws, message):message json.loads(message)…

OSU(Optical Service Unit,光业务单元)简介

文章目录 应用场景和功能OSU关键技术基于PB的帧结构划分方式分组业务映射到OSU带宽无损调整机制 标准进展OSU构建电力系统全光底座,赋能新型电力系统 光传送网(OTN)具有大带宽、硬管道、多业务承载能力、电信级的OAM机制等技术优势&#xff0…

macOS本地调试k8s源码

目录 准备工作创建集群注意点1. kubeconfig未正常加载2. container runtime is not running3. The connection to the server 172.16.190.132:6443 was refused - did you specify the right host or port?4. 集群重置5.加入子节点 代码调试 准备工作 apple m1芯片 安装vmwa…

【JavaScript】3.4 JavaScript在现代前端开发中的应用

文章目录 1. 用户交互2. 动态内容3. 前端路由4. API 请求总结 JavaScript 是现代前端开发的核心。无论是交互效果,还是复杂的前端应用,JavaScript 都发挥着关键作用。在本章节中,我们将探讨 JavaScript 在现代前端开发中的应用,包…

Docker 镜像及其命令

文章目录 镜像Docker 镜像加载原理联合文件系统bootfs和rootfs镜像分层 镜像分层的优势容器层常用命令 镜像 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境&#xff…

外贸独立站建站详细操作流程一览,跨境电商卖家营销必看!

独立站是一个独立的网站,包括有独立的服务器,独立的网站程序以及网站域名。关于独立站 的优势已经说了很多,本文就不再细谈,想了解的小伙伴可以自行查找之前发布的文章观看。 今天就来说说搭建独立站的详细步骤都有哪些&#xff1…

word模板导出word文件

前期准备工作word模板 右键字段如果无编辑域 ctrlF9 一下&#xff0c;然后再右键 wps 直接 ctrlF9 会变成编辑域 pom.xml所需依赖 <dependencies> <!--word 依赖--> <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId…

R语言30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

深度学习(一):Pytorch之YOLOv8目标检测

1.YOLOv8 2.模型详解 2.1模型结构设计 和YOLOv5对比&#xff1a; 主要的模块&#xff1a; ConvSPPFBottleneckConcatUpsampleC2f Backbone ----->Neck------>head Backdone 1.第一个卷积层的 kernel 从 6x6 变成了 3x3 2. 所有的 C3 模块换成 C2f&#xff0c;可以发现…

AIGC实战——生成对抗网络(Generative Adversarial Network)

AIGC实战——生成对抗网络 0. 前言1. 生成对抗网络1.1 生成对抗网络核心思想1.2 深度卷积生成对抗网络 2. 数据集分析3. 构建深度卷积生成对抗网络3.1 判别器3.2 生成器3.3 DCGAN 模型训练 4. GAN 训练技巧4.1 判别器强于生成器4.2 生成器强于判别器4.3 信息量不足4.4 超参数 小…

机器人AGV小车避障传感器测距

一、A22超声波传感器 该模块是基于机器人自动控制应用而设计的超声波避障传感器&#xff0c;针对目前市场上对于超声波传感器模组盲区大、测量角度大、响应时间长、安装适配性差等问题而着重设计。 具备了盲区小、测量角度小、响应时间短、过滤同频干扰、体积小、安装适配性高…

邀请函 | 合作发展,赋能增效--新架构下汽车电子软件研发技术研讨会

会议介绍 随着汽车智能化、网联化快速演进&#xff0c;“软件定义汽车、架构定义软件”愈发形成行业共识。汽车上的软件应用在提升用户体验、推动行业技术创新方面发挥着至关重要的作用。 在此背景下&#xff0c;如何有效地提升软件开发效率、更好地管理软件质量、满足行业安全…

iOS Swift 代码格式化工具

如果你的代码写得很乱&#xff0c;想一键盘整理代码&#xff0c;像大家推荐一款工具 &#xff08;PS&#xff1a;Xcode本身并没有代码格式化工具&#xff0c;这款工具为第三方开发的&#xff09; 这款工具名为&#xff1a;SwiftFormat 1&#xff1a;在GitHub上搜索“SwiftFo…

YOLOv8改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)

一、本文介绍 本文给大家带来的改进内容是SCConv&#xff0c;即空间和通道重构卷积&#xff0c;是一种发布于2023.9月份的一个新的改进机制。它的核心创新在于能够同时处理图像的空间&#xff08;形状、结构&#xff09;和通道&#xff08;色彩、深度&#xff09;信息&#xf…

中国毫米波雷达产业分析5——毫米波雷达应用案例介绍

一、上海某区康养标杆工程 项目甲方&#xff1a;上海某康养中心 项目地点&#xff1a;上海徐汇区 项目时间&#xff1a;2023年8月 供应商&#xff1a;南京苗米科技有限公司 &#xff08;一&#xff09;项目需求 该康养社区集中收治了区内75岁以上老龄化人群和部分阿尔茨海默…

RubyMine 2023 年下载、安装、使用教程,详细图解

大家好&#xff0c;今天为大家带来的是RubyMine 2023 年下载、安装、使用教程&#xff0c;详细图解。 文章目录 1 RubyMine 简介2 RubyMine 下载、安装教程RubyMine 下载RubyMine 安装 3 RubyMine 汉化4. 常用快捷键一级必会二级进阶 1 RubyMine 简介 RubyMine 是一个为 Ruby …

CRM系统:让企业商机管理变得轻松愉快

传统企业的经常出现团队分工不合理、实施过程不可见、进度难以把控等情况。这样不仅会让项目实施周期变长&#xff0c;还会导致客户满意度降低&#xff0c;给企业的发展带来了不好的影响。因此&#xff0c;进行商机管理至关重要。那么&#xff0c;CRM系统如何进行企业的商机阶段…

做热衷的事情,看向往的风景,遇见更多美好,早安

①‍ ʍօʀռɨռɢ ☼ (˘͈ᵕ ˘͈❀) ♡ ༘⋆ 岁月覆盖成长&#xff0c;而你愈发完满&#xff1b; 做热衷的事情&#xff0c;看向往的风景。 每天醒来将微笑别在衣襟&#xff0c; 就会遇见更多的美好事物。早安&#x1f324;️ ②生活就是这样&#xff0c;边失去边补偿&…

Redis7--基础篇5(管道、发布订阅)

管道是什么 管道(pipeline)可以一次性发送多条命令给服务端&#xff0c;服务端依次处理完完毕后&#xff0c;通过一条响应一次性将结果返回&#xff0c;通过减少客户端与redis的通信次数来实现降低往返延时时间。pipeline实现的原理是队列&#xff0c;先进先出特性就保证数据的…