我们需要什么样的HA

作为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并未跌零,只是出现了短暂的下降,三秒后就恢复了正常水平。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

远程访问与设备重定向USB for Remote Desktop 官网

FabulaTech - USB over Network, USB for Remote Desktop, virtual COM ports FabulaTech.com - Downloads 另个软件-USB for Remote Desktop | 下载 USB over RDP app 用于远程桌面的 USB 在远程 Windows 会话中访问本地 USB 设备。 适用于 Windows 和 Linux 远程桌面。 下载…

python之logo编程

Logo标志是一种视觉符号,代表着一个品牌、企业或组织的形象。它通常采用图形、字母或字形来代表一个公司或品牌,起到对徽标拥有公司的识别和推广的作用。Logo的设计需要考虑多种因素,例如颜色搭配、字体选择和构图等,以创造出独特…

【深度优先】LeetCode1932:合并多棵二叉搜索树

作者推荐 动态规划LeetCode2552:优化了6版的1324模式 题目 给你 n 个 二叉搜索树的根节点 ,存储在数组 trees 中(下标从 0 开始),对应 n 棵不同的二叉搜索树。trees 中的每棵二叉搜索树 最多有 3 个节点 &#xff0…

程序猿无烦恼:让养生专家来写代码!!!

自己的经验,也是看旁边焦虑的开发总结的一些经验,讲道理不一定有用,但是道理本身一定是对的。 文章目录 持续学习少烦恼明确需求少问题少盯荧幕多冥想少吃奶茶多锻炼亲近自然要放空 持续学习少烦恼 C、JAVA、python、数据库…… 唯有持续学…

Docker下安装Tomcat

目录 Tomcat简介 Tomcat安装 免修改版Tomcat安装 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持&#x…

LeetCode | 965. 单值二叉树

LeetCode | 965. 单值二叉树 OJ链接 首先判断树为不为空,为空直接true然后判断左子树的val,和根的val相不相同再判断右子树的val,和根的val相不相同最后递归左子树和右子树 bool isUnivalTree(struct TreeNode* root) {if(root NULL)retur…

8通道16位数据采集卡方案

硬件方案--采集板 下载链接!https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247558420&idx1&sn3b1d6a99a69e68c32f425e489c21b6d5&chksmfcfaf6c3cb8d7fd52961827dedf30a79e65ed96e5b507bc5027d80f9285aa9bdcf790b940b51&token1650944467…

C/C++ 内存管理(1)

文章目录 C/C 内存划分静态和动态内存C语言的动态内存分配函数mallocfreecallocrealloc 常见内存使用错误 C/C 内存划分 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结 束时这些存储…

92基于matlab的引力搜索算法优化支持向量机(GSA-SVM)分类模型

基于matlab的引力搜索算法优化支持向量机(GSA-SVM)分类模型,以分类精度为优化目标优化SVM算法的参数c和g,输出分类可视化结果及适应度变化曲线。数据可更换自己的,程序已调通,可直接运行。 92 引力搜索算法…

mysql的InnoDB存储引擎

详情请参考:https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html InnoDB 是一个通用目的的存储引擎,它在高可用性、高性能方面做了平衡。MySQL 8.0,InnoDB 是默认的存储引擎。在创建表的时候,如果没有使用ENGIN…

vmware 安装 AlmaLinux OS 8.6

选择系统镜像 选择镜像 选择安装位置和修改名称 可以自定义硬件,也可以不选择,后面可以再设置 自定义硬件可以设置内存和cpu等信息 安装虚拟机系统 密码如果简单的话需要点击两次done 才能保存

STM32 定时器TIM

单片机学习 目录 文章目录 前言 一、TIM简介 二、STM32的三种定时器 2.1基本定时器 2.1.1定时中断功能 1. 时钟源 2. 预分频器 3. 计数器 4. 自动重装寄存器 5.更新中断和更新事件 2.1.2主模式触发DAC功能 2.2 计数模式 2.2通用定时器 2.2.1 时钟源 外部时钟模式2 外部时钟模式…

使用PCReg.PyTorch项目训练自己的数据集进行点云配准

项目地址: https://github.com/zhulf0804/PCReg.PyTorch/tree/main 网络简介: 网络是基于PointNet Concat FC的,它没有其它复杂的结构,易于复现。因其简洁性,这里暂且把其称作点云配准的Benchmark。因作者源码中复杂…

项目实战之RabbitMQ死信队列应用

🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 文章目录 🌟架构图&#x…

SpringMVC入门详解

SpringMVC概述 开始之前了解一下三层架构 在JavaEE中我们现在几乎全用的是B/S架构,也就是浏览器 / 服务器架构,在B/S架构中,系统包括标准的三层架构模式: 1.web层(表现层) 它负责接收客户端请求&#x…

SIP协议在语音通信的应用方式及OKCC系统中的配置方法

在企业语音通信的过程中,SIP协议支持的网络通信技术通过网络为用户提供了无数的通信便利,已成为企业不可或缺的重要通信技术。由于SIP协议是语音通信帮助企业实现这些优势的原因,因此了解支持这些呼叫的SIP协议的上下文至关重要。 什么是SI…

服务器和Linux ,安装R rstudio ,常用软件

服务器的基本概念: 如服务器的基本结构,节点,端口的概念等。 服务器的基本设置和管理: 如何配置新服务器, 如何管理服务器,如何分配账户并确保他们互不访问, 如何全局安装软件让所有人都可以…

【数据结构】 堆排序与TopK问题详解

在学习完堆的创建后,就轮到了标题的两个问题 这两个问题在实际生活中会有比较强的实际问题解决能力 先分别解释一下 堆排序: 运用堆的思想进行排序,时间复杂度为O(NlogN)TopK: 从一大堆数据中选择K个最大或最小的数据&#xff0c…

如何本地搭建个人hMailServer邮件服务并实现远程发送邮件

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

了解c语言中的结构体

介绍: 在C语言中,结构体是一种用户自定义的数据类型,它允许我们将不同类型的数据组合在一起,形成一个更为复杂的数据结构。结构体可以用来表示现实世界中的实体,如人员、学生、图书等。本篇博客将介绍结构体的基本概念…