我在集群中的一些彈性搜索索引有問題:
我有 5 個常規分片作為示例 index logs-2021.08,所以當我運行_cat/shards彈性 API 時,我得到了很好的結果(示例):
logs-2021.08 2 r STARTED 25008173 11.9gb 0.0.0.0 instance-0000000128
logs-2021.08 2 p STARTED 25008173 11.8gb 0.0.0.0 instance-0000000119
logs-2021.08 4 p STARTED 25012332 11.8gb 0.0.0.0 instance-0000000129
logs-2021.08 4 r STARTED 25012332 11.9gb 0.0.0.0 instance-0000000119
logs-2021.08 1 p STARTED 25003649 11.8gb 0.0.0.0 instance-0000000121
logs-2021.08 1 r STARTED 25003649 11.8gb 0.0.0.0 instance-0000000115
logs-2021.08 3 p STARTED 25006085 11.8gb 0.0.0.0 instance-0000000121
logs-2021.08 3 r STARTED 25006085 11.8gb 0.0.0.0 instance-0000000135
logs-2021.08 0 p STARTED 25007160 11.9gb 0.0.0.0 instance-0000000128
logs-2021.08 0 r STARTED 25007160 11.9gb 0.0.0.0 instance-0000000118
問題是我也在 cat API 的結果中得到了這些:
partial-logs-2021.08 2 p UNASSIGNED
partial-logs-2021.08 4 p UNASSIGNED
partial-logs-2021.08 1 p UNASSIGNED
partial-logs-2021.08 3 p UNASSIGNED
partial-logs-2021.08 0 p UNASSIGNED
我找不到問題是什么或為什么我有這些部分索引,但集群似乎不健康,因為這些未分配的分片。
有沒有辦法從根上解決這些問題(而不是明顯的洗掉它們)?
uj5u.com熱心網友回復:
簡單
重試 Elasticsearch 分片分配由于太多后續分配失敗而被阻止。
curl -X POST http://127.0.0.1:9200/_cluster/reroute?retry_failed=true
但了解背后的原因和分配 API
Elasticsearch 分配 API,在放棄并保留未分配的分片之前,cluster將嘗試最多index.allocation.max_retries連續分配分片(默認為 5 次)。這種情況可能是由于嘗試最多 5 次造成的,我們可以增加此次數以再次嘗試分配初始化,但問題可能會重復。
curl --silent --request PUT --header 'Content-Type: application/json' 127.0.0.1:9200/my_index_name/_settings?pretty=true --data-ascii '{
"index": {
"allocation": {
"max_retries": 15
}
}
}'
但這可能會因為不同的原因再次失敗,所以找出原因,用集群分配。可能的問題可能是
- 由于硬碟空間導致的水印問題
- 索引錯誤。當您將索引從一個檔案夾移動到另一個檔案夾或從一臺服務器移動到另一臺服務器時,就會發生這種情況。
- 結構性問題,例如具有參考并非所有節點上都存在的停用詞檔案的分析器。
獲取未分配的分片
curl -s "http://127.0.0.1:9200/_cat/shards?v" | awk 'NR==1 {print}; $4 == "UNASSIGNED" {print}'
要了解原因,請運行以下命令
GET /_cluster/allocation/explain
# OR
curl -XGET "location:9200/_cluster/allocation/explain"
# OR
curl http://127.0.0.1:9200/_cluster/state | jq '.routing_table.indices | .[].shards[][] | select(.state=="UNASSIGNED") | {index: .index, shard: .shard, primary: .primary, unassigned_info: .unassigned_info}'
一旦問題得到糾正,就可以通過使用 ?retry_failed URI 查詢引數呼叫重新路由 API 來手動重試分配,這將嘗試對這些分片進行一次重試。使用以下 API 重新啟動分配 API 的命令。
curl -X POST http://127.0.0.1:9200/_cluster/reroute?retry_failed=true
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345195.html
