當您在使用阿里云Elasticsearch集群遇到問題時,可能在集群日志、客戶端日志、命令執行結果等數據中看到各種報錯信息。本文介紹常見的報錯,以及產生報錯的原因和解決方法。
寫入Elasticsearch異常:HTTP/1.1 413 Request Entity Too Large
報錯原因
Elasticsearch中設置內容的最大容量參數為http.max_content_length,該參數的默認值是100 MB,而且不建議修改,當寫入的數據量超過了此值就會報錯。
解決方案
調整寫入數據量,每次寫入請求的數據量=文檔數量*單個文檔的大小。僅憑文檔數量可能無法準確評估寫入數據量的大小,它取決于您每個文檔的大小及復雜性。如果您的單個文檔數據量很大,可以適當減少文檔數量。一般建議每次寫入請求的數據量從5 MB~15 MB開始調試,默認不能超過100 MB(詳細信息請參見HTTP settings)。具體調試方案,請參見官方使用和調試批量請求文檔。
Elasticsearch寫數據時報錯:forbids automatic creation of the index
報錯原因
阿里云Elasticsearch實例未開啟自動創建索引功能。
解決方案
在Elasticsearch控制臺的集群配置頁面,靜態開啟自動創建索引功能,您也可以通過命令方式開啟,具體操作請參見配置YML參數。
主日志報錯:all shards failed
報錯說明
出現該報錯后,集群會出現以下問題:
讀取請求無法從分片獲得響應。
由于集群或節點仍處于初始啟動過程,導致無法搜索數據。
分片丟失或處于恢復模式,并且集群狀態為red。
報錯原因
可能原因如下:
節點已斷開連接或者正在重新連接。
正在查詢的分片正在恢復中,因此不可用。
磁盤損壞。
解決方案
結合監控和日志判斷集群狀態是否健康。例如磁盤空間是否充足、索引和集群settings是否有設置一些參數導致無法分片等。如果出現節點失聯或者無法分配分片的情況,需要先解決這些問題,具體操作如下:
查看未分配的分片。
GET /_cluster/allocation/explain
說明如果集群中沒有未分配的分片,則返回error。
重新分配失敗的分片。
POST /_cluster/reroute?retry_failed=true
主日志中出現SSL/TSL相關報錯如何處理?
報錯原因
如果主日志中出現如下圖報錯,表示SSL連接中傳入了明文流量。這通常發生在未使用加密通信的節點嘗試連接到使用加密通信的節點時。
解決方案
建議您按照以下方式排查:
確認業務使用是否有問題。例如,在不開啟HTTPS的情況下默認只能使用HTTP方式訪問阿里云Elasticsearch集群,如果業務側使用了HTTPS方式訪問就會報錯,此時需要在控制臺開啟HTTPS訪問,具體操作請參見使用HTTPS協議。
查看主日志中打印的遠程IP是否為業務側的訪問IP,建議阿里云Elasticsearch公網訪問白名單根據業務需要最小化放開,不要設置0.0.0.0/0。
更多SSL/TSL的相關問題,請參見Common SSL/TLS exceptions。
xpack-sql查詢報錯:No keyword/multi-field defined exact matches for [KeywordField]
報錯原因
xpack-sql的LIKE操作使用了text類型的字段。
解決方案
xpack-sql的LIKE操作僅支持對keyword類型的字段做精確過濾,不支持text字段類型,請將字段類型改成keyword類型,詳情請參見Unable to run SQL query on multi fields using Elastic Search v. 7.3和SQL and multi-fields。
數據備份,執行PUT _snapshot/my_backup報錯:path is not accessiable on master node
報錯原因
在進行數據備份時,使用的OSS Bucket是歸檔存儲類型的,讀文件前需要解凍,導致了該報錯。
解決方案
目前阿里云Elasticsearch不支持將數據備份至歸檔存儲類型的OSS Bucket中,請使用標準存儲類型的Bucket,且Bucket的地域與Elasticsearch實例的地域保持一致,詳細信息請參見手動備份與恢復。
進入Kibana時報錯:kibana did not load properly
報錯原因
當Elasticsearch集群各數據節點磁盤使用率超過95%后,會觸發Elasticsearch自動保護機制,自動保護機制會對Elasticsearch集群中的每個索引強制設置read_only_allow_delete屬性,此時索引將無法寫入數據,只能讀取和刪除對應索引。
解決方案
參見集群磁盤使用率過高和read_only問題的排查與處理方法,修復磁盤使用率過高的問題。
執行以下命令,將集群中所有索引的index.blocks.read_only_allow_delete屬性設置為null,使集群中不再存在read_only狀態的索引。
PUT _settings { "index.blocks.read_only_allow_delete": null }
使用aliyun-qos插件報錯:unsupported_operation_execption
報錯說明
使用aliyun-qos插件,通過apack.qos.ratelimit.enabled開啟限流功能后,通過命令配置限流器時,報錯:
{
"error": {
"root_cause": [
{
"type": "unsupported_operation_exception",
"reason": "unsupported_operation_exception: only define search or bulk action for limit"
}
],
"type": "unsupported_operation_exception",
"reason": "unsupported_operation_exception: only define search or bulk action for limit"
},
"status": 500
}
報錯原因
插件沒有升級至最新版本。
解決方案
通過GET /_cat/plugins?v
命令查看插件版本。7.10版本Elasticsearch實例的插件最新版本為7.10.0_ali1.6.0.2,其他版本為<實例版本>-rc4。如果插件版本不是最新版本,您可通過以下方式處理:
7.10版本Elasticsearch實例:在控制臺將內核升級到1.6.0版本,具體操作請參見升級版本。
非7.10版本Elasticsearch實例:提交工單聯系阿里云Elasticsearch技術工程師升級插件版本。升級后,需要您手動重啟Elasticsearch實例生效。
使用aliyun-qos插件時,如果版本低于rc4,會出現
unsupported_operation_exception
的報錯。當前僅支持升級6.7.0及以上版本的Elasticsearch實例中的aliyun-qos插件,低于6.7.0版本的Elasticsearch實例需要先將實例版本升級到6.7.0及以上,再升級插件版本。
使用Transport訪問Elasticsearch的9300端口,報錯:NoNodeAvailableException
報錯說明
使用5.5或5.6版本的Transport Client訪問阿里云Elasticsearch的9300端口,偶爾會出現NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{HVdK7Cff****\_P0c9n****}{es-cn-v1qqweee****.elasticsearch.aliyuncs.com}{172.17.XX.XX:9300}]],但是用戶并沒有172.17.XX.XX這個節點。
解決方案
建議您使用5.3.3版本的Transport Client來訪問Elasticsearch集群。更多信息,請參見Transport Client(5.x)。
7.4版本主日志報錯:Unclosed object or array found或ArrayIndexOutOfBoundsException
報錯原因
此報錯是開源Elasticsearch 7.4版本的bug導致的,不會影響業務的進行。
解決方案
此問題已經在高版本中解決,阿里云Elasticsearch的7.4版本也已經停止售賣。如果出現此類問題,建議您退訂后重新按需購買高版本的集群。退訂前如果需要遷移您當前實例上的數據,請參見遷移方案選取指南選擇對應的遷移方案,確保您實例上現有的數據不會丟失。
使用aliyun-knn插件的余弦向量報錯:No field found for [metaData] in mapping with types
建議您按照以下方式排查:
檢查Elasticsearch集群版本是否符合要求。
Elasticsearch 6.7版本的內核要求1.2及以上,Elasticsearch 7.10版本的內核要求1.4及以上,才能使用aliyun-knn插件。更多版本要求請參見使用向量檢索插件(aliyun-knn)。
檢查查詢中是否存在script向量檢索。script向量檢索僅支持在script_score方式下使用。
檢查您設置的字段是否符合查詢。例如,索引字段是嵌套字段,但查詢時使用的是非嵌套字段類型。
使用ES的API密鑰進行認證時報錯:API keys not enabled in Elasticsearch
報錯原因
Elasticsearch的配置中沒有啟用API密鑰功能。
解決方案
開啟HTTPS。具體操作,請參見使用HTTPS協議。