TDengine高可用探讨

提到数据库,不可避免的要考虑高可用HA(High Availability)。但是很多人对高可用的理解并不是很透彻。

要搞清高可用需要回答以下几个问题:

  • 什么是高可用?
  • 为什么需要高可用?
  • 高可用需要达到什么样的目标?
  • 如何做到高可用?

什么是高可用?

高可用(HA)

高可用通常是指在单个组件出现故障时,整个系统仍可以对外提供服务。因此高可用主要还是针对一个系统而言,而非单独的一个组件(这点非常重要)。

我们通常用一段时间内系统可用时间占比作为高可用的衡量指标。

计算方式如下:

MTBF(Mean Time Between Failure),系统平均正常运行时间
MTTR(Mean Time to Repair),系统平均恢复时间

可用性的计算公式: AVAILABILITY = MTBF / ( MTBF + MTTR ) × 100%

如可用性 99.9%,就意味着该系统在连续运行1年时间里最多可能的业务中断时间是8.76小时【(1-99.9%) x 365 x 24】。

通常提到的可用性指标与允许业务中断时间(1年)如下:

可用性指标允许中断时间
99%3.65天
99.9%8.76小时
99.99%52.6分钟
99.999%5.26分钟

提到高可用,不可避免要提到RTO和RPO(这两个也是灾备方案的关键指标),高可用方案的选择要基于RTO和RPO。

RTO

RTO,Recovery time objective,恢复时间目标,是指所能容忍的业务系统停止服务的最长时间,也就是灾难发生到业务系统恢复服务功能所需要的最短时间。

RPO

RPO,Recovery point objective,恢复点目标,是指业务系统所能容忍的数据丢失量。

为什么需要高可用?

这个问题最好回答:为了提供持续服务。

但是你的系统真的需要提供持续服务吗?如果服务中断会带来哪些损失呢?

高可用需要达到什么样的目标?

在高可用概念中我们提到了高可用的衡量标准,那么对于一套系统,什么样的标准才是合理的呢?3个9还是4个9?

这需要平衡三个方面:服务中断的损失、方案的预算、技术的可行性。

如何判断标准是否合理?其实只有一个判断条件,预算。

没有预算,什么都是扯淡。

有了预算,那么才能考虑下一步,采用什么高可用方案。

如何做到高可用

在概念中我们提到,高可用是为了保障组件遇到故障时仍可以提供服务。

那么我们需要对故障进行总和分析,对症下药。

数据库故障分类

通常数据库故障可以分为以下几类:

  • 硬件故障
  • 软件故障
  • 误操作
硬件故障

硬件故障时最常见的故障,诸如:网络中断、磁盘损坏、服务器断电等。针对不同的故障,也有成形的解决方案:

  • 网络故障–网络设备冗余、多链路、bond
  • 磁盘损坏–分布式、RAID
  • 服务器断电–UPS、双电源
  • 机房爆炸–异地灾备
  • 世界毁灭–拜菩萨
软件故障

软件故障通常被忽略,但是也是最棘手的。数据库软件遇到bug,很难通过其他手段快速恢复。

误操作

这类故障时最难防范的。通常需要技术外的手段进行防范,如:安全培训、双人操作、方案审核等。

高可用方案

不管多么高大上的高可用方案,归根到底只有一个方法:冗余。

因此高可用方案都绕不过两个问题:

  • 故障发生时,如何快速在冗余系统间切换?切换时间决定了RTO。
  • 冗余系统间数据如何保持一致?数据差异决定了RPO。

常见的数据库高可用方案可以分为四种:

  1. 共享存储
    2个或2个以上服务器使用同一个存储(Oracle就是这样实现的),这样就保证了数据的一致性,但是想保证高可用,需要数据库软件支持两个数据库节点通知读写1个存储,否则只能实现主备,RTO会很长。
  2. 操作系统级别文件复制
    共享存储通常需要磁盘阵列来实现,增加了方案整体成本。如果没有磁盘阵列,可以采用折中的方法,使用复制软件(scp/rsync/bbcp)保证服务器间数据的一致性。但这样带来的问题是无法保证两个服务器之前的数据同步的实时性和一致性(一致性可以通过文件校验来实现,但会降低实时性)。
  3. 数据库级别数据复制
    相较于操作系统基本的文件复制,数据库级别的文件复制(如Oracle ADG)更加安全和高效,能够更好的保证数据的一致性,但是同样实时性是一个挑战。
  4. 数据库集群/分布式数据库
    这种方式是数据库软件自身实现的,在保证数据一致性和实时性方面都较以上方案都更高效。但对数据库软件自身的设计也要求更高。

需要注意的是以上所有方案都是用来应对硬件故障,遇到软件故障或误操作通常无能为力。

TDengine高可用探讨

TDengine 通过多节点和多副本来提供整个数据库系统可用性。这个方案有如下特点:

  • 任何1个节点故障(硬件故障、操作系统故障等非数据库软件故障)时,整个系统仍可以对外提供服务,且数据不会有任何损失。RPO=0
  • 任何1个节点故障时,对客户端几乎时无感知的。RTO=0

以上方案可以应对硬件故障、操作系统故障(也不是绝对),但是当网络故障或数据库软件自身出bug时就无能为力了。

那么应该采用什么方案才能提高可用性呢?

冗余,增加冗余!!
在这里插入图片描述

  1. 部署2套TDengine集群,集群间进行数据同步。
  2. 前端部署负载均衡集群,当节点或集群故障时进行切换。

这个方案存在以下优缺点:

优点:

  1. 同步部署两套集群,可以规避绝大部分硬件故障。如果异地部署,设置可以规避机房级别的故障。
  2. 所有访问通过负载均衡进行反向代理,节点故障/集群切换时,对应用而言无需做任何变更,甚至是无感知的。

缺点:

  1. 目前可以使用订阅来实现数据的单向同步,但无法实现双向。因此当由集群1切换到集群2后,需要手动修改订阅,才能保证两个集群间数据一致。
  2. 集群切换时,Nginx需要手动修改配置。切换过程会造成短时间应用访问异常。
  3. 预算高。

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

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

相关文章

Unity射线实现碰撞检测(不需要rigbody组件)

使用physic.CapsulCast(); 前面3个参数生成一个胶囊体, 向着发射方向,发射出一串的胶囊(没有最大距离) 有最大距离,可以节约性能开销。 physic.CapsulCast(&#xff0…

easypoi 导出增加自增序列

要求:使用easypoi导出Excel的时候,要求增加”序号“列,从1开始增加。这列与业务数据无关,只是展示用,便于定位。如下图所示 实现方式:Java对象新增一列,注意name "序号", format &…

Linux-缓冲区(简单理解)

1. 缓冲区是什么 缓冲区就是一段内存空间。 2. 为什么要有缓冲区 IO写入有两种: 写透模式(WT) 成本高,效率低写回模式(WB) 成本低,效率高 写透模式:每次的文件写入都要立即刷新…

使用ClickHouse和Terraform进行CI/CD

本文字数:11047;估计阅读时间:28 分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 简介 在 ClickHouse,我们致力于以 API 为先的开发方式来构建 ClickHouse Cloud。用户通过用户界面…

如何快速学习盲打键盘的指法

学习盲打键盘的指法需要一定的时间和练习,但是以下几个方法可以帮助你加快学习的速度: 掌握正确的手位:了解标准的键盘布局以及手指应该放置的位置是学习盲打的第一步。在QWERTY键盘上,你的左手应该放在ASDF键上,右手应…

人工智能入门(一):基于Pytorch的手写数字识别模型

前言: 因为还在上学,时间不太够用,很多内容写到后面心有余力不足,未来有时间我会慢慢补充。人工智能的知识涉猎范围广又杂乱无章,啃书或上课学到的知识往往很早就过时了或者离实际的项目无关。所以,我很希…

VS调试、debug和release、栈区底层简单介绍、const 修饰指针变量介绍

文章目录 前言一、调试二、debug和release三、调试需要多用,多熟悉四、栈区底层简单介绍五、优秀的代码:常见的coding技巧: 六、const 修饰指针变量1. const 出现在 * 左边2. const 出现在 * 右边 七、strcpy函数的仿写1.版本12. 版本23. 版本34. 版本4 …

Andorid进程间通信之 UNIX SOCKET

1,什么是UNIX SOCKET UNIX SOCKET,域套接字,UNIX SOCKET可用于同一台设备进程间通信,它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序列号应答等,只需要将数据从一个进程复制到另一个进程&…

高精度加法及乘法

目录 字符串的高精度加法 为什么需要高精度加法? 怎么进行高精度加法? 链表的高精度加法 翻转链表(带虚拟头节点) 字符串的高精度乘法 字符串的高精度加法 大数加法_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.co…

linux下查看前10最耗内存的进程

lunux查找占用内存前10的进程 1、使用Top命令查询进程 输入 top 命令,然后按下大写M按照内存MEM排序,按下大写P按照CPU排序。 2、查询占用CPU最高的前10个进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 3|head 3、查询占用内存最大的前10个进程…

2024年度西安市创新联合体备案申报条件时间要求须知

一、申报条件 组建市级创新联合体需具备牵头单位、成员单位、组建协议、首席科学家等四个条件。 (一)牵头单位 1.牵头单位应为在西安市注册登记的省市产业链龙头骨干企业,重点支持市级重点产业链“链主”企业; 2.牵头单位一般为1家。 (二)成员单位 1.成员单位…

excel 按照姓名日期年月分组求和

excel 需要按照 姓名 日期的年份进行金额求和统计,采用sumifs 进行统计 注意:sumifs 不支持 合并列拆分计算,合并列只会计算一个值 表格数据大概如下:(sheet) ABC姓名日期金额A2023/01/01500A2023/01/151500B2023/01/01200B202…

python 调试 c++源码

1. gdb常用调试命令概览和说明 2. 编译c库设置Debug模式 cmake设置debug 在CMake中设置debug模式通常意味着启用调试信息和优化。以下是一个简单的CMakeLists.txt文件示例,展示了如何设置项目以便在Debug模式下构建: cmake_minimum_required(VERSION 3…

cad中快速计算多个矩形面积的方法

1、输入命令reg,选中矩形创建面域 2、输入命令uni,选中刚刚创建的面域,组合成一个面域 3、输入命令:LI ,选中面域,即可查看面积和周长 需注意的一点,开始创建的矩形或者多段线要在一个面内,就是…

[沉浸式翻译]最好的网页翻译工具

沉浸式翻译 沉浸式翻译是一种翻译工具,它提供了多种平台的支持,包括桌面端的Edge、Chrome、Firefox、Safari以及移动端的iOS和Android。用户可以在这些平台上安装沉浸式翻译的插件,以便在浏览网页时获得翻译服务。 浏览器的安装教程 详细的…

WEB网站服务器安全漏洞扫描环境搭建及漏洞工具扫描

一、适用环境 1、企业自建有门户网站; 2、使用Struts框架的WEB网站; 3、网站服务器涉及有数据库之类的项目,如:微信登录、手机登录、充值、收费等。 4、使用安卓版、苹果版、电脑版结合的缴费类网站平台。 5、方便但需提高安全性…

排列对称串

Description:很多字串,有些是对称的,有些是不对称的,请将那些对称的字事按从小到大的顺序输出,字事先以长度论大小,如果长度相同,再以ASCI码值为大小标准 Input.输入数据中含有一些字串(1≤串长≤256)。 #…

气膜游泳馆有哪些应用优势呢?-轻空间

气膜游泳馆作为一种利用气膜技术建造的室内体育场馆,具有环保、节能、灵活、美观等特点,适合在各种气候和地形条件下使用。以下是气膜游泳馆具有的应用优势: 1. 全年四季恒温恒湿:气膜游泳馆内部设有智能化的恒温恒湿系统&#xf…

基础环境:wsl2安装Ubuntu22.04 + miniconda

服务器相关信息: Thinkpad p1 gen5 64G 2T 3080ti,自带的有nvidia-smi显卡驱动。使用wsl2安装Ubuntu22.04 miniconda目标:安装gpu版本的PyTorch2.1.2(torch2.1.2/cu117 torchvision0.16.2/cu117) 处理器 12th Gen I…

ubuntu扩展根目录磁盘空间

ubuntu扩展根目录磁盘空间 扩展虚拟机磁盘空间 查看现有磁盘状态 查询现有分区状态,/dev/sda是我们要扩展的磁盘 fdisk -l 开始进行磁盘空间的扩容 parted /dev/sda#扩展3号分区的空间 resizepart 3刷新分区空间 resize2fs /dev/sda3查询扩展结果,…