客戶端訪問Elasticsearch FAQ
本文介紹通過客戶端訪問阿里云Elasticsearch方面的常見問題。
使用Transport Client連接阿里云Elasticsearch時(shí),報(bào)錯(cuò)NoNodeAvailableException如何處理?
Windows系統(tǒng)終端連接Elasticsearch時(shí),如何安裝curl命令,并通過curl命令訪問集群?
阿里云Elasticsearch API兼容開源Elasticsearch API嗎?
阿里云Elasticsearch API包含Restful API和管控側(cè)API:
Restful API:完全兼容開源。主要完成集群數(shù)據(jù)的變更,例如文檔的增刪改查、別名配置等,詳細(xì)信息請(qǐng)參見Restful API。
管控側(cè)API:阿里云Elasticsearch獨(dú)有。主要完成您在阿里云Elasticsearch控制臺(tái)上的操作,例如創(chuàng)建實(shí)例、配置白名單等,詳細(xì)信息請(qǐng)參見API概覽。
使用Transport Client訪問阿里云Elasticsearch,其中cluster.name怎么獲取?
cluster.name就是實(shí)例ID,可在實(shí)例的基本信息頁面獲取,詳情請(qǐng)參見查看實(shí)例的基本信息。
使用Transport Client連接阿里云Elasticsearch時(shí),報(bào)錯(cuò)NoNodeAvailableException如何處理?
使用5.5或5.6版本的Transport Client與阿里云Elasticsearch建立連接時(shí)會(huì)提示NoNodeAvailableException的錯(cuò)誤,推薦您使用5.3.3版本。使用Transport Client,需要購(gòu)買5.5或5.6版本的阿里云Elasticsearch實(shí)例(6.x及以上版本不支持),并且需要在代碼中將client.transport.sniff
設(shè)置為false,詳情請(qǐng)參見Transport Client(5.x)。
Elasticsearch 7.0中已經(jīng)棄用Transport Client,因此在實(shí)際開發(fā)中建議您使用Java REST Client,詳情請(qǐng)參見High Level REST Client(6.3.x)、High Level REST Client(6.7.x)、Low Level REST Client (5.x)。
客戶端連接超時(shí)(Client Request Timeout),如何處理?
客戶端連接超時(shí)的可能原因及解決方案如下:
可能原因 | 解決方案 |
內(nèi)存不足,導(dǎo)致IO讀寫阻塞。 | 通過指標(biāo)含義與異常處理建議,觀察內(nèi)存的使用情況和讀寫情況。如果內(nèi)存和讀寫壓力較大,建議業(yè)務(wù)側(cè)控制優(yōu)化讀寫。 |
設(shè)置超時(shí)時(shí)間過短,在服務(wù)運(yùn)行時(shí)間過程中導(dǎo)致超時(shí)。 | 結(jié)合業(yè)務(wù)場(chǎng)景,在客戶端調(diào)整ConnectTimeout(例如調(diào)整到10000)和SocketTimeout(例如調(diào)整到30000)參數(shù)值。 |
網(wǎng)絡(luò)問題引發(fā)超時(shí),出現(xiàn)網(wǎng)絡(luò)波動(dòng)導(dǎo)致超時(shí)。 | 本地網(wǎng)絡(luò)問題需要您自行排查解決。 |
可以通過Java API訪問阿里云Elasticsearch集群的9200端口嗎?
可以。阿里云Elasticsearch集群的9200端口支持官方所有API,而9300端口因存在安全隱患,目前僅阿里云Elasticsearch 5.x版本集群使用5.3.3版本的Transport Client通過9300端口訪問集群,6.0及以上版本不支持9300端口,僅能使用9200端口訪問集群,同時(shí)阿里云Elasticsearch不支持自定義端口。
由于Elasticsearch 5.5.3版本的Transport Client SDK存在bug,因此云上僅支持5.3.3版本的Transport Client SDK客戶端,其次需要在連接Elasticsearch的代碼中設(shè)置client.transport.sniff參數(shù)為false,詳細(xì)信息請(qǐng)參見Transport Client(5.x)。
客戶端連接超時(shí),報(bào)錯(cuò)Connection reset by peer,如何處理?
報(bào)錯(cuò)原因
Connection reset by peer報(bào)錯(cuò)是在客戶端和集群連接意外斷開后的讀和寫操作引起的。
排查方案
可以從以下幾個(gè)方面去排查:
查看集群日志和監(jiān)控信息,判斷集群是否存在異常。
如果出現(xiàn)集群狀態(tài)不健康、節(jié)點(diǎn)失聯(lián)等問題,需要先解決這些集群層面的問題,詳細(xì)信息請(qǐng)參見指標(biāo)含義與異常處理建議。
判斷客戶端是否有網(wǎng)絡(luò)攔截策略。
您可以分別在用戶側(cè)、Elasticsearch服務(wù)端、SLB端抓包進(jìn)行排查,如果這些都沒有異常,還需要查看客戶端是否有安全設(shè)備攔截。
判斷http-keepalive時(shí)間是否超時(shí)。
http-keepalive是保證一個(gè)TCP連接盡可能傳遞多的報(bào)文,每次交互一個(gè)報(bào)文后就會(huì)更新http-keepalive時(shí)間,如果http-keepalive時(shí)間超時(shí),意味這個(gè)這段時(shí)間client和server沒有報(bào)文交互,本端會(huì)主動(dòng)關(guān)閉并釋放連接。
說明tcp-keepalive是一種探測(cè)TCP連接狀態(tài)的保活機(jī)制,TCP連接建立后如果不主動(dòng)關(guān)閉,client和server沒有發(fā)生異常,這個(gè)連接理論上是一直存在的。http-keepalive是保證一個(gè)TCP連接上盡可能傳遞更多的報(bào)文,如果http-keepalive時(shí)間內(nèi)沒有報(bào)文交互是會(huì)主動(dòng)關(guān)閉連接的。
如果http-keepalive時(shí)間超時(shí),您可以增加連接請(qǐng)求的超時(shí)時(shí)間。例如在客戶端將ConnectTimeout調(diào)整參數(shù)到10000,SocketTimeout參數(shù)調(diào)整到30000。
如果以上排查均未定位到原因,您可以在代碼層面捕獲異常,重試請(qǐng)求,結(jié)合實(shí)際場(chǎng)景進(jìn)行分析。
Windows系統(tǒng)終端連接Elasticsearch時(shí),如何安裝curl命令,并通過curl命令訪問集群?
參見curl官方文檔,下載并安裝curl命令工具。
參見通過curl命令訪問與管理Elasticsearch,訪問Elasticsearch集群。
阿里云Elasticsearch客戶端支持使用哪些SQL查詢方式?
阿里云Elasticsearch和官方Elasticsearch的功能及使用方式一致,客戶端支持以下SQL查詢方式:
Elasticsearch 6.3版本開始支持X-Pack SQL語言,客戶端支持的SQL查詢方式包括SQL REST API、SQL Translate API和SQL JDBC驅(qū)動(dòng)等,客戶端支持的更多SQL查詢方式請(qǐng)參見SQL Client Applications。
X-Pack SQL查詢方式。使用Elastic官方提供的x-pack-sql插件,具體信息請(qǐng)參見sql-search-api。
第三方SQL插件。例如開源elasticsearch-sql,建議您參考第三方開源插件相關(guān)文檔。