跳到主要内容

全链路高可靠

本文描述 TDengine TSDB 从用户触达到数据落盘的完整可靠性链路。按统一的六层分层架构展开——入口层 → 接入层 → 数据采集链路 → 集群内部 → 可观测性接入 → 存储与审计落盘,每层逐一介绍其可靠性保障机制。

术语约定

  • 接入层:指入口层之后、taosd 之前的协议/代理层,包括 taosAdapter 和 taosc 两条物理路径。
  • 断点续传:默认指数据源侧的 checkpoint,用于任务重启后恢复采集进度;它不等同于 taosX 向下游写入时使用的持久化队列。
  • 任务重启:指自动故障恢复手段全部用尽后,关闭并重新拉起 taosX 任务;它不同于“数据源连接重试”。

概述

可靠性四道防线

防线机制故障覆盖所在层
L1 数据接入故障转移 + 断点续传 + 缓存队列网络或服务中断第 3 节
L2 多实例多实例负载均衡 / 故障转移单一实例故障$2 接入层
L3 WAL写入 ACK 前先落 WAL进程崩溃、突然断电第 6 节
L4 多副本Raft 3 副本跨节点单节点磁盘/主机故障第 4 节
L5 TDE存储层透明加密磁盘被盗、物理介质泄露第 6 节
L6 备份恢复taosdump / taosX误删除、数据中心级灾难第 6 节

各层可靠性概览

层级关键机制
① 入口层连接器内置重连 + 应用重试;Explorer 多实例前置 LB;CLI 续跑
② 接入层taosAdapter 连接池/限流/内存保护;taosc firstEp/secondEp 自动探测
③ 数据采集链路数据源侧 checkpoint + Sink 侧持久化队列 + 任务重启;taosX-Agent 可选本地缓存
④ 集群内部Raft 多副本(VGroup/MNode)+ 自动 Leader 选举
⑤ 可观测性接入taosKeeper 指标缓冲/补推;默认路径亦承载审计上报;失效不影响业务读写
⑥ 存储与审计落盘WAL fsync + 快照 + TDE + 备份恢复 + 审计日志权限分离

1. 入口层可靠性

入口层是用户/应用触达 TDengine 的第一跳。本层通过连接器内置重连 + 应用层重试 + CLI 续跑三类手段保障:连接瞬断时自动恢复,长任务中途失败可从断点续跑,不要求用户手工干预。

1.1 程序化入口(应用 / 各语言连接器)

应用通过 WebSocket/REST 或原生 TCP 接入,连接器层面应配置连接池 + 超时 + 重试,并在应用层包装幂等重试逻辑。

Java / JDBC + HikariCP:

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:TAOS-RS://lb-vip:6041/db");
config.setUsername("tduser");
config.setPassword("SecurePass123!");
config.setConnectionTimeout(30_000);
config.setMaximumPoolSize(10);
config.setConnectionTestQuery("SELECT server_status()");

Go:

db, _ := sql.Open("taosWS", "tduser:SecurePass123!@ws(lb-vip:6041)/db?readTimeout=30s")
db.SetMaxOpenConns(20)
db.SetConnMaxLifetime(10 * time.Minute)

Python:

import taosws
conn = taosws.connect("taos+ws://tduser:SecurePass123!@lb-vip:6041/db")
# 推荐在应用层包装重试逻辑(指数退避 + 幂等写入)

应用层重试建议:对幂等操作(INSERT 带显式时间戳、SELECT)使用指数退避(如初始 200 ms、倍增至 10 s、最多 5 次);DDL/非幂等写入需配合业务层去重(INSERT ... ON DUPLICATE KEY UPDATE 或时间戳主键覆盖)。

1.2 Web UI 入口(taosExplorer)

taosExplorer 通过浏览器提供 Web 控制台,关注两类可靠性场景:

  • 会话失效:登录会话过期或后端重启后,Explorer 前端会自动跳转到登录页重新认证,用户无需手工刷新;未提交的编辑器内容保留在浏览器本地(页面不刷新即不丢失)。
  • 长查询/长任务:浏览器标签断开后,SQL 查询会在 taosd 侧被取消(由 taosAdapter 检测连接关闭);面板数据看板用短连接轮询,网络抖动不影响已落盘数据。

生产建议:Explorer 以前置 Nginx/HAProxy 的无状态多实例方式部署;单实例故障后,浏览器重新建立连接即可切到其它实例,业务数据本身不受影响。

1.3 命令行工具入口(运维 CLI)

运维 CLI 在执行大批量数据搬运或长时压测时需要可中断、可续跑能力。

1.3.1 taos(交互式 SQL shell)

taos 通过 taosc 直连 taosd :6030,taosc 内置自动重连:当前连接的 DNode 不可达时,taosc 会尝试通过 firstEp / secondEp 重新定位 MNode 并获取最新集群拓扑(详见 2.2 节)。用户在 shell 中感知为“短暂卡顿后自动恢复”。

1.3.2 taosX(数据管道 CLI)

taosX 的核心可靠性能力是断点续传——任务中断(进程被 kill、网络断开、目标端不可用)后重新启动相同任务,会从上次的数据源侧 checkpoint 继续,不会重复消费或漏采(详见 3.2 节)。

# 任务异常退出后直接再次运行同一命令即续跑
taosX run \
-f "taos+ws://tduser:SecurePass123!@src:6041/srcdb" \
-t "taos+ws://tduser:SecurePass123!@dst:6041/dstdb"

1.3.3 taosBenchmark(压测)

taosBenchmark 提供 --retry 相关参数,在写入过程中遇到临时错误可自动重试,避免短暂网络抖动或限流触发而整体失败。

# 写入失败自动重试(示例配置)
taosBenchmark -u tduser -p'SecurePass123!' \
-R 3 \ # 每条记录最大重试次数
-S 1000 # 重试间隔(毫秒)

1.3.4 taosdump(备份/恢复)

taosdump 通过 -S(start time)/ -E(end time)控制时间范围,实现增量备份失败续跑。若一次全量备份中途失败,可基于已完成时间段缩小范围重试。

# 全量备份
taosdump -h localhost -u tduser -p'SecurePass123!' -o /backup

# 增量备份(仅导出指定时间段)
taosdump -h localhost -u tduser -p'SecurePass123!' -D mydb \
-S "2024-01-01 00:00:00" -E "2024-01-02 00:00:00" \
-o /backup/incremental/2024-01-01

续跑策略:按“天”切片进行增量备份,失败当天可独立重跑;全量备份建议在业务低峰单次完成,若中断则整体重跑到新目录。


2. 接入层可靠性

关于 taosc:taosc 是 TDengine 的原生客户端库,作为独立组件向上提供 C 语言 API 和 DSN 连接接口,向下通过私有协议(TCP :6030)与 taosd 集群通信,并在协议层实现 firstEp/secondEp 双入口探测、集群拓扑刷新、Leader 切换透明重试等可靠性机制。路径 A(WebSocket/REST)由 taosAdapter 在服务端内部调用 taosc 完成到 taosd 的最后一跳,因此 Adapter 自身的限流/连接池保护叠加 taosc 的自动重连;路径 B 则由应用/CLI 通过嵌入 taosc 动态库直连 taosd,可靠性机制完全来自 taosc。两条路径最终都经 taosc 进入 taosd。

数据从入口层走到接入层,需要解决“服务端自我保护”和“客户端自动重连”两个问题。本层通过 taosAdapter 限流/超时/内存保护(路径 A)与 taosc 节点探测/自动重连(路径 B)保障:在服务端过载或节点故障时既不放任雪崩,也不让客户端永久挂起。

2.1 路径 A:WebSocket / REST(taosAdapter 自我保护)

taosAdapter 是 WebSocket/REST 流量的服务端网关,通过连接池、查询限流、内存水位多层机制保护 taosd 不被过载压垮。

连接池配置/etc/taos/taosadapter.toml):

[pool]
maxConnect = 0 # 最大连接数(默认:CPU 核数×2)
maxIdle = 0 # 最大空闲连接
idleTimeout = "0s" # 空闲超时
waitTimeout = 60 # 等待连接超时(秒),超时返回 503
maxWait = 0 # 最大等待队列(0=无限制)

内存保护(反压 / backpressure)

[monitor]
disable = false
collectDuration = "3s"
pauseQueryMemoryThreshold = 70 # 查询暂停阈值(%)
pauseAllMemoryThreshold = 80 # 全部暂停阈值(%)

健康检查 /-/ping 在阈值超限时返回 503,上游负载均衡器据此自动摘除节点,形成反压信号回流到客户端(连接器收到 503 触发重试)。

查询限流

[request]
queryLimitEnable = true

[request.default]
queryLimit = 0 # 默认并发查询数(0=无限制)
queryWaitTimeout = 900

[request.users.readonly_user]
queryLimit = 10
queryWaitTimeout = 60

SQL 拒绝正则(防误操作放大故障半径):

rejectQuerySqlRegex = [
'(?i)^drop\\s+database\\s+.*',
'(?i)^alter\\s+table\\s+.*'
]

2.2 路径 B:taosc → taosd 私有协议(自动重连)

原生路径下,taosc 作为嵌入应用进程的独立客户端库,通过 TDengine 私有协议(TCP :6030)与 taosd 通信,并负责节点探测与故障切换:

  • firstEp / secondEp 双入口:客户端配置两个初始接入点,连接 firstEp 失败自动切到 secondEp,避免单点失败。
  • 拓扑刷新:连接任一可用 DNode 后,taosc 从 MNode 获取最新集群拓扑(哪些 VGroup Leader 在哪个 DNode),后续写入直接定位到正确 Leader。
  • Leader 切换透明化:当 VGroup Leader 发生切换(见 4.4 节),taosc 在下一次请求收到 Not Leader 错误时自动刷新路由并重试,对应用透明。
# 客户端侧 taos.cfg
firstEp dnode1.example.com:6030
secondEp dnode2.example.com:6030

3. 数据采集链路可靠性

数据从外部数据源经“外部数据源 → taosX-Agent(可选)→ taosX → taosAdapter → taosd”进入集群。是否部署 taosX-Agent,不改变断点续传的核心语义:真正用于恢复采集进度的是数据源侧 checkpoint;而在数据已经被 taosX 读出、但尚未成功写入下游时,保护手段则是 taosX 持久化队列

3.1 采集链路与缓存边界

taosX-Agent 只在边缘采集、弱网传输、或上游本身不提供可靠回放能力时需要部署;并非所有数据源都必须带本地缓存。

场景是否建议 taosX-Agent 本地缓存可靠性边界
Kafka / Pulsar / TMQ通常不需要可依赖 Broker / 上游持久化缓存;taosX 仍需记录 checkpoint
MQTT QoS 0 / 串口 / 设备直采建议需要上游通常无可靠回放能力,应在 taosX-Agent 本地落盘
OPC-UA / OPC-DA / 工业边缘网络建议需要边缘网络抖动常见,本地缓存用于跨断网续传
MySQL / PostgreSQL / MSSQL 增量拉取视场景通常依赖源表保留窗口 + 增量列,无需额外本地缓存

若数据源可以直接连到 taosX,则链路可简化为“外部数据源 → taosX → taosAdapter → taosd”。这时是否带 taosX-Agent,只影响缓存位置,不影响 checkpoint 的定义。

3.2 数据源侧断点续传(Checkpoint)

每个 taosX 任务定期把数据源消费进度写入 checkpoint。任务重启后,恢复逻辑首先读取该 checkpoint,再决定从哪里继续采集:

  • 位点型来源(Kafka / Pulsar / TMQ):记录 offset 或 cursor。
  • 窗口型来源(MySQL / PostgreSQL / TDengine 查询):记录已完成的时间窗口或增量列。
  • 边缘采集型来源(经 taosX-Agent):记录最近已确认的序号、时间戳或位点。

不要把 checkpoint 和持久化队列混为一体:

能力记录对象解决的问题典型触发
Checkpoint数据源侧 offset / 时间窗口 / 增量列任务被关闭后从哪里继续“读”任务重启
持久化队列已读出但尚未成功写入下游的数据下游暂时不可用时如何“不丢写”Sink 端抖动 / 目标不可达

3.3 taosX 持久化队列(Persist Queue)

taosX 使用持久化队列暂存已经从数据源读取、但尚未成功写入 taosAdapter / taosd 的数据。当 Sink 端短暂不可用时,数据会先落到本地磁盘,待下游恢复后再继续发送。

参数默认值说明
队列段大小1 GB每个持久化文件最大体积
最大批量读取1000 条单次从队列读取的最大消息数
写入同步间隔3 秒持久化数据刷盘间隔
清理间隔30 秒已消费队列段自动清理周期

3.4 taosX 任务重启

在数据采集链路里,先发生的是自动恢复:数据源连接重试、taosAdapter 重连、持久化队列回放等。如果这些手段全部用尽,任务才会进入 Failed,随后由调度器或运维执行任务重启——即关闭并重新拉起整个 taosX 任务。

概念触发时机作用范围是否关闭任务
数据源连接重试单次连接中断当前 Source 连接
任务重启自动恢复手段全部失败后整个 taosX 任务

任务重启后的恢复顺序通常是:

  1. 读取数据源侧 checkpoint,确认应该从哪个位点继续采集。
  2. 回放尚未清空的持久化队列,先补齐已经读出但未写完的数据。
  3. 重新建立 Source / Sink 连接并恢复正常处理。

3.5 taosX-Agent 本地缓冲 + 断线重连

taosX-Agent 部署在边缘侧(靠近数据源),内置消息缓存队列,与中心 taosX 网络中断时在本地暂存数据、恢复后自动续传。配置与行为详见 存储转发(Store and Forward)

# /etc/taos/agent.toml
in_memory_cache_capacity = 64 # 内存缓存队列容量
keep_online = true # 断线后保持运行
data_dir = "/var/lib/taos/taosX-agent" # 持久化目录

keep_online = true(默认)确保 Agent 在 taosX 断开时继续运行并缓存数据。适用于工厂内网、卫星链路等网络不稳定环境。

3.6 外部数据源连接重试

外部数据源到 taosX / Agent 的入口侧同样需要重连能力,由各 Source 连接器内置。超过重试阈值后,任务才会进入 Failed,再由第 3.4 节的任务重启机制接手。

数据源类型最小间隔最大间隔最大次数
MQTT100 ms10 s10
Kafka300 s3
Pulsar300 s3
传统连接器5
数据源可靠性机制
MQTT客户端自动重连(断开后按指数退避重连 Broker);QoS 1/2 保证至少一次投递
KafkaConsumer Group 再平衡;消费者重启后从已提交 offset 续传;单分区内消息有序
Pulsar基于订阅游标(cursor)的断点续传;Broker 切换对消费者透明
JDBC Source (MySQL/PG/MSSQL)查询失败按时间窗口重试;基于增量列(时间戳/自增 ID)幂等拉取
OPC-UA / OPC-DA连接断开后由 Agent 自动重连;订阅模式下变化值缓存在服务端直到重订阅

配置要点:所有外部 Source 都应显式指定 checkpoint 位点(offset / 时间戳 / 增量列),避免依赖默认值导致重启后从头拉取或漏数据。


4. 集群内部可靠性

数据进入 taosd 后,本层通过 Raft 多副本协议 + 自动 Leader 选举 + MNode 元数据高可靠 三要素保障:单节点故障不中断写入、不丢数据;Leader 切换秒级完成;元数据(用户、库、表结构)与数据享同等级别的副本保护。

4.1 多副本 Raft 协议

TDengine 的 VNode(时序数据)和 MNode(元数据)均使用 Raft 协议进行多副本复制。Leader 负责接收写入,通过 AppendEntries RPC 同步到 Followers,多数派确认后提交。

4.2 副本架构(1 / 2 / 3 副本)

REPLICA 可为 123。不同数据库可按需选择;生产优先三副本,成本敏感场景可用双副本。

三副本(Raft 多数派)

VGroup 1(replica=3)
├── VNode @ DNode-1 [Leader] ← 接收写入
├── VNode @ DNode-2 [Follower] ← 实时同步
└── VNode @ DNode-3 [Follower] ← 实时同步
CREATE DATABASE db REPLICA 3 VGROUPS 10;
ALTER DATABASE db REPLICA 3;

三副本按 Raft 多数派提交:允许 1 个副本故障仍可读写。不支持与双副本互转。

双副本(企业版,Mnode 仲裁)

双副本在保证一定可靠/可用性的前提下压缩存储成本:时序数据仅存 2 份,选主不由 VGroup 内 Raft 多数派决定,而由高可用 Mnode 充当 Arbitrator;某一 Vnode 故障且数据已同步时,可指定另一 Vnode 为 Assigned Leader 继续服务。集群至少 3 个节点(典型为 2 个数据节点 + 1 个仲裁节点,仲裁节点可将 supportVnodes 设为 0)。

VGroup 1 (replica=2)
├── VNode @ DNode-1 [Leader / Assigned Leader]
├── VNode @ DNode-2 [Follower]
└── Arbitrator @ Mnode(不存时序数据)
CREATE DATABASE db REPLICA 2 VGROUPS 10;
ALTER DATABASE db REPLICA 2; -- 仅支持与单副本互转

容错边界:单服务故障且不出现连续故障时尚可恢复;两数据副本同时不可用,或未同步完成时再故障,则无法继续服务。强制指定 Leader 等运维见下。

部署约束、异常场景与 ASSIGN LEADER FORCE 等详见 双副本方案

单副本

REPLICA 1 无冗余,节点故障即不可用,仅适合开发/测试。

4.3 写入一致性

Leader 收到写入 → 追加 WAL → 并行发送 AppendEntries → 多数派 ACK → Commit → 回复客户端。性能代价:写入吞吐下降 < 15%,延迟增加 < 5 ms。

4.4 故障切换

事件自动处理切换时间
Leader 崩溃Follower 发起选举< 30 秒
DNode 网络中断剩余两副本继续服务立即
DNode 磁盘损坏RESTORE DNODE 从副本重建按数据量

4.5 节点恢复

RESTORE DNODE <dnode_id>;
RESTORE MNODE ON DNODE <dnode_id>;
RESTORE VNODE ON DNODE <dnode_id>;

4.6 副本状态监控

SHOW VGROUPS;
-- status: leader / follower / offline / candidate

4.7 MNode 元数据高可靠

MNode 保存集群元数据(用户、库、表、DNode 列表等)。生产部署需 3 个 MNode 组成 Raft 组:

SHOW MNODES;
CREATE MNODE ON DNODE 2;
CREATE MNODE ON DNODE 3;

Leader 故障时自动选举新 Leader(< 30 秒),对客户端透明——期间正在执行的 DDL 会短暂失败,业务读写(定位到 VGroup Leader)不受影响。


5. 可观测性接入可靠性

taosKeeper 负责把 taosd / taosAdapter / taosX / taosExplorer 对外输出的监控指标写回 log 库。默认部署下(auditSaveInSelf = 0),企业版审计日志也经 Keeper 写入带 IS_AUDIT 的审计库;auditSaveInSelf = 1v3.4.1.0+)时审计本集群直写、不经 Keeper。审计配置见 审计与合规。本节以指标链路可靠性为主,并说明默认审计路径对 Keeper 的依赖。

5.1 taosKeeper 指标采集可靠性

taosKeeper 接收各组件推送的指标,通过 WebSocket 写入 TDengine log 库;经典路径下亦接收 taosd 审计上报并写入审计库。可靠性要点:

  • 采集端缓冲:taosd / taosAdapter 等组件本地缓存最近一批指标,taosKeeper 或 taosAdapter 临时不可用时不会阻塞主路径(指标采集失败不影响业务读写)。
  • 写入重试:taosKeeper 到 taosAdapter 的 WebSocket 连接断开后自动重连;期间待写入指标暂存内存,重连后续写。
  • 降级容忍:监控链路短暂中断会导致少量指标丢点(监控图表出现空洞),但业务数据不受影响。默认审计路径下,Keeper 长时间不可用也会造成审计落库中断(业务读写仍不受影响);需要审计与 Keeper 解耦时使用 auditSaveInSelf
# /etc/taos/taoskeeper.toml
[tdengine]
host = "localhost"
port = 6041
username = "keeper_writer"
password = "KeeperPass123!"
usessl = false

5.2 Keeper 失效影响

  • taosKeeper 不在业务请求链路上,失效不影响业务读写。
  • 失效期间新产生的指标会先停留在组件侧缓冲区;Keeper 恢复后继续补推。
  • 若中断时间超过缓冲上限,会出现监控断层,影响可观测性,但不会回溯影响业务数据。
  • 默认审计路径下,Keeper 失效期间审计无法经其落库;恢复后依赖 taosd 侧缓冲与重试窗口,超出窗口可能出现审计缺口。本集群直写(auditSaveInSelf)不受此影响。

生产建议:小规模集群单实例即可;如需连续观测(及经 Keeper 的审计连续性),可部署双实例并由前置 LB 分发。


6. 存储与审计落盘可靠性

数据最终在 taosd 侧落盘。本层通过 WAL 预写日志 + 快照 + TDE 透明加密 + 备份恢复 + 审计日志权限分离 五类机制保障:进程崩溃不丢数据、磁盘物理失窃不泄露、误删/灾难可恢复、审计日志不可篡改。

6.1 WAL(预写日志)

每个 VNode 维护独立 WAL,写入请求先追加到 WAL 并 fsync 落盘,再复制到 Follower,多数派确认后才 ACK 客户端。

-- WAL 模式 1:内存缓存(最高性能,崩溃可能丢最新数据)
CREATE DATABASE db WAL_LEVEL 1;

-- WAL 模式 2:fsync 落盘(推荐生产环境)
CREATE DATABASE db WAL_LEVEL 2 WAL_FSYNC_PERIOD 3000;
# taos.cfg
walRetentionPeriod 3600 # WAL 保留时长(秒)
walRetentionSize 0 # WAL 保留大小(字节)

6.2 快照(Snapshot / STT)

WAL 超过保留阈值后,TDengine 将已提交数据合并为 STT(Snapshot Tier)文件并清理旧 WAL。快照同时用于:

  • 节点恢复加速:新加入或长时间离线的 Follower 直接通过快照追平,不必回放全部 WAL。
  • Raft 日志压缩:避免 WAL 无限增长。

快照由系统自动触发,一般无需人工干预;可通过 walRetentionPeriod / walRetentionSize 控制 WAL 保留窗口(窗口内的增量才支持 TMQ/taosX 订阅消费)。

6.3 透明数据加密(TDE)

操作细则(密钥层级、轮换、建加密库)见 静态数据保护

TDE 保护存储层数据(落盘的数据文件、WAL、快照)。传输层加密参见 全链路传输安全与压缩

密钥层次:

SVR_KEY → DB_KEY → CFG_KEY → META_KEY → DATA_KEY

加密算法:

算法适用场景
SM4-CBC国密合规(常用)
AES-128-CBC国际标准

启用示例(v3.4+,须先用 taosk 生成含 DATA_KEY 的密钥):

CREATE DATABASE db ENCRYPT_ALGORITHM 'SM4-CBC';
SHOW ENCRYPT_STATUS;

6.4 数据备份与恢复

6.4.1 taosdump 逻辑备份(全量 + 增量)

# 全量备份
taosdump -h localhost -u tduser -P SecurePass123! -o /backup

# 增量备份
taosdump -h localhost -u tduser -P SecurePass123! -D mydb \
-S "2024-01-01 00:00:00" -o /backup/incremental

# 恢复
taosdump -h localhost -u tduser -P SecurePass123! -i /backup/mydb

6.4.2 taosX 数据迁移与复制(持续同步)

taosX run \
--from "taos://source-host:6030/mydb" \
--to "taos://backup-host:6030/mydb_backup"

依托第 3 节的 checkpoint + 持久化队列 + 任务重启机制,taosX 复制链路本身也具备断点续传与自动恢复能力。

6.4.3 备份策略建议

策略方式频率覆盖场景
多副本REPLICA 3(或企业版 REPLICA 2实时,集群内单节点故障(双副本容错边界见 4.2 节)
实时复制taosX持续同步到异地数据中心级灾难
增量备份taosdump + 时间范围每天一次误删除、逻辑损坏
全量备份taosdump每周一次兜底冷备

6.5 审计日志不可篡改(权限分离)

审计库配置、操作列表与角色模型见 审计与合规权限管理 · 审计数据库

审计日志写入带 IS_AUDIT 的审计库(默认名常为 audit,不是监控用的 log 库)。v3.4.0.0+ 创建审计库时服务端强制 VGROUPS 1WAL_LEVEL 2PRECISION nsENCRYPT_ALGORITHM 不得为 noneKEEP ≥ 1825d 等约束。通过 RBAC 降低被回溯篡改的风险:

  • SYSAUDIT_LOG 可向审计库写入;仅 SYSAUDIT 可查看审计表数据。
  • 不允许删除/修改审计表及其数据行;审计库默认 ALLOW_DROP = 0(删除前须改为 1,且仅 SYSAUDIT 可删改审计库)。
  • 业务账号不应持有审计库写权限;查看侧使用审计员角色,与业务读写分离。
  • auditLevel ≥ 5 时,对审计表的查询也可能产生新的审计事件。
  • 经 Keeper 路径可将审计写到异地目标集群;亦可结合第 6.4 节的 taosX 复制,将审计库同步到独立安全集群,进一步降低单集群被篡改风险。

7. 常见故障排查

错误码描述处理
0x80000903Sync timeout检查网络,等待选举完成后重试
0x8000090CSync leader unreachable检查 DNode 状态和网络
0x80000911Sync not ready等待节点恢复完成
0x80000914Sync leader restoring等待新 Leader 日志重演完成
0x80000916Sync buffer full降低写入并发
0x80000917Sync write stall检查磁盘 IO

8. 部署清单

8.1 入口层

  • 各语言连接器已配置连接池 + 超时
  • 应用层对幂等操作包装了指数退避重试
  • taosExplorer 前端部署 ≥ 2 实例 + 负载均衡
  • 运维脚本使用 taosX 断点续传 / taosdump 时间切片续跑

8.2 接入层

  • taosAdapter 查询限流(queryLimitEnable = true
  • taosAdapter 内存保护阈值(pauseQueryMemoryThreshold / pauseAllMemoryThreshold
  • 客户端配置 firstEp + secondEp 双入口
  • 负载均衡器接入 taosAdapter /-/ping 健康检查

8.3 数据采集链路

  • taosX 持久队列磁盘预留充足(建议 ≥ 50 GB)
  • 数据源 checkpoint 位点已显式配置并完成断点续传验证
  • 自动恢复阈值与任务重启路径已演练
  • taosX-Agent keep_online = true 已启用(如使用 taosX-Agent)

8.4 集群内部

  • 集群至少 3 个 DNode;生产库优先 REPLICA 3(成本敏感可用企业版 REPLICA 2,见 双副本方案
  • 3 个 MNode 分布在不同 DNode
  • 已演练 RESTORE DNODE / RESTORE VNODE 恢复流程
  • SHOW VGROUPS 定期巡检副本状态

8.5 可观测性接入

  • taosKeeper 正常运行,log 库指标持续写入
  • 组件侧监控缓冲容量与可接受断链时长匹配
  • 关键环境已评估是否需要双 Keeper + 前置 LB
  • 若审计经 Keeper:Keeper 高可用与审计连续性已评估;或已改用 auditSaveInSelf

8.6 存储与审计落盘

  • 生产数据库 WAL_LEVEL 2WAL_FSYNC_PERIOD 按 RPO 调优
  • WAL 保留窗口满足 TMQ / taosX 订阅需求
  • TDE 已开启(如有合规要求)
  • taosdump 每日增量 + 每周全量定时任务已配置
  • taosX 异地实时复制已运行
  • 已创建 IS_AUDIT 审计库(VGROUPS 1、加密、WAL_LEVEL 2PRECISION nsKEEP ≥ 1825d)并启用审计
  • 审计查看使用 SYSAUDIT;业务账号无审计库写权限