时序数据库TDengine3.x部署

一、 概述

TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB),专为物联网、车联网、工业互联网、金融、IT 运维监控等场景设计。

  • 官方文档https://docs.taosdata.com/
  • 核心组件(容器内包含):
    • taosd: 数据库核心服务。
    • taosAdapter: 提供 RESTful 和 WebSocket 接口。
    • taosKeeper: 系统监控指标收集。
    • taosExplorer: Web 管理控制台。

二、 单节点部署(快速体验)

1. 使用 Docker Compose 启动

创建 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3.9'
services:
tdengine:
image: tdengine/tdengine:3.3.4.3 # 可使用最新稳定版标签
container_name: tdengine
ports:
- '6030:6030' # taosd 核心服务端口
- '6041:6041' # taosAdapter Restful API
- '6043:6043' # taosKeeper 指标监控
- '6060:6060' # taosExplorer Web控制台
- '6044-6049:6044-6049' # 第三方数据接入
- '6044-6045:6044-6045/udp' # UDP 接入
volumes:
- './data:/var/lib/taos' # 数据持久化
- './log:/var/log/taos' # 日志持久化

启动服务:docker-compose up -d

2. 连接测试与基本操作
  1. 进入容器
    1
    docker exec -it tdengine bash
  2. 生成测试数据(使用官方工具):
    1
    taosBenchmark -y
    此命令会在 test 数据库下创建一张名为 meters 的超级表,包含 10,000 张子表,每表 10,000 条记录。
  3. 使用 CLI 连接数据库
    1
    taos
    1
    2
    3
    -- 在 taos 提示符下执行
    USE test;
    SELECT COUNT(*) FROM meters;
  4. 修改默认密码
    1
    ALTER USER root PASS 'YourNewPassword';
  5. 使用密码登录
    1
    taos -uroot -pYourNewPassword
  6. 访问 Web 控制台
    浏览器访问 http://<服务器IP>:6060,使用数据库用户名密码登录 taosExplorer 进行可视化管理。

三、 生产集群部署

1. 集群规划

假设使用 3 台服务器,所有节点均部署 TDengine。

服务器 IP 地址 部署服务 对外代理端口 (Nginx)
node0 192.168.4.211 TDengine -
node1 192.168.4.115 TDengine -
node2 192.168.0.37 TDengine, Nginx 16041, 16043, 16060

端口说明:每个 TDengine 容器需开放与单节点相同的端口(6030, 6041, 6043, 6060, 6044-6049)。

2. 部署步骤

(1)所有节点:准备配置文件

1
2
3
4
5
6
7
8
9
10
# 1. 启动临时容器获取默认配置
docker run --rm -it --name=tdengine-temp tdengine/tdengine:3.3.4.3 taos

# 2. 另开终端,拷贝配置
docker cp tdengine-temp:/etc/taos ./conf

# 3. 修改配置中的主机名(替换为当前节点IP)
CURRENT_IP=$(YOUR_NODE_IP) # 请替换为实际IP,如 192.168.4.211
cd conf
sed -i "s/buildkitsandbox/$CURRENT_IP/g" explorer.toml taosadapter.toml taos.cfg taoskeeper.toml

(2)所有节点:配置集群首个节点 (firstEp)
编辑 conf/taos.cfg 文件,所有节点的此配置必须相同

1
2
# 指向规划中第一个启动的节点(例如 node0)
firstEp 192.168.4.211:6030

(3)所有节点:启动 TDengine 服务
创建 docker-compose.yml,使用 host 网络模式以便节点间通信。

1
2
3
4
5
6
7
8
9
10
version: '3.9'
services:
tdengine:
image: tdengine/tdengine:3.3.4.3
container_name: tdengine
network_mode: host # 关键:使用主机网络
volumes:
- './data:/var/lib/taos'
- './log:/var/log/taos'
- './conf:/etc/taos' # 挂载自定义配置

启动:docker-compose up -d

启动顺序建议:先启动 firstEp 指向的节点(node0),再启动其他节点。

3. 集群验证与管理
  1. 查看数据节点
    1
    docker exec -it tdengine taos
    1
    SHOW DNODES;
    输出应显示 3 个 statusready 的节点。
  2. 添加管理节点(Mnode)以实现高可用
    首个启动的 dnode 自动成为 Mnode(管理节点)。为防止单点故障,需添加冗余 Mnode。
    1
    2
    3
    4
    -- 在 dnode 2 (node1) 上创建第二个 Mnode
    CREATE MNODE ON DNODE 2;
    -- 查看 Mnode 状态
    SHOW MNODES;
    输出应显示一个 leader 和一个 follower Mnode。

四、 高可用与负载均衡(Nginx 代理)

node2 上部署 Nginx,对外提供统一的访问入口,实现 taosAdapter (REST API)、taosKeeper (监控) 和 taosExplorer (Web) 的负载均衡。

1. 创建 Nginx 配置文件 (nginx.conf)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
user root;
worker_processes auto;
events {
use epoll;
worker_connections 1024;
}
http {
access_log off;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

# 1. 代理 taosAdapter (REST API, 6041)
server {
listen 16041;
location / {
proxy_pass http://dbserver;
proxy_read_timeout 600s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}

# 2. 代理 taosKeeper (监控, 6043)
server {
listen 16043;
location / {
proxy_pass http://keeper;
}
}

# 3. 代理 taosExplorer (Web控制台, 6060)
server {
listen 16060;
location / {
proxy_pass http://explorer;
# 处理 CORS 头部(如果前端需要)
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}

# 上游服务器定义
upstream dbserver {
least_conn; # 最少连接负载均衡
server 192.168.4.211:6041 max_fails=0;
server 192.168.4.115:6041 max_fails=0;
server 192.168.0.37:6041 max_fails=0;
}
upstream keeper {
ip_hash; # 保持会话
server 192.168.4.211:6043;
server 192.168.4.115:6043;
server 192.168.0.37:6043;
}
upstream explorer {
ip_hash; # 保持会话
server 192.168.4.211:6060;
server 192.168.4.115:6060;
server 192.168.0.37:6060;
}
}
2. 使用 Docker Compose 启动 Nginx

创建 docker-compose-nginx.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3.9'
services:
nginx:
restart: always
image: nginx:1.23.1
container_name: nginx-tdengine
ports:
- '16041:16041'
- '16043:16043'
- '16060:16060'
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./nginx-logs:/var/log/nginx

启动:docker-compose -f docker-compose-nginx.yml up -d

3. 验证代理

通过 Nginx 代理访问 REST API:

1
2
3
4
curl -L 'http://192.168.0.37:16041/rest/sql/test' \
-H 'Content-Type: text/plain' \
-H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' \ # Base64编码的 root:taosdata
-d 'SELECT * FROM meters LIMIT 1'

应返回包含测试数据的 JSON 响应。

五、 关键注意事项

  1. 版本一致性:集群所有节点必须使用相同版本的 TDengine 镜像。
  2. 网络:集群部署必须使用 host 网络或确保容器间在 6030-6049 端口上能直接通信。
  3. 防火墙:确保服务器防火墙开放相关端口。
  4. 数据持久化:务必挂载 /var/lib/taos 目录以防止数据丢失。
  5. **firstEp**:此配置是集群组建的关键,必须正确且一致。
  6. Mnode:生产环境至少配置 2 个 Mnode 以实现管理层面的高可用。