高可用与低成本兼得:全面解析 TDengine 时序数据库双活与双副本

在现代数据管理中,企业对于可靠性、可用性和成本的平衡有着多样化的需求。为此,TDengine 在 3.3.0.0 版本中推出了两种不同的企业级解决方案:双活方案和基于仲裁者的双副本方案,以满足不同应用场景下的特殊需求。本文将详细探讨这两种方案的适用场景、技术特点及其最佳实践,让大家深入了解这两大方案如何帮助企业在高效可靠的数据存储和管理中取得成功。

TDengine 双副本(+仲裁者)

为了满足部分客户在保证可靠性和可用性条件下尽可能压缩部署成本的需求,TDengine 提出了基于仲裁者的双副本方案。该方案通过提供“只有单个服务故障且不出现连续故障”的容错能力,成为客户降低成本和提高效率的有效选择。

相较于传统的三副本数据库,双副本数据库具有显著的优势。它在减少硬件成本的同时,依然能够保证一定的高可用性。具体来说,双副本数据库中每个 Vgroup 仅有两个 Vnode。当其中一个 Vnode 发生故障时,Mnode 可根据数据同步状态,裁定另一 Vnode 是否可以独自对外提供服务。这种机制确保了在某个副本节点故障时,数据不会丢失,并且系统能够持续进行写入和查询操作。

这一方案的适用场景广泛,面向有降低存储成本需求的、希望减少物理节点需求的客户,以及对高可用性要求稍低的客户。

从技术角度看,双副本方案具有以下几个显著特点:
– 副本数目:时序数据的副本数目为 2,但集群内节点数目必须大于等于 3。
– 自动切主:当时序数据的某个副本所在的物理节点宕机时,可以自动切换主节点,确保数据不丢失,并且能够持续写入和查询。
– 选主机制:双副本选主由高可用的 Mnode 提供仲裁服务,而不是由 Raft 组内决定。

仲裁者 (Arbitrator) 在双副本方案中发挥关键作用。它提供仲裁服务但不存储数据。当 Vgroup 因某一 Vnode 故障而无法提供服务时,Arbitrator 可以根据同步情况指定同组另一 Vnode 成为 Assigned Leader,无论其他副本 Vnode 是否存活,均可一直响应用户请求。这一机制确保了即使在某个副本节点故障的情况下,Assigned Leader 仍然能够一直响应用户请求,从而提高系统的可靠性和可用性。

高可用与低成本兼得:全面解析 TDengine 时序数据库双活与双副本 - TDengine Database 时序数据库

TDengine 双活

部分用户由于部署环境的特殊性,只能部署两台服务器,同时希望实现一定的服务高可用和数据高可靠。针对这些需求,TDengine 提出了双活方案。双活方案不仅适用于一些资源受限的环境,也能在两套 TDengine 集群之间的灾备场景中发挥重要作用。

在业务系统中,双活架构通常包括两台服务器,各自部署一套服务。在业务层看来,这两台机器和两套服务组成了一个完整的系统。双活中的两个节点通常被称为 Master-Slave,即“主从”或“主备”。

双活方案在多个场景中都有广泛应用。首先,对于因部署环境特殊性只能部署两台服务器的客户,双活方案是理想选择。这些客户希望在有限的硬件资源下,仍然能够实现服务高可用和数据高可靠。其次,双活方案在工业控制领域中尤为适用。由于这些领域对系统可靠性和数据准确性有着极高的要求,双活架构能够很好地满足这些需求。此外,双活方案还适用于灾备场景,无论是资源受限的环境还是不限节点数目的两套 TDengine 集群之间的灾备场景,都能提供有效的解决方案。双活方案通过一系列技术机制实现高可用性和数据可靠性:

  • 首先,系统通过 Client Driver 实现双系统的 Failover,即在主节点发生故障时,能够自动切换到从节点,确保服务不中断。
  • 其次,taosX 实现了主节点到从节点的数据复制,通过数据订阅的写接口在写入复制过来的数据时,在 WAL 中加入特殊标记。
  • 第三,数据订阅的读接口在读取数据时,会自动过滤掉带有特殊标记的数据,从而避免数据重复复制和无限循环。

高可用与低成本兼得:全面解析 TDengine 时序数据库双活与双副本 - TDengine Database 时序数据库

当前,双活方案仅支持 JDBC 连接器和 WebSocket 连接方式,不支持 Native 连接。双活两端集群必须同构,即数据库的命名和所有配置参数必须完全相同,以确保系统的正确运行。

双副本 VS 双活,区别与实践

在 TDengine 的双副本和双活方案中,虽然它们都旨在提升数据可靠性和服务可用性,但两者在架构设计和实际应用中有着显著的区别。了解这些差异,对于选择合适的方案并实现最佳实践至关重要。

双活方案和双副本方案在集群架构上有明显的差异。双活方案需要部署两个独立的集群,每个集群内部的节点数可以任意多,而双副本方案只需部署一个集群,但集群内的节点数目必须大于等于三。这样一来,双活方案在集群内部节点数目上的灵活性更大,但同时也增加了部署和管理的复杂性。双活系统内的最小节点数为两个,也就是说每个集群至少有一个节点;相比之下,双副本系统的最小节点数为三个,以确保数据的可靠性和高可用性。

在同步原理上,双活方案通过 taosX 实现数据同步,依赖于 taosX 的同步速度,通常在秒级别。双副本方案则通过 Arbitrator 仲裁选主,由 Raft 协议保证数据的一致性,因此在同步延迟上表现更好,没有延迟。数据安全性方面,双活方案依赖于 WAL 的保存时长,而双副本方案则能确保无数据丢失。高可用性上,双活方案只要有一个节点存活即可提供服务,而双副本方案在连续宕机后,只有一个节点存活时,可能无法提供服务。

双副本最佳实践

  1. 全新部署

双副本的主要价值在于节省存储成本的同时能够有一定的高可用和高可靠能力。在实践中,推荐配置为:

  • N 节点集群 (其中 N>=3)
  • 其中 N-1 个 dnode 负责存储时序数据
  • 第 N 个 dnode 不参与时序数据的存储和读取,即其上不保存副本;可以通过 supportVnodes 这个参数为 0 来实现这个目标
  • 不存储数据副本的 dnode 对 CPU/Memory 资源的占用也较低,可以使用较低配置服务器
  1. 从单副本升级

假定已经有一个单副本集群,其节点数为 N (N>=1)。将集群的节点数目扩展至 3 个以上,修改 Mnode 的副本数目为 3,在使用 alter database replica 2 的命令修改某个特定数据库的副本数。

双活最佳实践

双活系统通过数据复制实现双系统之间的数据同步,但这种同步只能保证最终一致性,无法确保实时一致性。主节点可能在任意时刻宕机,宕机时可能会有数据差集,尤其是元数据差集。在完成主备切换后,业务层可能会发起重复的建表请求,但 schema 可能不相同,导致元数据不一致。因此,建议在系统启动后集中完成所有建库建表操作,后续只写入时序数据,尽量避免再进行元数据操作。

结语

无论是双副本还是双活方案,TDengine 都为用户提供了强大的数据存储和管理解决方案。双副本方案在节省存储成本的同时,保证了一定的高可用性和数据可靠性,非常适合资源有限且需要高效数据管理的企业。双活方案则通过其灵活的架构和强大的灾备能力,为特殊部署环境和高可靠性需求的应用场景提供了理想的解决途径。通过理解这两种方案的区别和最佳实践,用户可以根据自身需求选择最适合的方案,充分利用 TDengine 的技术优势,打造稳定、高效的数据库系统。这不仅提升了业务连续性和数据安全性,更为企业的数字化转型提供了坚实的基础。

关于 TDengine

TDengine 核心是一款高性能、集群开源、云原生的时序数据库(Time Series Database,TSDB),专为物联网IoT平台、工业互联网、电力、IT 运维等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个高性能、分布式的物联网IoT、工业大数据平台。

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

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

相关文章

Github项目:Python编写的录屏工具 TTvideo(已打包)

打包好能立即用的github项目:TTvideo 用的github上的项目:https://github.com/jumppppp/ttvideo 朴实无华,功能强大的录屏工具 原作者如有认为侵权,评论区联系立删 1.效果图 2.下载链接 录屏工具

LE AUDIO---Chapter 2. The Bluetooth® LE Audio architecture

目录 2.1 The use cases 2.1.1 Hearing aid requirements - the use cases 2.1.1.1 Basic telephony 2.1.1.2 Low latency audio from a TV 2.1.1.3 Adding more users 2.1.1.4 Adding more listeners to support larger areas 2.1.1.5 Coordinating left and right hearin…

算法第54天| 并查集

107. 寻找存在的路径 题目 思路与解法 #include <iostream> #include <vector> using namespace std;int n; // 节点数量 vector<int> father vector<int> (101, 0); // 按照节点大小定义数组大小// 并查集初始化 void init() {for (int i 1; i &l…

守护API可用性:全面对抗DDoS与CC洪水攻击策略

API的可用性直接关系到用户体验和业务收入。分布式拒绝服务&#xff08;DDoS&#xff09;和针对应用层的CC&#xff08;Challenge Collapsar&#xff09;攻击&#xff0c;旨在耗尽服务器资源&#xff08;带宽、连接数、CPU&#xff09;&#xff0c;使合法用户无法访问。这类攻击…

第 4 章:第一个神经网络实战——使用 PyTorch

第 4 章&#xff1a;第一个神经网络实战——使用 PyTorch 经过前三章的学习&#xff0c;我们已经对神经网络的理论基础有了扎实的理解。我们知道数据如何前向传播&#xff0c;如何用损失函数评估预测&#xff0c;以及如何通过梯度下降和反向传播来更新网络参数。 理论是根基&a…

MST56XXB/MST5650B/MST5033B 是一款耐高压的LDO芯片,针对中控设备,给MCU供电,60V的耐压,150mA

MST56XXB系列是一款高输入电压(60V)低静态电流、高PSRR线性稳压器(LDO)&#xff0c;能够提供150mA负载电流。LDO针对线电压瞬变和负载电流瞬变具有非常快速的响应特性&#xff0c;并确保LDO启动期间和短路恢复过程中不会出现过冲电压。该设备具有集成的短路和热关断保护。该设备…

Java基础(五):流程控制全解析——分支(if/switch)和循环(for/while)的深度指南

Java基础系列文章 Java基础(一)&#xff1a;发展史、技术体系与JDK环境配置详解 Java基础(二)&#xff1a;八种基本数据类型详解 Java基础(三)&#xff1a;逻辑运算符详解 Java基础(四)&#xff1a;位运算符详解 Java基础(五)&#xff1a;if/switch与for/while - 深入理解…

面向对象概述

1 面向过程程序设计 面向过程是最为实际的一种思考方式&#xff0c;面向对象的方法也是含有面向过程的思想&#xff0c;面向过程是一种基础的方法。它考虑的是实际的实现&#xff0c;一般的面向过程是从上往下步步求精。面向过程最重要的是模块化的思想方法。对比面向对象&…

linux dts overlay

设备树 Overlay&#xff08;Device Tree Overlays, DTO&#xff09;&#xff0c;它在嵌入式Linux系统&#xff08;尤其是基于ARM的设备&#xff0c;比如树莓派、NanoPi等&#xff09;中非常常见。它主要用于动态修改设备树&#xff0c;以适配硬件的变化或扩展外设支持。 1. 设备…

ArkUI-X的声明式语法转换过程

以下是ArkUI-X声明式语法转换过程的详细解析&#xff0c;结合其核心设计原理与实现机制&#xff1a; ‌一、基础语法转换规则 组件声明转换 传统命令式组件创建&#xff08;如Android XMLJava&#xff09;转换为ArkUI-X的Component结构&#xff1a; // 命令式&#xff08;A…

Docker 入门教程(一):从概念到第一个容器

文章目录 &#x1f433; Docker 入门教程&#xff08;一&#xff09;&#xff1a;从概念到第一个容器1. Docker 是什么&#xff1f;2. Docker 的核心概念3. 安装 Docker4. 运行你的第一个 Docker 容器 &#x1f433; Docker 入门教程&#xff08;一&#xff09;&#xff1a;从概…

如何在 Vue 应用中嵌入 ONLYOFFICE 编辑器

以下是仅包含 纯前端集成 ONLYOFFICE 文档编辑器到 Vue.js 项目 的完整代码与说明&#xff0c;无需重新创建项目&#xff0c;可直接集成到现有 Vue 项目中&#xff1a; Vue.js 集成 ONLYOFFICE 文档编辑器&#xff08;纯前端实现&#xff09; 后端需要部署到服务器&#xff0c…

Cursor 1.0 炸裂功能:在后台运行多个Agent,释放双手

Cursor 1.0 版本更新了用于代码审查的 BugBot、对内存、一键式 MCP 设置、Jupyter 支持以及 Background Agent 的正式发布。 今天这篇文章主要介绍 Background Agent 的使用教程。 文章目录 1. Background Agent 的基本概念2. 后台 Agent 的使用方法3. 让后台 Agent 创造一个简…

MLX LM - 在Apple芯片上运行大语言模型的Python工具包

文章目录 一、关于MLX LM1、项目概览2、相关链接资源3、功能特性 二、安装配置三、使用指南1、快速开始2、Python API3、量化模型&#xff0c;上传HF4、流式生成采样 5、命令行6、长提示词与生成 四、支持模型大模型 一、关于MLX LM 1、项目概览 MLX LM是一个Python工具包&am…

【git学习】学习目标及课程安排

Git 是一款非常强大的版本控制工具&#xff0c;掌握它对编程和团队协作都有巨大帮助。 &#x1f3af;学习目标&#xff08;适合个人与团队使用&#xff09; 理解 Git 和版本控制的基本概念 熟练使用 Git 进行代码提交、分支管理、合并与冲突解决 掌握远程仓库协作流程&#x…

HDFS(Hadoop分布式文件系统)总结

文章目录 一、HDFS概述1. 定义与定位2. 核心特点 二、HDFS架构核心组件1. NameNode&#xff08;名称节点&#xff09;2. DataNode&#xff08;数据节点&#xff09;3. Client&#xff08;客户端&#xff09;4. Secondary NameNode&#xff08;辅助名称节点&#xff09; 三、数据…

破局与融合:破解开发与供应链安全的业务场景难题

数字化转型下的安全新范式与融合挑战 在数字化浪潮的席卷下&#xff0c;企业正全面拥抱云计算、微服务、容器化和开源技术。这种转型在极大提升业务敏捷性的同时&#xff0c;也带来了全新的安全挑战&#xff1a;传统网络边界消融&#xff0c;攻击面急剧扩大&#xff0c;“开发安…

Centos7 安装部署Git、创建仓库

概述 Git版本控制&#xff0c;大家都不会陌生&#xff0c;实践诉求是从零部署本地Git服务&#xff0c;在执行推送远程分支代码时&#xff0c;用Git服务自带的hooks触发同步代码文件&#xff0c;从而做到自动同步代码&#xff0c;实现自动更新&#xff0c;操作环境centos7.9,Gi…

【Redis原理】Redis数据结构底层原理

目录 一、SDS 二、IntSet&#xff08;整数集合&#xff09; 三、双向链表 四、压缩列表 五、字典&#xff08;哈希表&#xff09; 七、跳表 八、QuickList 九、RedisObject 一、SDS Redis 是用 C语言实现的&#xff0c;但是它没有直接使用C 语言的 char* 字符数组来实现…

C#.NET HttpClient 使用教程

简介 HttpClient 是 .NET 中用于发送 HTTP 请求和接收 HTTP 响应的现代化 API&#xff0c;它取代了过时的 WebClient 和 HttpWebRequest 类。 HttpClient 是 .NET Framework 4.5 和 .NET Core/.NET 5 中提供的、基于消息处理管道&#xff08;message handler pipeline&#…