当前位置: 首页 > article >正文

TDengine 高可用——三副本

在这里插入图片描述

概述

TDengine 的三副本方案采用 RAFT 算法来实现数据的一致性,包括元数据和时序数据。一个虚拟节点组(VGroup)构成了一个 RAFT 组;VGroup 中的虚拟节点(Vnode),便是该 RAFT 组的成员节点,也称之为副本。

  1. 每个 Vnode 都有自己的角色,可以是 Leader(领导者)、Follower(跟随者)、Candidate(候选人)。
  2. 每个 Vnode 都维护了一份连续的日志,用于记录数据写入、变更、或删除等操作的所有指令。日志是由一系列有序的日志条目组成,每条日志都有唯一的编号,用于标识日志协商或执行的进度。
  3. Leader 角色的 Vnode 提供读写服务,在故障节点不超过半数的情况下保证集群的高可用性。此外,即使发生了节点重启及 Leader 重新选举等事件后,RAFT 协议也能够始终保证新产生的 Leader 可以提供已经写入成功的全部完整数据的读写服务。
  4. 每一次对数据库的变更请求(比如数据写入),都对应一条日志。在持续写入数据的过程中,会按照协议机制在每个成员节点上产生完全相同的日志记录,并且以相同的顺序执行数据变更操作,以 WAL 文件的形式存储在数据文件目录中。
  5. 只有当过半数的节点把该条日志追加到 WAL 文件,并且收到确认消息之后,这条日志才会被 Leader 认为是安全的;此时该日志进入 committed 状态,完成数据的插入,随后该日志被标记为 applied 的状态。

多副本工作原理参见 TDengine 整体构架 中的《数据写入与复制流程》章节。

集群配置

三副本要求集群至少配置三个服务器节点,基本部署与配置步骤如下:

  1. 确定服务器节点数量、主机名或域名,配置好所有节点的域名解析:DNS 或 /etc/hosts
  2. 各节点分别安装 TDengine 服务端安装包,按需编辑好各节点 taos.cfg
  3. 启动各节点 taosd 服务,其他服务可按需启动(taosadapter/taosx/taoskeeper/taos-explorer)

运维命令

创建集群

创建三节点的集群

CREATE dnode <dnode_ep> port <dnode_port>;
CREATE dnode <dnode_ep> port <dnode_port>;

创建三副本的 Mnode,保证 Mnode 高可用

CREATE mnode on dnode <dnode_id>;
CREATE mnode on dnode <dnode_id>;

数据库创建

创建三副本的数据库

create database <dbname> replica 3 vgroups xx buffer xx ...

修改数据库副本数

创建了单副本数据库后,如果希望改为三副本时,可通过 alter 命令来实现,反之亦然

alter database <dbname> replica 3|1

常见问题

1. 创建三副本数据库或修改为三副本时,报错:DB error: Out of dnodes

  • 服务器节点数不足:原因是服务器节点数少于三个。
  • 解决方案:增加服务器节点数量,满足最低要求。

2. 创建三副本数据库或 split vgroup 时,报错:DB error: Vnodes exhausted

  • 服务器可用 Vnodes 不足:原因是某些服务器节点可用 Vnodes 数少于建库或 split vgroup 的需求数。
  • 解决方案:调整服务器 CPU 数量、SupportVnodes 配置参数,满足建库要求。

访问官网

更多内容欢迎访问 TDengine 官网

http://www.lryc.cn/news/2383668.html

相关文章:

  • el-table高度自适应、数据查询后高度展示错误问题
  • 【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)
  • Java接口设计:ECharts热力图的绘制
  • 深入理解 MongoDB 的 _id 和 ObjectId:从原理到实践
  • C++内存复制
  • 【notepad++如何设置成中文界面呢?】
  • 当AI遇上科研:北大“科学导航”重塑学术探索全流程
  • 大模型在闭合性胫骨平台骨折诊疗全流程中的应用研究报告
  • PHP学习笔记(八)
  • C#中WSDL文件引用问题
  • Ubuntu 22.04上升级Node.js版本
  • 养生新策:五维开启健康生活
  • 生成对抗网络(GAN)原理
  • 【SpringBoot实战指南】使用 Spring Cache
  • centos8 配置网桥,并禁止kvm默认网桥
  • C++:list容器,deque容器
  • 【Node.js】全栈开发实践
  • 自定义类型-联合体
  • Qt项目开发中所遇
  • ubuntu sh安装包的安装方式
  • Redis语法大全
  • OpenAI宣布:核心API支持MCP,助力智能体开发
  • 我的爬虫夜未眠:一场与IP限流的攻防战
  • git:The following paths are ignored by one of your
  • 算法--js--组合总和
  • 微服务中的 AKF 拆分原则:构建可扩展系统的核心方法论
  • vue element-plus 集成多语言
  • 如何测试JWT的安全性:全面防御JSON Web Token的安全漏洞
  • 车载网关策略 --- 车载网关重置前的请求转发机制
  • EtpBot:安卓自动化脚本开发神器