在一台宿主机上使用docker-compose部署了3个容器组成的开源版数据库集群,集群状态正常。但是在宿主机执行压测命令却不成功,进入容器内部执行压测命令却成功。
你的错误 “failed to create database (test1)” 和 “Unable to establish connection” 是一个表象,核心问题在于TDengine客户端(宿主机上的taosBenchmark)无法完整获取到集群的拓扑信息 。
- 初步连接成功,但操作失败 :
taosBenchmark参数中的-h 172.16.48.62让它通过IP地址初步连接到了集群的某个节点(宿主机IP),这解释了为什么日志显示“connect successfully”。 - 关键步骤失败 :成功连接后,客户端会向服务端请求集群内所有数据节点的地址列表。服务端返回的是每个节点配置的FQDN(如
tdnode1,tdnode2)。你的宿主机无法解析这些FQDN,导致后续的“DROP DATABASE”等操作找不到正确的服务节点而失败。
问题排查
你可以通过下面几个步骤来验证和定位问题的具体环节。
- 检查taosBenchmark参数 :确认命令中是否指定了正确的IP(
-h 172.16.48.62)和端口(-p 6030),通常端口默认就是6030。 - 检查基础网络连通性 :在宿主机使用
telnet <容器宿主机IP> 6030或nc -zv <容器宿主机IP> 6030命令,测试是否能连通容器的6030 TCP端口,确保没有防火墙阻挡。 - 检查服务端FQDN配置 :进入任意一个TDengine容器,查看配置文件
cat /etc/taos/taos.cfg,找到fqdn配置项。它通常被设置为容器的主机名(如tdnode1)。这个值就是问题的关键。 - 检查客户端DNS解析 :在宿主机上,尝试 ping 或 nslookup 上一步查到的
fqdn。如果能解析,问题可能在应用层;如果失败,则问题确认为DNS解析。
根据以上排查,问题的原因和解决方案基本可以明确:
问题根源与解决方案
| 问题根源 | 在宿主机上,无法解析TDengine集群节点返回的FQDN(如tdnode1 )。 |
|---|---|
| 解决方案 | 修改客户端的域名解析配置,确保它能正确找到这些FQDN。 |
具体实施步骤:
- 获取集群FQDN :首先,你需要知道你TDengine集群中每个节点配置的FQDN是什么。它们通常定义在
docker-compose.yml文件的环境变量TAOS_FQDN或容器内的/etc/taos/taos.cfg文件中。 - 修改宿主机Hosts文件 :这是最直接有效的方法。编辑宿主机的
/etc/hosts文件,为集群的每个FQDN添加IP地址映射。如果所有节点都在同一台宿主机上,映射到127.0.0.1即可。
bash
#/etc/hosts 127.0.0.1 tdnode1 127.0.0.1 tdnode2 127.0.0.1 tdnode3
- 再次运行压测命令 :完成Hosts配置后,再次运行你的压测命令。
bash
taoBenchmark -h 127.0.0.1 -p 6030 -u root -ptengine@123 -d test1 -t 10 -n 100 -T 4 -I stmt -y
4.注意* :此时 -h 参数应使用127.0.0.1 (或宿主机的实际IP),因为Hosts文件会将FQDN映射回本机。
修改客户端的域名解析配置,确保它能正确找到这些FQDN。
请完全按照上面的配置尝试。
[root@scin-devops tdengine-docker]# cat docker-compose.yml
version: ‘3’
services:
tdengine-node1:
image: tdengine/tsdb:3.4.1.6
container_name: tdengine-node1
hostname: tdengine-node1
restart: always
ports:
- “6030:6030”
- “6041:6041”
- “6043:6043”
- “6060:6060”
cpus: 4
mem_limit: 10g
environment: - TZ=Asia/Shanghai
- TAOS_FQDN=tdengine-node1
- TAOS_FIRST_EP=tdengine-node1:6030
- TAOS_ROOT_PASSWORD=tdengine@123
- TAOS_NUM_OF_MNODES=3
volumes: - ./data/node1:/var/lib/taos
- ./log/node1:/var/log/taos
networks: - td-network
tdengine-node2:
image: tdengine/tsdb:3.4.1.6
container_name: tdengine-node2
hostname: tdengine-node2
restart: always
ports:
- “6130:6030”
- “6141:6041”
- “6143:6043”
- “6160:6060”
cpus: 4
mem_limit: 10g
environment: - TZ=Asia/Shanghai
- TAOS_FQDN=tdengine-node2
- TAOS_FIRST_EP=tdengine-node1:6030
- TAOS_ROOT_PASSWORD=tdengine@123
- TAOS_NUM_OF_MNODES=3
volumes: - ./data/node2:/var/lib/taos
- ./log/node2:/var/log/taos
networks: - td-network
tdengine-node3:
image: tdengine/tsdb:3.4.1.6
container_name: tdengine-node3
hostname: tdengine-node3
restart: always
ports:
- “6230:6030”
- “6241:6041”
- “6243:6043”
- “6260:6060”
cpus: 4
mem_limit: 10g
environment: - TZ=Asia/Shanghai
- TAOS_FQDN=tdengine-node3
- TAOS_FIRST_EP=tdengine-node1:6030
- TAOS_ROOT_PASSWORD=tdengine@123
- TAOS_NUM_OF_MNODES=3
volumes: - ./data/node3:/var/lib/taos
- ./log/node3:/var/log/taos
networks: - td-network
networks:
td-network:
driver: bridge
我已经改了


