已把真实 IP 和主机名全部替换成了示例值,重点保留这次真正有用的部署步骤、配置、验证和踩坑。下次换服务器,基本只需要替换IP、主机名、安装路径。
一、部署说明
本文记录一次TDengine TSDB-OSS 3.4.2.8 Community三节点生产集群部署过程。
最终架构:
TDengine:3 DNode MNode: 3 个 业务库: iot 副本数: REPLICA 3 VGROUPS: 6 组件: taosd taosAdapter taosKeeper taosExplorer示例服务器:
| 节点 | IP | FQDN |
|---|---|---|
| Node01 | 192.168.100.81 | td01.example.com |
| Node02 | 192.168.100.82 | td02.example.com |
| Node03 | 192.168.100.83 | td03.example.com |
本文中的 IP、主机名均为虚拟示例。
二、部署前检查
正式安装前不要直接解压安装包,先把三个节点的基础环境确认好。
1. 检查操作系统
服务端支持的平台列表https://docs.taosdata.com/operations-and-tooling/supported-platforms/
三台都执行:
cat /etc/redhat-release uname -r uname -m ldd --version | head -1确认:
操作系统版本 内核版本 CPU 架构 x86_64 glibc 版本不同 TDengine 版本对操作系统、内核和 glibc 的要求可能不同,生产环境应提前按照对应版本官方兼容要求检查。
2. 检查服务器资源
lscpu free -h df -h重点确认:
CPU 内存 Swap 系统盘 TDengine 数据盘例如本次统一规划独立的:
/app作为 TDengine 安装及数据目录。
3.测试磁盘io
注:如果磁盘io低于150MB,需要客户找主机人员排查raid5的情况,如果磁盘io还是低,可以进行拆盘多挂载点。
dd oflag=direct if=/dev/zero of=/home/diskdata1 bs=480k count=100000 //写入测试,写入大于150M正常 dd if=/home/diskdata1 of=/dev/null bs=1M count=10000 //读取测试大于150M正常 根据实际情况目录调整如下: dd oflag=direct if=/dev/zero of=/app/diskdata1 bs=480k count=100000 dd if=/app/diskdata1 of=/dev/null bs=1M count=10000 dd oflag=direct if=/dev/zero of=/data/diskdata1 bs=480k count=100000 dd if=/data/diskdata1 of=/dev/null bs=1M count=10000三、配置主机名
节点1:
hostnamectl set-hostname td01.example.com节点2:
hostnamectl set-hostname td02.example.com节点3:
hostnamectl set-hostname td03.example.com检查:
hostname hostname -f例如节点1:
td01.example.comTDengine 集群部署时主机名/FQDN 非常重要,不建议三个节点主机名配置混乱。
四、配置 hosts
三个节点统一修改:
vi /etc/hosts加入:
192.168.100.81 td01.example.com td01 192.168.100.82 td02.example.com td02 192.168.100.83 td03.example.com td03验证:
ping td01.example.com ping td02.example.com ping td03.example.com同时检查:
getent hosts td01.example.com getent hosts td02.example.com getent hosts td03.example.com三个节点必须能够正确解析。
五、检查时间同步
数据库集群时间必须保持一致。
timedatectl systemctl status chronyd chronyc tracking chronyc sources -v重点确认:
chronyd 正常 系统时间正常 时区一致 三个节点时间基本同步六、防火墙端口
网络端口要求https://docs.tdengine.com/operations-and-tooling/operations/planning/#network-port-requirements
生产环境保持 firewalld 开启,根据实际启用组件按需永久放行端口。本次 Community 三节点部署主要使用 6030/TCP、6041/TCP、6043/TCP、6060/TCP;6044~6049 为可选采集协议端口,6050/6055 为 taosX 相关端口,未启用对应功能时无需开放。
TDengine 可能涉及这些端口。
不等于:
所有 TDengine 节点必须永久开放所有这些端口。
本次部署涉及的核心端口:
| 端口 | 当前是否需要 | 你这套用途 |
|---|---|---|
6030/TCP | 需要 | taosd、DNode/MNode、原生连接、集群内部通信 |
6041/TCP | 需要 | taosAdapter,应用 JDBC-RS / WebSocket / REST |
6043/TCP | 需要 | taosKeeper 监控上报 |
6060/TCP | 需要 | taosExplorer Web 页面 |
| 端口 | 用途 |
|---|---|
| 6030 | taosd / TDengine 集群通信 |
| 6041 | taosAdapter,JDBC-RS/REST/WebSocket |
| 6043 | taosKeeper |
| 6060 | taosExplorer Web |
本次环境实际放行:
firewall-cmd --permanent --add-port=6030/tcp firewall-cmd --permanent --add-port=6041-6049/tcp firewall-cmd --permanent --add-port=6044-6045/udp firewall-cmd --permanent --add-port=6050/tcp firewall-cmd --permanent --add-port=6055/tcp firewall-cmd --permanent --add-port=6060/tcp firewall-cmd --reload检查:
firewall-cmd --list-ports[root@sxdb03 ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since 一 2026-09-28 16:52:25 CST; 14h ago Docs: man:firewalld(1) Main PID: 909 (firewalld) CGroup: /system.slice/firewalld.service └─909 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid 9月 28 16:52:10 sxdb03.sjzt.cn systemd[1]: Starting firewalld - dynamic firewall daemon... 9月 28 16:52:25 sxdb03.sjzt.cn systemd[1]: Started firewalld - dynamic firewall daemon. 9月 28 16:52:27 sxdb03.sjzt.cn firewalld[909]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future rel...ling it now. Hint: Some lines were ellipsized, use -l to show in full. [root@sxdb03 ~]# firewall-cmd --list-ports 61858/tcp 6030/tcp 6041-6049/tcp 6044-6045/udp 6050/tcp 6055/tcp 6060/tcp [root@sxdb03 ~]#实际生产应根据启用的 TDengine 协议和组件精确开放端口。
七、系统资源检查
检查文件句柄:
ulimit -n检查进程数:
ulimit -u检查系统文件句柄:
sysctl fs.file-max检查本地端口范围:
sysctl net.ipv4.ip_local_port_range检查 taosd systemd 限制:
systemctl show taosd | egrep 'LimitNOFILE|LimitNPROC|LimitCORE'本次环境最终确认:
LimitNOFILE=1048576 LimitNPROC=infinity LimitCORE=infinity八、规划目录
本次统一使用:
/app/tdengine目录规划:
mkdir -p /app/tdengine/{server,data,log,tmp,core,dump,soft}结构:
/app/tdengine/ ├── server 程序目录 ├── data 数据目录 ├── log 日志目录 ├── tmp 临时目录 ├── core Core文件 ├── dump 导入导出 └── soft 安装包下次部署如果路径不同,只需要统一替换/app/tdengine即可。
九、下载安装包
版本功能对比-免费开源的 TDengine TSDB-OSS (社区版)和TDengine TSDB-Enterprise(企业版)。https://www.taosdata.com/feature-comparison#full-comparison-tableTDengine 下载中心
https://www.taosdata.com/download-center?product=TDengine+TSDB-OSS&version=3.4.2.8&platform=Linux-Generic&architecture=x64
本文版本:
TDengine TSDB-OSS 3.4.2.8 Community安装包:
tdengine-tsdb-oss-3.4.2.8-linux-x64.tar.gz建议从 TDengine 官方下载对应 Linux x64 Community 安装包,然后上传至:
/app/tdengine/soft检查:
cd /app/tdengine/soft ls -lh本次安装包 MD5:
8127b24ef6b2fe2d5574c3639b4d2de6校验:
md5sum tdengine-tsdb-oss-3.4.2.8-linux-x64.tar.gz生产安装前建议一定进行完整性校验。
十、解压 TDengine
cd /app/tdengine/server tar -zxvf /app/tdengine/soft/tdengine-tsdb-oss-3.4.2.8-linux-x64.tar.gz进入安装目录:
cd /app/tdengine/server/tdengine-tsdb-oss-3.4.2.8十一、安装 TDengine
本次采用 TDengine TSDB-OSS 3.4.2.8 Community,实际部署 taosd、taosAdapter、taosKeeper、taosExplorer 四个常驻服务,同时使用 taosc/taos CLI 等客户端工具;taosX 与 taosX-Agent 属于 Enterprise 数据接入体系,本次 Community 环境未部署。
| 组件 | 主要作用 | 本次部署 | Community / OSS | Enterprise 专属 | 备注 |
|---|---|---|---|---|---|
| taosd | TDengine 核心数据库服务,承载 DNode、MNode、VNode | ✅ | ✅ | ❌ | 本次三台服务器均部署,核心端口6030 |
| taosc | TDengine 原生客户端库,供客户端/其他组件连接 taosd | ✅ 随包安装 | ✅ | ❌ | 属于客户端库,不是独立常驻服务 |
| taosAdapter | REST、WebSocket、JDBC-RS 等应用接入适配层 | ✅ | ✅ | ❌ | 本次应用主要通过6041接入 |
| taosKeeper | 收集 TDengine 各组件监控指标并写入监控库 | ✅ | ✅ | ❌ | 本次运行在6043,监控数据写入log库 |
| taosExplorer | Web 图形化管理界面 | ✅ | ✅ 免费提供 | ❌ | 本次6060;从 3.3.0.0 起随官方安装包提供 |
| taosX | 零代码数据接入、数据管道等数据集成能力 | ❌ | ❌ | ✅ | Enterprise 核心组件 |
| taosX-Agent | 部署在数据源侧,帮助 taosX 接入 OPC、PI 等受网络限制的数据源 | ❌ | ❌ | ✅ | 与 taosX 配合使用,通常单独部署 |
| TDinsight | 基于 Grafana 的 TDengine 可视化监控方案 | ❌ | ✅ 可使用 | ❌ | 不是数据库核心常驻进程,本次未部署 Grafana/TDinsight |
三个节点都执行:
./install.sh -v server -e no -d /app/tdengine/server/taos安装完成后程序位于类似:
/app/tdengine/server/taos/taos/bin/例如:
taos taosd taosadapter taoskeeper taos-explorer taosudf验证:
/app/tdengine/server/taos/taos/bin/taosd -V版本:
3.4.2.8.community十二、配置 taos.cfg
主要配置文件:
/etc/taos/taos.cfg三个节点大部分参数一致。
Node01
dataDir /app/tdengine/data logDir /app/tdengine/log firstEp td01.example.com:6030 fqdn td01.example.com serverPort 6030 tempDir /app/tdengine/tmp logKeepDays 30Node02
只需要修改:
firstEp td01.example.com:6030 fqdn td02.example.comNode03
firstEp td01.example.com:6030 fqdn td03.example.com也就是说:
firstEp三个节点都指向首节点。
而:
fqdn必须是当前服务器自己的 FQDN。
检查:
grep -Ev '^#|^$' /etc/taos/taos.cfg一个小坑
安装程序可能已经自动写入部分fqdn配置。
修改时注意检查:
grep -n 'fqdn' /etc/taos/taos.cfg不要因为重复修改造成多个错误配置值。
十三、启动 taosd
先启动节点1:
systemctl enable --now taosd检查:
systemctl status taosd确认:
active (running)检查 6030:
ss -lntp | grep 6030随后启动 Node02、Node03:
systemctl enable --now taosd十四、创建 DNode
登录节点1:
taos -u root -p添加另外两个节点:
CREATE DNODE "td02.example.com:6030"; CREATE DNODE "td03.example.com:6030";查询:
SHOW DNODES;正常应看到:
1 td01.example.com:6030 ready 2 td02.example.com:6030 ready 3 td03.example.com:6030 ready核心判断:
status = ready十五、创建三个 MNode
第一个节点本身已经存在 MNode,再在节点2、节点3创建:
CREATE MNODE ON DNODE 2; CREATE MNODE ON DNODE 3;查询:
SHOW MNODES;正常状态:
1 个 leader 2 个 follower 全部 ready例如:
td01 leader td02 follower td03 followerLeader 并不是固定的,发生节点重启或故障后可以自动重新选举。
十六、创建三副本业务库
本次生产环境为3 台 TDengine 节点,每台服务器约:
CPU:8 Core 内存:15 GB TDengine 数据盘:约 200 GB因此数据库参数没有完全采用默认值,而是综合考虑:
三节点高可用 CPU / 内存资源 VGroup 数量 单节点内存占用 时序数据查询特点 数据保留周期 WAL可靠性本文业务库:
iot最终使用:
CREATE DATABASE `iot` VGROUPS 6 REPLICA 3 BUFFER 256 CACHEMODEL 'both' CACHESIZE 5 COMP 2 DURATION 60d KEEP 3650d PRECISION 'ms' WAL_LEVEL 2 WAL_FSYNC_PERIOD 3000 WAL_RETENTION_PERIOD 3600;| 参数 | 本次值 | 主要依据 |
|---|---|---|
| VGROUPS | 6 | 8核CPU、并行能力、VNode资源开销 |
| REPLICA | 3 | 3节点生产高可用 |
| BUFFER | 256MB | 每节点约15GB内存,控制VNode内存 |
| CACHEMODEL | both | 最新值/最新行查询场景 |
| CACHESIZE | 5MB | 控制最新数据缓存内存 |
| COMP | 2 | 长期时序数据压缩存储 |
| DURATION | 60d | 与10年KEEP配合,控制文件数量 |
| KEEP | 3650d | 数据生命周期10年 |
| PRECISION | ms | 业务毫秒级时间戳 |
| WAL_LEVEL | 2 | 生产数据可靠性 |
| WAL_FSYNC_PERIOD | 3000ms | 可靠性与IO性能平衡 |
| WAL_RETENTION_PERIOD | 3600s | WAL保留1小时 |
KEEP 3650d= 数据保留策略为10年,但并不代表当前每节点约200GB磁盘一定能容纳10年数据。正式运行后仍需根据实际日增量、压缩率和磁盘增长趋势进行容量评估及扩容。
查看:
SHOW DATABASES;检查副本:
SHOW iot.VGROUPS;重点关注:
v1_status v2_status v3_status is_ready applied/committed正常应该看到每个 VGroup:
1 Leader 2 Follower is_ready = true例如:
DNode1 follower DNode2 follower DNode3 leader三副本并不是三个独立数据库。
本质上是:
同一个 iot 数据库 ↓ 多个 VGroup ↓ 每个 VGroup 保存 3 个副本 ↓ 1 Leader + 2 Follower某一个节点故障后,剩余副本可以完成重新选主继续提供数据服务。
十七、创建业务账号
管理员:
root业务账号:
CREATE USER appl_sjzt PASS '<PASSWORD>' SYSINFO 1;监控账号:
CREATE USER monitor_sjzt PASS '<PASSWORD>' SYSINFO 1;密码不要写入部署文档。
查看:
SHOW USERS;Community 版注意事项
在 3.4.2.8 Community 实际测试中:
GRANT ...会提示该功能属于 Enterprise Edition。
因此 Community 版不要直接照搬企业版的细粒度授权方案,业务账号最终能执行哪些操作应在当前版本中实际验证。
十八、配置 taosAdapter
配置:
/etc/taos/taosadapter.toml本次只调整必要项。
将:
debug = true修改为:
debug = false命令:
sed -i 's/^debug = true/debug = false/' /etc/taos/taosadapter.toml启动:
systemctl enable --now taosadapter检查:
systemctl status taosadapter ss -lntp | grep 6041正常:
6041 LISTEN6041就是后续应用通过 JDBC-RS、REST、WebSocket 访问 TDengine 的重要入口。
十九、配置 taosKeeper
配置文件:
/etc/taos/taoskeeper.toml重点修改:
[tdengine] host = "127.0.0.1" port = 6041 username = "monitor_sjzt" password = "<MONITOR_PASSWORD>" usessl = false本次其他配置保持默认,例如:
[metrics.database] name = "log" vgroups = 1 buffer = 64 keep = 90 cachemodel = "both"其中:
keep = 90代表 Keeper 监控数据库数据保留时间。
保护配置文件:
chmod 600 /etc/taos/taoskeeper.toml启动:
systemctl enable --now taoskeeper检查:
systemctl status taoskeeper ss -lntp | grep 6043Keeper 踩坑
如果出现:
Authentication failure第一时间检查:
username password host port尤其是密码是否手工输入错误。
另外 TOML 配置文件不要出现:
username = "xxx" username = "yyy"这种重复 Key,否则服务可能直接启动失败。
二十、配置 Explorer
Explorer 是 TDengine 的 Web 管理界面。
默认服务:
taos-explorer为了 Community 环境跳过注册,在:
vi /etc/default/taos-explorer加入:
EXPLORER_SKIP_REGISTER=true保存。
Explorer 配置文件:
/etc/taos/explorer.toml重点确认其cluster能连接本节点 taosAdapter,例如:
cluster = "http://td01.example.com:6041"Node02、Node03 对应自己的 FQDN 即可。
启动:
systemctl enable --now taos-explorer检查:
systemctl status taos-explorer检查端口:
ss -lntp | grep 6060浏览器访问:
http://192.168.100.81:6060其他两个节点:
http://192.168.100.82:6060 http://192.168.100.83:6060三个 Explorer 都连接的是同一个 TDengine 集群。
二十一、Explorer Connection refused 排查
本次部署时遇到过 Explorer 页面提示连接:
:6041 Connection refused原因并不是 Explorer 本身异常,而是:
taosExplorer ↓ taosAdapter:6041Explorer 依赖 taosAdapter。
所以先检查:
systemctl status taosadapter ss -lntp | grep 6041taosAdapter 正常后,再重启 Explorer:
systemctl restart taos-explorer最终即可正常网页登录。
这个坑比较容易误判。
二十二、统一启动四个服务
TDengine 安装完成后会创建相关 systemd 服务,安装后应统一检查服务是否已启用开机自启动;若未启用,则使用systemctl enable手工启用。
三台服务器最终都应该(如果没有自启动,直接这样加):
# 设置开机自启动并立即启动 systemctl enable --now taosd systemctl enable --now taosadapter systemctl enable --now taoskeeper systemctl enable --now taos-explorer # 检查开机自启动状态 systemctl is-enabled taosd taosadapter taoskeeper taos-explorer # 检查运行状态 systemctl is-active taosd taosadapter taoskeeper taos-explorer检查:
systemctl is-enabled taosd systemctl is-enabled taosadapter systemctl is-enabled taoskeeper systemctl is-enabled taos-explorer正常:
enabled enabled enabled enabled检查运行状态:
systemctl is-active taosd taosadapter taoskeeper taos-explorer正常:
active active active active端口统一检查:
ss -lntp | egrep '6030|6041|6043|6060'二十三、集群最终检查
登录任意节点:
taos -u root -p执行:
SHOW DATABASES; SHOW DNODES; SHOW MNODES; SHOW iot.VGROUPS;验收标准:
3 个 DNode 全部 ready 3 个 MNode 全部 ready 1 Leader + 2 Follower iot 6 个 VGroup 每个 VGroup: 3 个副本 1 Leader + 2 Follower is_ready = true applied/committed 正常二十四、滚动重启验证
数据库部署完成后,生产环境非常建议做一次节点滚动重启测试。
原则:
一次只重启一个节点,前一个完全恢复后再重启下一个。
例如:
Node01 ↓ 恢复 ready ↓ Node02 ↓ 恢复 ready ↓ Node03每台启动后检查:
uptime systemctl is-active taosd taosadapter taoskeeper taos-explorer ss -lntp | egrep '6030|6041|6043|6060'然后:
SHOW DNODES; SHOW MNODES; SHOW iot.VGROUPS;本次实际测试中,重启前 MNode Leader 位于 Node03。
Node03 重启后:
Node01 自动成为 Leader Node02 Follower Node03 恢复后成为 Follower说明 MNode 自动选主工作正常。
这一步非常有价值,因为它真正验证了:
服务开机自启动 DNode 自动重新加入 MNode 自动重新选主 副本自动恢复二十五、应用如何连接
应用使用:
taosAdapter : 6041JDBC Driver:
com.taosdata.jdbc.rs.RestfulDriver没有配置 VIP 时,可以先使用任意一个 taosAdapter 节点,例如:
jdbc:TAOS-RS://192.168.100.81:6041/iot?timezone=Asia/Beijing&charset=UTF-8&httpPoolSize=500注意:
应用连接 Node01:
应用 ↓ Node01:6041 ↓ taosAdapter ↓ TDengine 整个集群并不是数据只写 Node01。
真正的数据副本、Leader、Follower 由 TDengine 自己管理。
二十六、三副本与 VIP 的区别
这个概念部署完成后一定要搞清楚。
三副本
负责:
数据库数据层高可用例如:
Node01 Follower Node02 Follower Node03 LeaderNode03 故障后,剩余副本重新选 Leader。
这属于:
TDengine 内部机制不涉及数据库 IP 漂移。
Nginx / VIP
解决的是:
应用入口高可用当前:
应用 ↓ 192.168.100.81:6041如果 Node01 整台服务器故障,那么 TDengine 数据库集群可能仍然正常,但应用连接地址已经不可达。
后续可以设计:
应用 │ ▼ VIP:6041 │ Nginx / LB ┌────────┼────────┐ ↓ ↓ ↓ 81:6041 82:6041 83:6041 │ │ │ └────────┼────────┘ ↓ TDengine 集群所以一句话总结:
TDengine 三副本解决数据库数据层高可用,Nginx + VIP 解决应用接入层高可用。
二十七、常用巡检命令
服务状态
systemctl status taosd systemctl status taosadapter systemctl status taoskeeper systemctl status taos-explorer或者:
systemctl is-active taosd taosadapter taoskeeper taos-explorer端口
ss -lntp | egrep '6030|6041|6043|6060'进程
ps -ef | grep taos正常通常可以看到:
taosd taosudf taosadapter taoskeeper taos-explorer集群节点
SHOW DNODES;MNode
SHOW MNODES;数据库
SHOW DATABASES;三副本
SHOW iot.VGROUPS;用户
SHOW USERS;二十八、最终目录速查
程序: /app/tdengine/server/taos 数据: /app/tdengine/data 数据库日志: /app/tdengine/log 临时目录: /app/tdengine/tmp 安装包: /app/tdengine/soft主要配置:
/etc/taos/taos.cfg /etc/taos/taosadapter.toml /etc/taos/taoskeeper.toml /etc/taos/explorer.toml /etc/default/taos-explorer主要服务:
taosd taosadapter taoskeeper taos-explorer核心端口:
6030 taosd 6041 taosAdapter 6043 taosKeeper 6060 taosExplorer二十九、下次快速部署顺序
以后再部署一套,其实记住下面这条主线就可以:
1. 检查 OS / CPU / 内存 / 磁盘 ↓ 2. 配置 hostname ↓ 3. 配置 /etc/hosts ↓ 4. 检查时间同步 ↓ 5. 检查防火墙和系统资源 ↓ 6. 创建 TDengine 目录 ↓ 7. 上传并校验安装包 ↓ 8. 三节点安装 TDengine ↓ 9. 修改 taos.cfg ↓ 10. 启动三个 taosd ↓ 11. CREATE DNODE ↓ 12. CREATE MNODE ↓ 13. 创建 REPLICA 3 数据库 ↓ 14. 创建业务/监控用户 ↓ 15. 配置 taosAdapter ↓ 16. 配置 taosKeeper ↓ 17. 配置 taosExplorer ↓ 18. 检查 6030/6041/6043/6060 ↓ 19. SHOW DNODES / MNODES / VGROUPS ↓ 20. 三节点滚动重启验证 ↓ 21. 应用连接 6041 ↓ 22. 后续补 Nginx / VIP三十、总结
这次部署最值得掌握的不是单纯把 TDengine 安装起来,而是把整个架构关系理顺了:
DNode = TDengine 数据节点 MNode = 集群管理节点 VGroup = 数据分片单元 REPLICA 3 = 每个 VGroup 三副本 Leader / Follower = TDengine 内部副本选主机制 taosAdapter 6041 = 应用访问入口 taosKeeper = TDengine 监控组件 taosExplorer 6060 = Web 管理界面 Nginx / VIP = 应用入口高可用三副本本身已经实现数据库数据层的高可用:
单节点故障 ↓ 剩余两个副本继续工作 ↓ 重新选举 Leader ↓ 故障节点恢复 ↓ 副本重新追平而 Nginx/VIP 是后续进一步解决应用连接入口单点。
这样,下次再部署 TDengine 三节点三副本环境,即使安装路径、IP、主机名发生变化,整个部署思路基本不变。