TDengine Database 是一款客户端-服务端模式产品,当客户端遇到链接故障,不能正常连接到服务端时,很多情况下是由于网络问题引起的,可以使用TDengine 客户端程序taos内嵌的网络连通检测工具来快速定位原因。
2021.08.27更新,新增网络测速工具:https://tdengine.com/2021/08/27/2943.html
在使用taos内嵌的网络连通检测工具前,请先按照下面的步骤进行网络状况检查:
- 检查网络环境
- 云服务器:检查云服务器的安全组是否打开TCP/UDP 端口6030-6042的访问权限
- 本地虚拟机:检查网络能否ping通,尽量避免使用
localhost
作为hostname - 公司服务器:如果为NAT网络环境,请务必检查服务器能否将消息返回值客户端
- 确保客户端与服务端版本号是完全一致
- 在服务器,执行
systemctl status taosd
检查taosd运行状态。如果没有运行,启动taosd - 确认客户端连接时指定了正确的服务器FQDN (Fully Qualified Domain Name(可在服务器上执行Linux命令hostname -f获得)
- ping服务器的FQDN,如果没有反应,请检查你的网络,DNS设置,或客户端所在计算机的系统hosts文件。如果所在的网络中没有DNS,或DNS中没有配置服务器的FQDN,必须在计算机系统的hosts文件中配置。比如服务端的hostname是 abc.fast.com,ip是192.168.1.131。对于Linux系统的客户端,在/etc/hosts文件添加如下的一条记录:192.168.1.131 abc.fast.com对于Windows系统的客户端,在C:\Windows\System32\drivers\etc\hosts文件中添加如下一条记录:192.168.1.131 abc.fast.com
- 检查防火墙设置,如果使能了防火墙,请确认TCP/UDP 端口6030-6042 是打开的
- 对于Linux上的JDBC(ODBC, Python, Go等接口类似)连接, 确保libtaos.so在目录/usr/local/lib/taos里, 并且/usr/local/lib/taos在系统库函数搜索路径LD_LIBRARY_PATH里
- 对于windows上的JDBC, ODBC, Python, Go等连接,确保driver/c/taos.dll在你的系统搜索目录里 (建议taos.dll放在目录 C:\Windows\System32)
- 如果仍不能排除连接故障,请使用taos内嵌的网络连通检测工具:验证服务器和客户端之间指定的端口连接是否通畅(包括TCP和UDP)。
有两种测试场景:一是环境中没有在运行的taosd服务,二是环境中已经有在运行的taosd服务。下面分别对这两种情况的测试进行描述。
一、环境中没有运行的taosd服务
taos 通过参数 -n 来确定运行服务端功能,还是客户端功能。
-n server:表示运行检测服务端功能;
-n client:表示运行检测客户端功能。
1)在服务器运行taos内嵌的网络连通检测的服务端功能,如:taos -n server -P 6030 -e 6042 -l 1000;
2)在客户端运行taos内嵌的网络连通检测的客户端功能,如:taos -n client -h host -P 6030 -e 6042 -l 1000;
该功能相关的5个参数说明:
-n :指示运行网络连通检测的服务端功能,或客户端功能,缺省值为空,表示不启动网络连通检测;
-h:指示服务端名称,可以是ip地址或fqdn格式。如:192.168.1.160,或 192.168.1.160:6030,或 hostname1,或hostname1:6030。缺省值是127.0.0.1。
-P :检测的起始端口号,缺省值是6030;
-e:检测的结束端口号,必须大于等于起始端口号,缺省值是6042;
-l:指定检测端口连通的报文长度,最大64000字节,缺省值是1000字节,测试时服务端和客户端必须指定相同;
服务端设置的起始端口和结束端口号,必须包含客户端设置的起始端口和结束端口号;对于起始端口号有三种设置方式:缺省值、-h指定、-P指定,优先级是:-P指定 > -h指定 > 缺省值。客户端运行的输出样例:
ubuntu@u60 ~/taos/test$ ./taos -n client -h ubuntu-7060 -P 6030 -e 6042 -l 16000
host: ubuntu-7060 start port: 6030 end port: 6042 packet len: 16000
tcp port:6030 test ok. udp port:6030 test ok.
tcp port:6031 test ok. udp port:6031 test ok.
tcp port:6032 test ok. udp port:6032 test ok.
tcp port:6033 test ok. udp port:6033 test ok.
tcp port:6034 test ok. udp port:6034 test ok.
tcp port:6035 test ok. udp port:6035 test ok.
tcp port:6036 test ok. udp port:6036 test ok.
tcp port:6037 test ok. udp port:6037 test ok.
tcp port:6038 test ok. udp port:6038 test ok.
tcp port:6039 test ok. udp port:6039 test ok.
tcp port:6040 test ok. udp port:6040 test ok.
tcp port:6041 test ok. udp port:6041 test ok.
tcp port:6042 test ok. udp port:6042 test ok.
如果某个端口不通,会输出 port:xxxx test fail
的信息。如:
ubuntu@u60 ~/taos/test$ ./taos -n client -h ubuntu-7060 -P 6030 -e 6042 -l 16000
host: ubuntu-7060 start port: 6030 end port: 6042 packet len: 16000
tcp port:6030 test ok. udp port:6030 test ok.
connect() fail: Connection refused tcp port:6031 test fail.
Read ack pkg len: -1, less than req pkg len: 16000 from udp port: 6031 udp port:6031 test fail.
tcp port:6032 test ok. udp port:6032 test ok.
tcp port:6033 test ok. udp port:6033 test ok.
tcp port:6034 test ok. udp port:6034 test ok.
tcp port:6035 test ok. udp port:6035 test ok.
tcp port:6036 test ok. udp port:6036 test ok.
tcp port:6037 test ok. udp port:6037 test ok.
tcp port:6038 test ok. udp port:6038 test ok.
tcp port:6039 test ok. udp port:6039 test ok.
tcp port:6040 test ok. udp port:6040 test ok.
tcp port:6041 test ok. udp port:6041 test ok.
tcp port:6042 test ok. udp port:6042 test ok.
二、环境中有运行的taosd服务
此时只需要在客户端环境运行 taos客户端测试功能, 通过参数 -n rpc:表示向正在运行的taosd服务发起检测。其他参数与上面完全相同。客户端运行的输出样例:
plum@plum-VirtualBox ~/git/v20 $ taos -n clients
host: 127.0.0.1 start port: 6030 end port: 6042 packet len: 1000
TCP port:6030 test OK UDP port:6030 test OK
TCP port:6031 test fail. udp port:6031 test fail.
TCP port:6032 test fail. udp port:6032 test fail.
TCP port:6033 test fail. udp port:6033 test fail.
TCP port:6034 test fail. udp port:6034 test fail.
TCP port:6035 test OK UDP port:6035 test OK
TCP port:6036 test fail. udp port:6036 test fail.
TCP port:6037 test fail. udp port:6037 test fail.
TCP port:6038 test fail. udp port:6038 test fail.
TCP port:6039 test fail. udp port:6039 test fail.
TCP port:6040 test fail. udp port:6040 test fail.
TCP port:6041 test fail. udp port:6041 test fail.
TCP port:6042 test fail. udp port:6042 test fail.
表示此时taosd只监听了6030/6035端口,其他端口暂时没有启用。
6041是HTTP模块使用的端口、6042是arbitrator使用的端口,此方法无法检测这两个端口。只能使用第一种方法进行检测。