
TDengine PI 连接器高可用与故障切换实战多 taosX / Xnode 调度、DRAIN 排空与数据补偿【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine本文基于 PI Connector High Availability and Failover 展开面向在生产环境以多 taosX注册为多个 Xnode冗余部署 PI 数据接入链路的团队当某个承载任务的 taosX 实例宕机或进入计划维护时如何让 PI 同步任务自动/手动迁移到其他节点继续运行如何在迁移窗口内保证数据完整性。读完本文你将掌握 Xnode 的调度语义、故障检测与迁移的时序参数、DRAIN XNODE排空操作、重启补偿Restart Compensation Time与 PI 回填Backfill配合的数据恢复方案以及防止同一任务双跑和滚动升级的实操要点。taosX 与 Xnode同一能力的两套称呼在 TDengine 企业版的数据接入体系中taosX与Xnode指向同一类数据接入执行能力只是出现的上下文不同上下文名称说明外部部署与运维taosX独立安装的数据接入组件以服务或进程方式运行监听 gRPC 及相关端口供 Agent 接入和任务执行引擎内集群管理Xnode在 TDengine 中注册并被管理的数据接入执行节点通过CREATE XNODE、SHOW XNODES、DRAIN XNODE等 SQL 纳入调度创建 Xnode 时url指向对应 taosX 实例的 gRPC 地址默认端口为6055与 taosX 配置项serve.grpc对应见 taosX Reference 中的示例grpc 0.0.0.0:6055。xnoded守护进程负责该执行节点与taosd之间的连通性与调度协调从源码看mnode 侧通过xnodeMgmtStartXnoded拉起守护进程见 xnode.c进程生命周期管理在 txnodeMgmt.c 中实现而 mnode 与 xnoded 之间通过本地管道套接字XNODED_PIPE_SOCKET_URL交互。Xnode 相关的概念与 SQL 参见 Data Ingestion (Xnode)组件部署方式参见 taosX Reference。本文其余部分约定涉及部署服务、打补丁、配置 Agent 地址时使用taosX涉及集群内注册、调度、排空、节点状态时使用Xnode。概览单实例调度 故障后重新调度在一个注册了多个 Xnode 的集群中某个 taosX 实例故障或进入计划维护后PI 连接器任务可以迁移到另一个 taosX对应另一个 Xnode上继续运行。其核心调度模型是同一时刻一个任务实例只在一个 Xnode 上运行高可用主要依赖故障发生后的重新调度而不是双实例热备采集。迁移或停机会造成短暂采集中断实时任务可通过 重启补偿时间 回填最近一个时间窗内的数据超出该窗口的数据以及尚未落盘的在途数据则需要按你的要求使用 Historical Data Backfill 及相关流程处理。能力说明某个 taosX / Xnode 不可用时在另一个节点上继续或恢复任务支持详见下文调度与故障切换迁移窗口内的 Live 值、Snapshot 更新、乱序迟到值取决于重启补偿窗口及后续回填同一 PI 任务同时在两个节点运行调度器与 worker 机制可帮助防止双跑单个 taosX 滚动升级升级前用DRAIN XNODE将任务排空:::note 以下行为基于通用的 Xnode 调度逻辑与当前 PI 连接器实现。针对数据接入任务的 PI 专用高可用测试仍在完善中生产部署前应结合实际场景验证。 :::调度模型一个 Job 一次只落在一个 XnodePI 任务会被作为一个独立的 Job 调度到当前最优的 Xnode 上运行在线、挂载了所需 Agent、空闲内存更多等且同一时刻只在一个 Xnode 上运行这是单实例调度不是主备双实例采集节点故障后调度器会在可用 Xnode 上重新拉起任务可以在注册了 2、3 个甚至更多 Xnode 的集群中运行节点数量不会改变单实例语义。与之配套的 SQL 能力包括CREATE XNODE/SHOW XNODES查看节点与在线状态REBALANCE XNODE JOB/REBALANCE XNODE JOBS手动或自动负载均衡以及DRAIN XNODE排空节点完整语法与示例见 Data Ingestion (Xnode)。任务Task是任务源、目标与解析规则的抽象Job 是 Task 的执行分片故障迁移正是针对 Job 粒度的重新调度。故障切换行为心跳、退避重试与迁移时延当承载运行中任务的 taosX 被停止、打补丁重启或崩溃时故障切换按以下步骤发生Xnode 侧大约每5 秒向 taosX 发送一次心跳故障发生后节点被标记为offline大约经过6 次退避重试后负载均衡会为相关 Job 选择当前最优的可用 Xnode 并重启它们典型的检测 迁移时延约为10–30 秒取决于网络与集群负载。从源码结构可以印证节点状态与均衡机制的实现位置在 mndXnode.c 中SHOW XNODES的状态列通过mndGetXnodeShowStatus实时探测探测失败时直接回退显示为offline第 1184–1189 行手动均衡请求REBALANCE XNODE JOB jid WITH XNODE_ID xnodeId被构造成.../rebalance/manual/{taskId}/{jobId}/{xnodeId}转发给 xnoded第 3226 行自动均衡REBALANCE XNODE JOBS则转发到.../rebalance/auto第 3733 行。对于计划维护应主动迁移任务而不是等待故障超时DRAIN XNODE id;该命令会把指定 Xnode 上现存的任务重新分配到其他 Xnode。mnode 侧为DRAIN XNODE建立drain-xnode事务完成权限校验、节点校验后向 xnoded 转发排空请求见 mndXnode.c 与 第 1100–1142 行。SQL 细节参见 Drain Xnode。故障切换前提Agent 必须能触达所有 taosX配置 taosX-Agent 时要确保它能触达所有相关 taosX 端点即每个 Xnode 注册的 gRPC 地址。如果 Agent 只指向一个 taosX那么当该实例不可用时任务可能无处可故障切换。Agent 侧的关键配置在/etc/taos/agent.tomlLinux或C:\TDengine\cfg\agent.tomlWindows参数必填默认值说明endpoint是—taosX 的 gRPC 服务地址如http://192.168.1.100:6055。高可用部署时应把 Agent 指向所有相关 taosX 端点token是—在 Explorer 中创建 Agent 时生成的令牌keep_online否truetaosX 服务不可用或连接断开时是否保持 Agent 运行并尝试重连完整参数表与示例参见 Configuration Reference。keep_online true能保证在节点迁移期间 Agent 侧进程不退出为任务在新节点上恢复后立即重建连接提供基础。故障期间的订阅、检查点与状态故障切换会中断 PI DataPipe 订阅其行为如下原 taosX 上的订阅在进程退出时结束新 Xnode另一个 taosX上的任务实例会创建新的 DataPipe 并重新订阅相关 Point。在当前实现中需要特别留意PI 实时采集任务暂不携带可迁移的检查点 / 同步状态随任务移动重启补偿时间MaxBackfillRange会在重启后按配置窗口回填近期历史数据适用于短暂中断场景使用重启补偿时要注意其边界崩溃时刻尚未落盘的在途数据可能丢失早于补偿窗口的迟到数据不在该机制覆盖范围内。重启补偿时间的配置建议详见 Real-time Data Sync按你能容忍的最大数据丢失时长设置例如设置为 1 小时、中断 30 分钟后重启taosX 会自动回填这 30 分钟的数据若中断时长超过补偿窗口超出的部分需通过 PI 回填任务手工恢复。中断窗口内的数据如何处理中断窗口内产生或更新的数据能否写入 TDengine取决于中断时长与重启补偿设置补偿窗口内的历史数据可以在任务于新 Xnode 启动后被自动回填超出补偿窗口的 Live 值、PI Snapshot 更新、乱序 / 迟到值应在确认中断范围后用 PI backfill task 恢复再通过数据量对比与抽查进行校验。参考 Historical Data Backfill 的校验方式用SELECT COUNT(*) FROM table_name WHERE ts ... AND ts ...对比 PI 与 TDengine 同时间区间的数据量对若干 Point/元素在特定时间戳比对数值并确认时间戳与 PI 原始时间戳对齐特别注意时区问题。回填任务本身支持基于检查点的断点续传任务中断后重启会从中断点继续已写数据不会重复处理。防止同一任务在两个节点上双跑调度器与 worker 的约束可降低同一 PI 任务双跑产生重复写入的风险Xnode 调度运行在mnode leader上worker 只认领一个带connection-id的调度器连接新调度器接入时会断开旧调度器连接数据接入 worker 调度器会拒绝同一(task_id, job_id)的重复启动。这意味着即使网络分区或迁移时序出现异常也有一致性约束兜底避免两个节点同时对同一任务实例采集写库。TDengine 侧对同时间戳数据采取覆盖overwrite语义进一步缓解了重叠时间段的重复数据问题见 Backfill Guide 的迁移流程说明。滚动升级与计划维护可以逐个对 taosX 主机打补丁或升级而不必刻意整体停止采集。推荐流程对映射到该 taosX 的 Xnode 执行DRAIN XNODE id让任务迁走对该 taosX 打补丁 / 升级 / 重启对应 Xnode 重新上线后即可按调度策略接收新任务。补充说明计划迁移与故障切换类似会产生短暂采集空档数据完整性表现同上文所述补偿窗口内自动回填窗口外走回填任务如果被升级的节点同时承载mnode leaderxnoded切换期间集群内任务可能短暂暂停随后自动恢复。推荐的生产架构若要把多个 PI 系统汇聚到统一 TDengine 集群并在数据接入侧获得冗余能力推荐架构如下组件建议TDengine3 个 dnodemnode 三副本taosX / Xnode部署 2–3 个 taosX 实例并在引擎中注册对应 Xnode存储共享存储按 Enterprise HA 部署要求taosX-Agent部署在可触达 PI 的 Windows 主机上配置所有相关 taosX 端点PI 依赖已授权的 PI AF SDK以及适当的 Windows 服务账户权限网络与 Agent 代理拓扑参见 Deployment Architecture——其中 taosX-Agent 代理模式Option B是生产环境推荐方案特别适合 OT/IT 网络隔离的工业场景taosX-Agent 以 Windows 主机上的子进程方式运行 PI 连接器通过 PI SDK 协议访问 PI Data Archive端口 5450与 PI AF Server端口 5457再经跨网络 gRPC 与 taosX 通信。存储侧副本级高可用参见 High Availability该层与 Xnode 任务调度是不同维度两者互补而非替代。版本、组件与许可要求使用上述能力通常需要满足TDengine TSDBEnterprise v3.4.0.0 或更高版本Enterprise 许可证在托管 taosX / taosX-Agent 的 Windows 环境上部署并获得授权的PI AF SDKPI AF Client 2018见 Deployment Architecture满足部署要求的共享存储已创建对应 Xnode且 taosX-Agent 指向集群中所有相关 taosX 端点。此外自 3.4.0.0 起 taosX 使用 TSDB 作为元数据存储且创建任务前必须先创建 XNODE见 taosX Reference在规划多实例高可用部署时应一并纳入升级与初始化流程。相关文档Deployment ArchitectureReal-time Data Sync重启补偿时间Historical Data BackfillData Ingestion (Xnode)taosX ReferenceConfiguration ReferencetaosX-Agent【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考