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