压测命令执行不成功

在一台宿主机上使用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”等操作找不到正确的服务节点而失败。

问题排查

你可以通过下面几个步骤来验证和定位问题的具体环节。

  1. 检查taosBenchmark参数 :确认命令中是否指定了正确的IP(-h 172.16.48.62 )和端口(-p 6030 ),通常端口默认就是6030。
  2. 检查基础网络连通性 :在宿主机使用 telnet <容器宿主机IP> 6030nc -zv <容器宿主机IP> 6030 命令,测试是否能连通容器的6030 TCP端口,确保没有防火墙阻挡。
  3. 检查服务端FQDN配置 :进入任意一个TDengine容器,查看配置文件 cat /etc/taos/taos.cfg ,找到 fqdn 配置项。它通常被设置为容器的主机名(如 tdnode1 )。这个值就是问题的关键。
  4. 检查客户端DNS解析 :在宿主机上,尝试 ping 或 nslookup 上一步查到的 fqdn 。如果能解析,问题可能在应用层;如果失败,则问题确认为DNS解析。

根据以上排查,问题的原因和解决方案基本可以明确:

问题根源与解决方案

问题根源 在宿主机上,无法解析TDengine集群节点返回的FQDN(如tdnode1 )。
解决方案 修改客户端的域名解析配置,确保它能正确找到这些FQDN。

具体实施步骤:

  1. 获取集群FQDN :首先,你需要知道你TDengine集群中每个节点配置的FQDN是什么。它们通常定义在docker-compose.yml 文件的环境变量TAOS_FQDN 或容器内的/etc/taos/taos.cfg 文件中。
  2. 修改宿主机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

  1. 再次运行压测命令 :完成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映射回本机。


修改了hosts,但还是报错,下面的容器里面taosd的日志

修改客户端的域名解析配置,确保它能正确找到这些FQDN。
请完全按照上面的配置尝试。

image[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
我已经改了