遇到“failed to connect server”,我该怎么办?|TDengine每周精选Issue

我是涛思数据的运营同学。第一次看到这个问题,是在我负责的一个监控后台,发现有用户通过这个问题来到了我们官网。起初我以为只是个例,并且在官网的FAQ中,有关于此问题的详细解答,我私认为自己的SEO做得还不错,遇到这个问题的用户,随便搜一搜就能定位到解决办法,从运营角度来说,It’s not a big deal。

直到我们开始筹划“每周精选Issue”这个栏目,在我日常Push技术支持同学给我一个具有代表性的问题时,他跟我说:那就从“failed to connect server”开始吧。

然后我好奇地打开了TDengine Database的GitHub主页,搜了一下这个问题,竟然有50个之多,并且“failed”方式不尽相同。虽然技术上的问题我有心无力,但我很能理解大家想解决这个问题的迫切心情,这就好像我打算吃火锅,准备好了底料、食材和蘸料,也准备好了锅,然后发现锅没有电……我设身处地地想了一下,确实,很崩溃。

那么,好的,既然你诚心诚意地发问了,那我就认认真真地告诉你,「每周精选Issue」的第一期就从“failed to connect server”开始吧!

为什么会出现错误“failed to connect server”?

仔细看了一下GitHub上关于此问题的讨论,暂时把真的是一个“bug”的情况抛开不谈,大多数情况下报此错误,皆是因为你忽视了一些重要的事情。

比如,来自编号#1034,「自问自答」的Issue:java.sql.SQLException: TDengine Error: failed to connect to server。

首先表扬一下这位可爱的用户,问题叙述的很完整,描述了操作环境、操作过程、并且上传了日志,为很多用户展示了“如何递交一个Issue”的良好示范……然后,一天之内,他自己关闭了该问题。

他说:找到原因了,我linux服务器上的版本是手工编译安装的是1.6.5,客户端win10用的是1.6.4,因此造成连接不上。

遇到“failed to connect server”,我该怎么办?|TDengine每周精选Issue - TDengine Database 时序数据库

看看,如果提前注意到服务器和客户端的版本不一致,是不是就能让自己的体验过程更顺畅呢。(当然,研发同学说,他们正在努力,不久之后,服务器和客户端版本不一致,也可以兼容工作,那我们就拭目以待吧!)

再比如,来自编号#1090,「体验过时版本」的Issue:Query interrupted (failed to connect to server) 

这位用户的表中,有一个float字段,在终端查询时报错,但将该字段类型改成double就可以拿到结果,因此他怀疑,TDengine Database是不是不支持针对float的某些查询。

一番问答下,该问题终于得到解决,原来,这个问题确实是之前某个版本中的一个bug,但早已在新版本中得到了修复,而这位积极提bug的小伙伴却还在体验已经过时的旧版本,踩了前人已经踩过的坑。

遇到“failed to connect server”,我该怎么办?|TDengine每周精选Issue - TDengine Database 时序数据库

新版本是个好东西,你值得拥有。

……

类似的问题还有很多,因此除了真正的bug外,很多时候你多一分认真和仔细,就能解决问题,就比如刚才那个没有电的锅,可能仅仅是因为,你没有接通电源。

遇到“failed to connect server”,有没有什么办法去排查问题呢?

当然,可以。我问了我们的技术支持同学,他有一套解决这类问题的万能方法,只需两步,在此不吝分享。

第一步:检查客户端和服务器版本是否一致。(正如之前所说,不久之后,这个步骤就完全不需要了。)

第二步:客户端遇到连接故障,按如下步骤进行检查:

  1. 在服务器上,执行 systemctl status taosd 检查taosd运行状态。如果没有运行,启动taosd
  2. 确认客户端连接时指定了正确的服务器IP地址,ping服务器IP,如果没有反应,请检查你的网络
  3. 检查防火墙设置,确认TCP/UDP 端口6030-6039 是打开的
  4. 对于Linux上的JDBC(ODBC, Python, Go等接口类似)连接,确保libtaos.so在目录/usr/local/lib/taos中,并且/usr/local/lib/taos在系统库函数搜索路径LD_LIBRARY_PATH中
  5. 对于windows上的JDBC, ODBC, Python, Go等连接,确保driver/c/taos.dll在你的系统搜索目录里 (建议taos.dll放在目录 C:\Windows\System32)
  6. 如果仍不能排除连接故障,请使用命令行工具nc来分别判断指定端口的TCP和UDP连接是否通畅
    • 检查UDP端口连接是否工作:nc -vuz {hostIP} {port}
    • 检查服务器侧TCP端口连接是否工作:nc -l {port}
    • 检查客户端侧TCP端口链接是否工作:nc {hostIP} {port}

如果按照这两步检查并执行下来,依然没有解决你的问题,那你可能真的遇到了bug,不用担心,我们还有终极万能法宝,到GitHub上,将此问题进行反馈,当然,需要你附上操作环境、操作过程和日志,越详细越好,向我们的研发工程师寻求帮助。

好了,本期「每周精选Issue」就到这里了,能真正帮助到你,就是这个栏目存在的最大意义。

  • 栏目编辑:夏昕
  • 技术支持:苏晓慰