Elasticsearch負載均衡策略發生死鎖解決方案

一、問題描述與解決方案

1、問題產生的背景

es集羣版本:elasticsearch-5.5.3
HEAD插件索引集羣顯示(red/yellow)。四個節點的集羣,索引有大量寫入,同時有大量刪除操作,刪除操作是在單個index(mapping分片數量爲4)中執行delete_by_query接口後臺執行task的方式實現。集羣在負載均衡的時候有線程死鎖了,導致分片未分配成功SHARD UNASSINGED。
報錯信息:
在這裏插入圖片描述該報錯信息源碼位置

reached the limit of outgoing shard recoveries [%d] on the node [%s] which holds the primary,cluser setting [cluster.routing.allocation.node_concurrent_outgoing_recoveries=2]

2、解決方案

在集羣設置cluster.routing.allocation.node_concurrent_recoveries這個參數,大於最大分片數量。此參數默認值爲2。
在這裏插入圖片描述

二、集羣分片分配時的相關設置(譯文)

原文鏈接:Cluster level shard allocation

集羣分片分配

分片分配是將分片分配給節點的過程。這可能發生在初始恢復、副本分配、重新平衡期間(分片均衡分配),或者在添加或刪除節點時。

分片分配設置

下面的動態設置可以控制分片的分配和恢復:

1.cluster.routing.allocation.enable

爲特定類型的分片啓用或者禁用分配:

  • all-(默認設置)允許所有類型的分片分配。
  • primaries-僅僅允許主分片分配
  • new_primaries-僅允許新索引的主分片進行分片分配。
  • none-任何索引都不允許任何類型的分片分配。
  • 此設置不會影響重啓節點時本地主分片的恢復。如果重新啓動的節點的分配id與集羣狀態下的一個活動分配id匹配,則該節點擁有未分配的主碎片的副本,該節點將立即恢復該主節點。

2.cluster.routing.allocation.node_concurrent_incoming_recoveries

允許在一個節點上發生多少個併發的傳入分片恢復。傳入恢復是在節點上分配目標分片(很可能是複製,除非正在重新定位碎片)的恢復。默認爲2。

3.cluster.routing.allocation.node_concurrent_outgoing_recoveries

允許在一個節點上執行多少併發傳出分片恢復。傳出恢復是在節點上分配源分片(很可能是主分片,除非正在重新定位分片)的恢復。默認爲2。

4.cluster.routing.allocation.node_concurrent_recoveries

快捷設置:cluster.routing.allocation.node_concurrent_incoming_recoveries 和 cluster.routing.allocation.node_concurrent_outgoing_recoveries.

5.cluster.routing.allocation.node_initial_primaries_recoveries

雖然副本的恢復是通過網絡進行的,但是在節點重新啓動之後,未分配的主節點的恢復使用本地磁盤中的數據。這些應該是快速的,以便更多的初始主恢復可以在同一節點上並行進行。默認爲4。

6.cluster.routing.allocation.same_shard.host

允許執行檢查,以防止在單個主機上分配同一分片的多個實例(基於主機名和主機地址)。默認值爲false,這意味着在默認情況下不執行任何檢查。此設置僅適用於在同一臺計算機上啓動多個節點的情況。

分片重新平衡分配設置

以下動態設置可用於控制集羣中分片的重新平衡:

1.cluster.routing.rebalance.enable

爲特定類型的碎片啓用或禁用重新平衡:

  • all-(默認設置)允許重新平衡所有節點。
  • primaries-僅允許主分片重新平衡。
  • -replicas-僅允許副分片重新平衡。
  • none-任何索引都不允許任何類型的分片重新平衡分配。

2.cluster.routing.allocation.allow_rebalance

指定什麼時候允許碎片再平衡:

  • always-總是允許。
  • indices_primaries_active-只有當集羣中的所有主分片都被分配時。
  • indices_all_active(默認設置)只有當集羣中所有主分片和副分片都被分配時。

3.cluster.routing.allocation.cluster_concurrent_rebalance
允許控制集羣範圍內允許多少併發分片重新平衡。默認爲2。注意,此設置僅控制由於集羣中的不平衡而導致的併發碎片重定位的數量。此設置不限制由於分配篩選或強制感知而導致的分片重定位。

啓發式分片平衡分配

當不允許重新平衡操作時,任何節點的權值與任何其他節點的權值之間的距離都超過balance.threshold時,集羣就處於平衡狀態。

1.cluster.routing.allocation.balance.shard

定義在節點上分片分配總數的權重因子(浮點數)。默認值0.45f。這增加了均衡集羣中所有節點上分片配置數量相等的趨勢。

2.cluster.routing.allocation.balance.index

爲分配給特定節點(浮點數)的每個索引的分片數定義權重因子。默認0.55f。這增加了使集羣中所有節點的每個索引的碎片數量相等的趨勢。

3.cluster.routing.allocation.balance.threshold

應該執行的操作的最小優化值(非負浮點數)。默認爲1.0度。提高這個值將導致集羣在優化碎片平衡方面的積極性降低。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章