當您在使用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是Archive Storage類型的,讀檔案前需要解凍,導致了該報錯。
解決方案
目前Elasticsearch不支援將資料備份至Archive Storage類型的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協議。