引言
TDengine 是一个高性能、开源的时间序列数据库,专为物联网、大数据和工业应用优化。本文将详细说明在运行于 WSL2(Windows Subsystem for Linux 2)的 Ubuntu 22.04 上使用 Docker 安装 TDengine 3.3.6.0 版本。通过 Docker 的容器化技术,可以简化部署流程并确保环境一致性。
前提条件
- 在 WSL2 上安装了 Ubuntu 22.04。
- 已安装并运行 Docker。确保 Docker 守护进程已启动(
sudo service docker start)。 - 熟悉基本的终端命令和 Docker 使用。
有关 WSL2 上 Docker 的设置,请参考 Docker 官方文档。有关 TDengine 的详细信息,可查看 TDengine 官方 Docker 文档。
安装步骤
1. 创建数据和日志目录
TDengine 将数据和日志存储在特定目录中。为了在 Docker 容器外持久化这些数据,需要在主机上创建目录并设置适当的权限。
mkdir -p /home/tdengine/data /home/tdengine/log
chmod -R 777 /home/tdengine/
/home/tdengine/data:存储 TDengine 的数据库文件。/home/tdengine/log:存储 TDengine 的日志文件。chmod -R 777:确保 Docker 容器对目录具有写权限。生产环境中可根据需要调整权限以提高安全性。
2. 运行 TDengine Docker 容器
使用 docker run 命令启动 TDengine 容器,并配置必要的卷挂载和端口映射。以下命令将拉取并运行 TDengine 3.3.6.0 镜像:
docker run -d --name tdengine-3 \
-v /home/tdengine/data:/var/lib/taos \
-v /home/tdengine/log:/var/log/taos \
-p 6030:6030 -p 6041:6041 -p 6043:6043 -p 6044-6049:6044-6049 \
-p 6044-6045:6044-6045/udp -p 6060:6060 \
tdengine/tdengine:3.3.6.0
命令解析
-
-d:在后台运行容器。 -
--name tdengine-3:将容器命名为tdengine-3,便于管理。 -
-v /home/tdengine/data:/var/lib/taos:将主机的/home/tdengine/data目录映射到容器的/var/lib/taos数据目录。 -
-v /home/tdengine/log:/var/log/taos:将主机的/home/tdengine/log目录映射到容器的/var/log/taos日志目录。 -
-p:映射 TDengine 服务所需的端口(包括 TCP 和 UDP)。主要端口包括:
6030:默认客户端连接端口。6041:RESTful API 端口。6043-6049:TDengine 其他功能端口。6044-6045/udp:特定功能的 UDP 端口。6060:Web 界面端口。
-
tdengine/tdengine:3.3.6.0:指定 TDengine 的 Docker 镜像和版本。
3. 验证安装
容器启动后,验证 TDengine 是否正常运行:
-
检查容器状态:
docker ps。 -
访问 TDengine CLI:
docker exec -it tdengine-3 taosd -
或者,通过客户端或在浏览器中访问
http://localhost:6060查看 Web 界面。
4. 故障排除
- 容器无法启动:查看 Docker 日志(
docker logs tdengine-3)以查找错误。确保映射的端口未被其他服务占用。 - 权限问题:确认
/home/tdengine目录具有适当的权限。 - WSL2 相关问题:确保 WSL2 和 Docker 配置正确,必要时重启 WSL2(在 Windows 终端运行
wsl --shutdown)。
为什么选择 Docker 安装 TDengine?
Docker 简化了安装过程,具有以下优势:
- 避免依赖冲突。
- 提供跨平台的统一环境。
- 便于版本管理和升级。
体验TDengine
体验写入
# 进入容器
docker exec -it tdengine-3 bash
# 在容器中输入
taosBenchmark -y
aosBenchmark 是一个专为测试 TDengine 性能而设计的工具,它能够全面评估 TDengine 在写入、查询和订阅等方面的功能表现。该工具能够模拟大量设备产生的数据,并允许用户灵活控制数据库、超级表、标签列的数量和类型、数据列的数量和类型、子表数量、每张子表的数据量、写入数据的时间间隔、工作线程数量以及是否写入乱序数据等策略。
系统将自动在数据库 test 下创建一张名为 meters 的超级表。这张超级表将包含 10,000 张子表,表名从 d0 到 d9999,每张表包含 10,000 条记录。每条记录包含 ts(时间戳)、current(电流)、voltage(电压)和 phase(相位)4 个字段。时间戳范围从“2017-07-14 10:40:00 000”到“2017-07-14 10:40:09 999”。每张表还带有 location 和 groupId 两个标签,其中,groupId 设置为 1 到 10,而 location 则设置为 California.Campbell、California.Cupertino 等城市信息。
执行该命令后,系统将迅速完成 1 亿条记录的写入过程。实际所需时间取决于硬件性能,但即便在普通 PC 服务器上,这个过程通常也只需要十几秒。
体验查询
使用上述 taosBenchmark 插入数据后,可以在 TDengine CLI(taos)输入查询命令,体验查询速度。
# 查询超级表 meters 下的记录总条数
SELECT COUNT(*) FROM test.meters;
# 查询 1 亿条记录的平均值、最大值、最小值
SELECT AVG(current), MAX(voltage), MIN(phase) FROM test.meters;
# 查询 location = "California.SanFrancisco" 的记录总条数
SELECT COUNT(*) FROM test.meters WHERE location = "California.SanFrancisco";
# 查询 groupId = 10 的所有记录的平均值、最大值、最小值
SELECT AVG(current), MAX(voltage), MIN(phase) FROM test.meters WHERE groupId = 10;
# 对表 d1001 按每 10 秒进行平均值、最大值和最小值聚合统计
SELECT _wstart, AVG(current), MAX(voltage), MIN(phase) FROM test.d1001 INTERVAL(10s);
更多详细信息,请参考 TDengine Docker 文档 或 TDengine 社区论坛。