Elasticsearch解決健康狀態異常問題

2021-10-05 06:16:27 字數 3184 閱讀 7964

目錄

1.elasticsearch健康狀態

2. 如何解決健康狀態為黃色?

3. 如何解決健康狀態為紅色?

elasticsearch 集群健康狀態分為三種:

green:最健康得狀態,說明所有的分片包括備份都可用; 這種情況elasticsearch集群所有的主分片和副本分片都已分配, elasticsearch集群是 100% 可用的。

yellowred:部分的分片可用,表明分片有一部分損壞。此時執行查詢部分資料仍然可以查到,遇到這種情況,還是趕快解決比較好; 這種情況elasticsearch集群至少乙個主分片(以及它的全部副本)都在缺失中。這意味著你在缺少資料:搜尋只能返回部分資料,而分配到這個分片上的寫入請求會返回乙個異常。

elasticsearch 集群不健康時的排查思路:

1) 首先確保 es 主節點最先啟動,隨後啟動資料節點;

2) 允許 selinux(非必要),關閉 iptables;

3)  確保資料節點的elasticsearch配置檔案正確;

4)  系統最大開啟檔案描述符數是否夠用;

5)  elasticsearch設定的記憶體是否夠用 ("es_heap_size"記憶體設定 和 "indices.fielddata.cache.size"上限設定);

6)  elasticsearch的索參數量暴增 , 刪除一部分索引(尤其是不需要的索引);

注意:如下是單機單節點部署elasticsearch, 集群狀態可能為yellow, 因為單點部署elasticsearch, 預設的分片副本數目配置為1,而相同的分片不能在乙個節點上,所以就存在副本分片指定不明確的問題,所以顯示為yellow。

可以通過在elasticsearch集群上新增乙個節點來解決問題,如果不想這麼做,可以刪除那些指定不明確的副本分片(當然這不是乙個好辦法)刪除操作如下。

刪除副本分片的辦法:curl -xput "http://localhost:9200/_settings" -d' '

節點數和備份數遵循原則:

節點數和備份數應遵循: n >= r + 1, n為節點數,r為number_of_replicas設定的值

問題描述:單機版elasticsearch,版本6.7.0,使用head檢視發現集群健康值顯示黃色?

黃色表示基本的分片可用,但是備份不可用(或者是沒有備份),檢視es,發現主節點某個分片出現問題,變成unassigned,例如下圖dfy_index在node-1中的分片2會顯示在unassigned那一排,集群狀態為紅色或者黃色

unssigned表示未分配副本分片的問題,在執行settings中刪除副本分片的命令後, 這個問題就解決了。

原因:索引的「number_of_replicas (備份數)」為1,而節點只有1個,所以備份出來的資料沒有節點可分配。

解決辦法:增加節點或者刪除副本把number_of_replicas設定為0,這裡因為是單機,選擇刪除副本。

方法1:刪除副本統一設定

方法2: 修改elasticsearch.yml配置檔案

檔案末增加(冒號之後有空格)

index.number_of_replicas: 0

如果設定單個索引設定

curl -xput 'localhost:9200//_settings' -d ''

現在使用head外掛程式檢視es,集群健康值顯示為綠色:

集群健康值顯示為red,則說明至少乙個主分片分配失敗, 這將導致一些資料以及索引的某些部分不再可用。遇到這種情況,還是趕快解決比較好。

原因:集群中部分節點的主分片未分配。r通常時由於某個索引的住分片為分片unassigned,只要找出這個索引的分片,手工分配即可。

如何解決 unassigned 分片問題?

方法一:刪除索引——如果這個分片資料已經不可用,直接刪除該分片 (即刪除索引)

elasticsearch中沒有直接刪除分片的介面,除非整個節點資料已不再使用,刪除節點。

刪除索引命令:curl -xdelete  索引名

方法二:是否違背節點備份原則 n >= r + 1

公式:集群中節點數量 >= 集群中所有索引的最大副本數量 +1

1) 新增節點處理,即n增大; 

2) 刪除副本分片,即r置為0;

curl -xput 'localhost:9200//_settings' -d ''

方法三:allocate重新分配分片

如果方案二仍然未解決,可以考慮重新分配分片。可能的原因:

1) 節點在重新啟動時可能遇到問題。正常情況下,當乙個節點恢復與群集的連線時,它會將有關其分片的資訊**給主節點,然後主節點將這分片從「未分配」轉換為 "已分配/已啟動"。

2) 當由於某種原因 (例如節點的儲存已被損壞) 導致該程序失敗時,分片可能保持未分配狀態。

在這種情況下,必須決定如何繼續: 嘗試讓原始節點恢復並重新加入集群(並且不要強制分配主分片);  或者強制使用reroute api分配分片並重新索引缺少的資料原始資料源或備份。 如果你決定分配未分配的主分片,請確保將"allow_primary":"true"標誌新增到請求中。

curl -xpost ':9200/_cluster/reroute' -d '}]

}'

現在使用head外掛程式檢視es,集群健康值顯示為綠色(如果還不是,請考慮其它原因)。

ElasticSearch 更新後延遲解決方法

在index後有乙個refresh interval預設1秒,在這個時間間隔內search是不可見的。解決辦法有兩種 1,通過ui層解決。比如更新成功後,彈出提示框 2,設定重新整理策略,有以下三種 es版本5.4.3 public static enum refreshpolicy impleme...

無法連線Elasticsearch解決方案

最近還是在弄elk,並且在測試logstash從kafka消費日誌 最後輸出到elasticsearch 測試完畢後,在kibana中,並沒有發現elasticsearch中的資料。後來裝了elasticsearch head外掛程式,想看看我es裡面到底有啥資料,發現在head外掛程式中,顯示cl...

elasticsearch 資料遷移解決方案

儘管可以增加新的型別到索引中,或者增加新的字段到型別中,但是不能新增新的分析器或者對現有的字段做改動。如果你那麼做的話,結果就是那些已經被索引的資料就不正確,搜尋也不能正常工作。對現有資料的這類改變最簡單的辦法就是重新索引 用新的設定建立新的索引並把文件從舊的索引複製到新的索引。字段 source的...