我(wo)(wo)(wo)(wo)是濤思(si)數據的(de)運營同學。第一次看(kan)到(dao)這(zhe)(zhe)個問(wen)題,是在我(wo)(wo)(wo)(wo)負責的(de)一個監控后臺,發現有用戶(hu)通過(guo)這(zhe)(zhe)個問(wen)題來到(dao)了我(wo)(wo)(wo)(wo)們官網。起(qi)初(chu)我(wo)(wo)(wo)(wo)以(yi)為只是個例,并且在官網的(de)FAQ中,有關于(yu)此問(wen)題的(de)詳(xiang)細解(jie)答,我(wo)(wo)(wo)(wo)私認為自己的(de)SEO做得(de)還不錯(cuo),遇到(dao)這(zhe)(zhe)個問(wen)題的(de)用戶(hu),隨便搜一搜就(jiu)能定位到(dao)解(jie)決辦法(fa),從運營角度來說,It’s not a big deal。
直到我(wo)們開始籌劃(hua)“每周精選(xuan)Issue”這個欄目,在我(wo)日常(chang)Push技術支(zhi)持同學給(gei)我(wo)一個具有代表性的問(wen)題時,他跟(gen)我(wo)說:那就從“failed to connect server”開始吧。
然后(hou)我(wo)好奇地(di)打開了(le)TDengine Database的主頁,搜(sou)了(le)一下這(zhe)個問題(ti),竟然有(you)50個之多,并(bing)且“failed”方(fang)式不盡相(xiang)同。雖然技術上的問題(ti)我(wo)有(you)心(xin)無力,但我(wo)很能理解大家想解決這(zhe)個問題(ti)的迫切心(xin)情,這(zhe)就好像我(wo)打算吃火鍋(guo),準備好了(le)底料(liao)(liao)、食材和蘸料(liao)(liao),也(ye)準備好了(le)鍋(guo),然后(hou)發現(xian)鍋(guo)沒有(you)電……我(wo)設身處地(di)地(di)想了(le)一下,確實,很崩潰。
那么,好的,既然你誠(cheng)心(xin)誠(cheng)意地發問了,那我就認(ren)(ren)認(ren)(ren)真(zhen)真(zhen)地告訴你,「每周精(jing)選Issue」的第(di)一期就從“failed to connect server”開始吧!
為什么會出現錯誤“failed to connect server”?
仔細看(kan)了一(yi)下GitHub上關于此(ci)(ci)問題的(de)討論(lun),暫時把(ba)真的(de)是(shi)一(yi)個“bug”的(de)情況(kuang)拋開不談,大(da)多(duo)數(shu)情況(kuang)下報此(ci)(ci)錯誤,皆是(shi)因(yin)為你忽視了一(yi)些重要的(de)事(shi)情。
比如,來(lai)自編號,「自問自答(da)」的Issue:java.sql.SQLException: TDengine Error: failed to connect to server。
首先表揚(yang)一下這位可愛的(de)用戶,問(wen)題敘述的(de)很完整,描述了操作(zuo)環境、操作(zuo)過程、并(bing)且上傳了日志(zhi),為很多用戶展示了“如何遞交一個Issue”的(de)良好(hao)示范(fan)……然后,一天之內,他(ta)自(zi)己關(guan)閉了該問(wen)題。
他說:找到原因(yin)了,我linux服務器上(shang)(shang)的(de)版本是手工編(bian)譯安裝(zhuang)的(de)是1.6.5,客(ke)戶(hu)端win10用的(de)是1.6.4,因(yin)此造成連接不(bu)上(shang)(shang)。

看看,如(ru)果提前注意(yi)到服務(wu)器(qi)和客戶端的版本(ben)不(bu)(bu)一(yi)致,是(shi)不(bu)(bu)是(shi)就能讓自己的體驗(yan)過程更順暢呢(ni)。(當(dang)然(ran),研發同學說,他(ta)們正在努(nu)力,不(bu)(bu)久之后(hou),服務(wu)器(qi)和客戶端版本(ben)不(bu)(bu)一(yi)致,也可以(yi)兼(jian)容工作,那我們就拭目(mu)以(yi)待吧!)
再比如,來自編號,「體驗過(guo)時版本」的(de)Issue:Query interrupted (failed to connect to server)
這位用(yong)戶的表(biao)中,有(you)一個(ge)float字段,在終端查詢時報錯,但(dan)將該(gai)字段類型(xing)改成double就可以(yi)拿到結果,因此他(ta)懷疑,TDengine Database是不(bu)是不(bu)支持針對(dui)float的某些(xie)查詢。
一番(fan)問答(da)下,該問題(ti)終于得到解決,原來(lai),這(zhe)個(ge)問題(ti)確(que)實(shi)是之前(qian)某個(ge)版本中的(de)一個(ge)bug,但早已(yi)在新版本中得到了修(xiu)復(fu),而這(zhe)位(wei)積極提(ti)bug的(de)小伙伴(ban)卻還在體(ti)驗已(yi)經過(guo)時的(de)舊版本,踩了前(qian)人已(yi)經踩過(guo)的(de)坑。

新(xin)版本是個好(hao)東西,你值得擁有。
……
類似的問題還有(you)很多(duo)(duo),因(yin)此除了真正(zheng)的bug外(wai),很多(duo)(duo)時候你多(duo)(duo)一(yi)分認真和仔細,就能(neng)解決問題,就比如剛才那個(ge)沒有(you)電的鍋,可能(neng)僅僅是因(yin)為,你沒有(you)接通電源。
遇到“failed to connect server”,有沒有什么辦法去排查問題呢?
當然,可以(yi)。我(wo)問了(le)我(wo)們的(de)技術支(zhi)持(chi)同學,他有一(yi)套(tao)解決這類問題的(de)萬能(neng)方法,只(zhi)需兩步,在此不吝分享。
第一步:檢查(cha)客(ke)戶端(duan)和服務器版本(ben)是否(fou)一致。(正(zheng)如之前所說(shuo),不(bu)久(jiu)之后,這個步驟就(jiu)完(wan)全不(bu)需(xu)要了。)
第二步(bu):客戶端遇到連接故障(zhang),按如下步(bu)驟進行(xing)檢查:
- 在服務器上,執行 systemctl status taosd 檢查taosd運行狀態。如果沒有運行,啟動taosd
- 確認客戶端連接時指定了正確的服務器IP地址,ping服務器IP,如果沒有反應,請檢查你的網絡
- 檢查防火墻設置,確認TCP/UDP 端口6030-6039 是打開的
- 對于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)
- 如果仍不能排除連接故障,請使用命令行工具nc來分別判斷指定端口的TCP和UDP連接是否通暢
- 檢查UDP端口連接是否工作:nc -vuz {hostIP} {port}
- 檢查服務器側TCP端口連接是否工作:nc -l {port}
- 檢查客戶端側TCP端口鏈接是否工作:nc {hostIP} {port}
如果按照這兩步(bu)檢查并執行下(xia)來,依然(ran)沒(mei)有解決你的(de)(de)問題(ti),那你可能(neng)真的(de)(de)遇到了bug,不用(yong)擔心,我(wo)們(men)還有終(zhong)極萬(wan)能(neng)法寶,到上,將(jiang)此問題(ti)進行反(fan)饋(kui),當然(ran),需要你附(fu)上操作環境、操作過程(cheng)和日志,越詳(xiang)細(xi)越好,向我(wo)們(men)的(de)(de)研發工程(cheng)師尋(xun)求幫助。
好了(le),本(ben)期「每(mei)周精(jing)選Issue」就到(dao)這里了(le),能真正(zheng)幫助到(dao)你,就是這個欄目存在的最大意(yi)義。
- 欄目編輯:夏昕
- 技術支持:蘇曉慰


























