资讯动态

TDengine 三副本(Replica 3)高可用配置指南:Raft 一致性原理、部署步骤与运维命令

发布时间:2026/9/20 13:32:25 来源:尧图企业网站定制
数据库时序数据库物联网大数据实时分析云原生【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址https://gitcode.com/taosdata/tdengine点击查看免费下载TDengine 采用三副本架构时通过 Raft 算法同时保证元数据与时间序列数据的一致性每个 vgroup 即一个 Raft 组组内的 vnode 即为该 Raft 组的成员也就是副本。本文以官方文档《Three-Replica Configuration》为主体结合仓库源码与 SQL 手册系统讲解三副本的架构原理、数据写入与复制过程、集群部署步骤、维护命令、数据库副本数修改方式以及常见故障排查帮助你从零搭建一套三副本高可用集群并理解其底层运行机制。三副本架构与 Raft 一致性原理在 TDengine 中数据库创建时会被切分为多个 vgroup。当数据库的副本数为 3 时每个 vgroup 中包含 3 个 vnode虚拟节点这 3 个 vnode 分布在不同的 dnode数据节点上共同组成一个 Raft 组。TDengine 使用 Raft 算法来确保组内数据的一致性其核心规则如下角色划分每个 vnode 都有明确的角色——leader领导者、follower跟随者或 candidate候选人。leader 负责对外提供读写服务follower 与 candidate 则配合完成日志复制与选举。日志记录每个 vnode 维护一份连续的操作日志记录插入、更新、删除等全部操作。日志由有序的日志条目entry序列组成每个条目都拥有唯一的标识符索引与任期用于跟踪共识进度与执行顺序。高可用保证只要多数节点超过一半保持运行leader 即可持续对外提供读写服务集群保持可用。即使节点重启或发生 leader 重新选举Raft 算法也能保证新 leader 始终可以读取所有已成功写入的数据不会丢失已确认的写入。日志复制数据库的每次变更请求例如一次数据插入都对应一条日志条目。在持续写入过程中Raft 确保所有成员节点以相同顺序创建相同的日志条目并以一致的方式应用对应变更。这些日志以 WALwrite-ahead log预写日志文件的形式存放在数据目录中。提交与生效一条日志条目只有在被追加到多数节点的 WAL 文件并获得确认后才算安全此时该条目进入 committed已提交状态数据变更最终生效条目被应用到状态机后标记为 applied已应用。从源码结构看这一机制在 source/libs/sync 目录中有完整实现例如 syncElection.h 描述选举相关的状态转换syncInt.h 中定义了 Raft 配置SRaftCfg、日志存储路径raftStorePath以及 leader 缓存leaderCache等数据结构syncRaftLog.h 则提供日志索引、任期、条目读写等底层接口。上图展示了一个典型的三副本集群三个客户端通过负载均衡器接入后端为三个数据节点taosd-1、taosd-2、taosd-3节点间通过 10Gbps 的 VLAN/VPC 网络互联。数据写入与复制过程三副本模式下数据的写入不是简单地“写三份”而是遵循严格的 Raft 复制协议。详细的流程说明见 数据写入与复制过程核心过程如下。Leader vnode 写入流程在具有 N 个副本的数据库中对应 vgroup 包含 N 个 vnode其中只有一个是 leader其余为 follower。应用只能向 leader 发起写入请求如果 follower 意外收到写入请求集群会立即通知 taosc客户端驱动将请求重定向到 leader从而保证所有写操作都发生在正确的节点上。leader 的写入流程为leader 收到应用发来的数据写入请求完成合法性校验后进入下一步将请求的原始数据包写入数据库日志文件 WAL。若wal_level设置为 2 且wal_fsync_period设置为 0TDengine 还会立即将 WAL 数据持久化到磁盘保证宕机后可从日志文件恢复数据、防止丢失若存在多个副本leader 将数据包连同数据版本号 version转发给同一 vgroup 内的 follower写入内存并将记录加入跳表skip list如果此时未达成共识则会触发回滚操作向应用返回确认消息表示写入成功步骤 2、3、4 中任一步失败都会直接向应用返回错误。Follower vnode 写入流程follower 的写入流程只有两步接收 leader 转发来的数据插入请求将请求的原始数据包写入 WAL持久化行为与 leader 一致随后写入内存并更新内存跳表。相比 leaderfollower 少了“转发”和“回执确认”两个环节但内存写入与 WAL 写入完全相同。Leader 选举每个 vnode 都会维护数据的版本号version该版本号在 vnode 持久化内存数据时一并落盘每次数据更新无论是时序数据还是元数据都会使版本号递增。当 vnode 启动时其角色leader 或 follower是不确定的数据也未同步。为了确定角色并同步数据vnode 需要与同 vgroup 的其他节点建立 TCP 连接交换版本号、任期term等关键信息然后依据标准 Raft 一致性算法完成 leader 选举确定谁是 leader、谁是 follower。同步复制与 Pipeline 复制算法leader 收到写入请求并转发给其他副本后不会立即通知应用写入成功而是要等待超过半数副本含自身达成一致后才确认。若在指定时间内未获得多数副本的确认leader 会向应用返回错误表示写入失败。这种同步复制机制保证了多副本间数据的一致性与安全性但也对写入性能提出了挑战。为平衡一致性与性能TDengine 在同步复制过程中引入了pipeline 复制算法来自不同数据库连接的写入请求的确认过程可以并行推进而非串行等待。即使某个副本的确认出现延迟也不会阻塞其他副本的写入从而在保证一致性的同时显著提升写入吞吐满足高吞吐、低延迟的数据处理需求。成员变更与 Learner 角色在扩缩容、节点迁移等场景下需要调整 vgroup 的副本数量此时已有数据量会直接影响副本间复制所需时间过大的数据复制会严重阻塞读写。为此TDengine 对 Raft 协议进行了扩展引入learner学习者角色learner 只负责接收数据复制不参与投票因此写入成功的判定条件也不包含 learner 的确认。当 learner 与 leader 数据差距较大时会采用快照snapshot方式同步数据快照同步完成后learner 继续追赶 leader 的日志直到数据量接近。当 learner 的数据量与 leader 足够接近时learner 转为 follower 角色开始参与写入与选举的投票过程。三副本集群配置三副本架构要求集群中至少有三个服务器节点。基础部署与配置步骤如下确定节点并完成域名解析确定服务器节点数量及其主机名或域名配置 DNS 或/etc/hosts保证节点间可以通过主机名互相解析。安装并配置在每个节点上安装 TDengine TSDB 服务端软件包并按需编辑每个节点的taos.cfg配置文件仓库中的参考配置见 packaging/cfg/taos.cfg。启动服务在每个节点上启动taosd服务。其他服务如 taosadapter、taosx、taoskeeper、taos-explorer可根据实际需求启动。维护命令创建集群增加 dnode 与 mnode假设首个节点已经作为单节点集群运行在已有集群中再创建两个 dnode使集群总共包含三个 dnodeCREATE dnode dnode_ep port dnode_port; CREATE dnode dnode_ep port dnode_port;随后在两个 dnode 上分别创建 mnode管理节点使集群中 mnode 总数达到三个TDengine 单集群最多支持三个 mnodeCREATE mnode on dnode dnode_id; CREATE mnode on dnode dnode_id;关于 dnode、mnode、vnode 的关系可参考 集群节点管理dnode 是构成 TDengine 集群的物理实体vnode 建立在 dnode 之上用于存储时序数据当数据库副本数为 3 时每个 vgroup 由 3 个 vnode 组成因此配置多副本数据库时集群中至少要有 3 个 dnode。创建三副本数据库创建三副本数据库的完整语法为create database dbname replica 3 vgroups xx buffer xx ...其中replica 3指定副本数为 3vgroups xx指定初始 vgroup 数量buffer xx指定 vnode 写入内存池大小MB其余参数如duration、keep、cachemodel、wal_level等可按需配置。关于REPLICA参数创建数据库 一节给出了详细约束副本数可取 1、2 或 3默认值为 1其中副本数 2 仅在 3.3.0.0 及以后的企业版中可用集群中副本数必须小于等于 dnode 数量REPLICAS是REPLICA的别名单副本数据库可以变更为双副本数据库但不支持从双副本变更为其他副本数也不支持从三副本变更为双副本。修改已有数据库为三副本如果已经创建了副本数少于 3 的数据库可以将其变更为三副本数据库alter database dbname replica 3|1即既可以把数据库升级为三副本也可以回退为单副本。使用 PARALLEL 控制副本变更并发度修改数据库副本数时可通过PARALLEL参数控制副本变更操作的并发程度ALTER DATABASE db_name REPLICA value [PARALLEL parallel_value];value目标副本数1、2 或 3parallel_value控制同时执行副本变更的 vgroup 数量默认值为 0不限制0不限制并发所有 vgroup 同时执行副本变更速度最快但资源消耗较大1串行执行同一时刻只有一个 vgroup 执行变更速度最慢但最节省资源NN 1限定并发最多 N 个 vgroup 同时执行变更兼顾速度与资源占用。注意PARALLEL参数仅适用于修改REPLICA不能与其他 ALTER DATABASE 选项一起使用。示例-- 以不限并发方式默认变更为三副本 ALTER DATABASE db_name REPLICA 3; -- 串行执行同一时刻一个 vgroup ALTER DATABASE db_name REPLICA 3 PARALLEL 1; -- 限定并发最多 2 个 vgroup 同时执行 ALTER DATABASE db_name REPLICA 3 PARALLEL 2;常见问题FAQ1. 创建或修改为三副本时提示DB error: Out of dnodes原因集群中的服务器节点少于三个。解决方案在创建三副本数据库前确保集群中至少有 3 个 dnode参考上文“创建集群”一节执行CREATE dnode。2. 创建三副本数据库或执行 SPLIT VGROUP 时提示DB error: Vnodes exhausted原因部分 dnode 上可用的 vnode 数量少于数据库创建或 vgroup 分裂所需的数量。解决方案增加 dnode 的 CPU 核心数或修改SupportVnodes参数。从源码看SupportVnodes参数默认按 CPU 核数动态计算。在 source/common/src/tglobal.c#L1011-L1012 中服务端启动时会执行tsNumOfSupportVnodes tsNumOfCores * 2 5; tsNumOfSupportVnodes TMAX(tsNumOfSupportVnodes, 2);即默认支持 vnode 数约为“CPU 核数 × 2 5”且最小为 2该参数通过cfgAddInt32(pCfg, supportVnodes, ...)注册取值范围为 01024见 source/common/src/tglobal.c#L1061属于服务端本地配置项。当 dnode 的 CPU 资源有限导致可用 vnode 数不足时可适当提高该参数。延伸阅读TDengine 架构与数据写入复制过程包含 leader/follower 写入流程图、leader 选举、同步复制与成员变更的完整说明创建数据库REPLICA、VGROUPS、BUFFER 等参数数据库级副本数与其他参数约束集群节点管理dnode / mnode / vnode节点的创建、删除与状态维护同步模块源码Raft 选举、日志、成员变更的底层实现。赞分享数据库时序数据库物联网大数据实时分析云原生【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址https://gitcode.com/taosdata/tdengine点击查看免费下载相关推荐TDengine 三副本Replica 3高可用方案Raft 一致性原理、集群部署与运维配置指南TDengine 三副本Replica 3高可用方案Raft 一致性原理、集群部署与运维配置指南 TDengine 通过在三副本配置下为每个虚拟节点组V数据库时序数据库大数据物联网云原生TDengine 三副本高可用方案RAFT 一致性原理、集群部署与运维命令详解TDengine 三副本高可用方案RAFT 一致性原理、集群部署与运维命令详解 TDengine 三副本方案基于 RAFT 一致性算法将元数据与时序数据一并数据库时序数据库大数据物联网云原生TDengine 双副本Dual-Replica仲裁高可用部署实战指南TDengine 双副本Dual Replica仲裁高可用部署实战指南 TDengine TSDB 在默认的三副本 Raft 架构之外提供了基于仲裁Ar数据库时序数据库物联网大数据实时分析云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价