elasticsearch 集羣分片分配,你須要知道的一些知識點

前言

前面咱們學習過,master節點的職責有:node

  • 負責決定當前某個分片要分配到哪一個節點上面。
  • 在節點間移動分片,保證集羣的平衡。等等。
分片分配-基於集羣配置

分片分配是指將分片分配到某個主機節點上的一個過程。觸發的場景有:segmentfault

  • 初始化恢復
  • 分片副本分配
  • 集羣平衡
  • 集羣節點加入或者移除

分片的分配,對整個es集羣有重要的影響,因此,如何熟悉控制它,是一個很重要的知識點。es集羣提供設置集羣容許分配那種類型的分片,包括全部分片(默認)、主分片、新索引的主分片、禁止全部索引分配分片。這幾個選項。網絡

可能你會以爲奇怪,禁止分片分配,那還怎麼玩?運維

存在便是合理的,這個屬性在運維集羣(滾動重啓、須要維護集羣,推遲分片分配)的時候用處很大,好比,在手動關閉掉一個節點後,集羣會在固定的一個時間窗口後發現節點的丟失,而且開始數據平衡,這個操做在多個數據量較大的分片上平衡是至關的耗時的,因此在這種狀況下,能夠在集羣級別上,先禁止索引分配分片,
維護完畢後,再設置回來。elasticsearch

小結:在你知道節點會從故障中很快恢復回來的時候,可使用它來推遲副本分片的移動。分佈式

GIFV5.gif

index.unassigned.node_left.delayed_timeout學習

會讓你的集羣在觸發從新分配前有時間去檢測節點是否會從新加入。spa

  • 延遲分配不會阻止副本被提拔爲主分片。集羣會立馬進行必要的提拔來讓集羣回到 yellow狀態。缺失副本的重建是這個配置惟一能控制延遲的對象。

也就是說,這個delayed_timeout只對副本的重建起做用。對象

  • 圖中並無提到的一點是,若是宕機的節點是Master節點,則集羣會多一步【選主】動做,由於集羣要想正常工做,必須得從Master候選節點(配置node.master: true)中選拔一個主節點出來。
阻止一個主機上運行多個實例

在CPU和內存資源富餘的狀況下,可能會使用一臺主機啓動多個實例的狀況,這在必定程度上能充分利用資源,但同時也帶來了風險。以一個主機啓動兩個實例爲例。
fileblog

由圖可知,192.161.11.12這臺主機上部署了兩個es實例,node-1和node-2。

假如此索引有1個副本,圖上分片1和它的副本分別分片到了node-一、node-2。

在這種狀況下,可用性是比較低的,若是這臺主機宕機,
那麼此索引的分片1數據就會所有丟失。

如何避免這種狀況呢?固然就是避免在一主機上啓動多個實例,
或者經過設置:cluster.routing.allocation.same_shard.host:true。
來強制阻止這種狀況發生。

分片分配-基於磁盤感知

elasticsearch除了從集羣總體層面考慮分片分配,同時也會考慮到可用磁盤空間等環境因素。

  • elasticsearch在向某個主機的節點上分配分片時,會考慮其可用的磁盤空間。

disk.watermark.low表明着磁盤使用率的低水位線,默認85%,這個配置意味着,es不會將分片分配給超過這個值的節點,此設置對新建立的索引的主分片沒有影響,可是會阻止分配它們的副本。

同理存在高水位線配置disk.watermark.high. 默認爲90% ,這意味着Elasticsearch將嘗試將分片從磁盤使用率超過90%的節點上分離出來,這個配置一樣影響集羣的平衡。

防止節點用完磁盤空間的最後手段的配置,disk.watermark.flood_stage,默認值95%,採用強制只讀的方式來保護集羣和主機。

機架感知

機架感知,讓elasticsearch在分配分片時,考慮物理硬件配置。
感知物理硬件配置的好處是:當硬件出現問題時,好比物理機、或者同一機架,某一個機房出問題時,依靠物理感知,尋求一個最優的部署配置,最大程度的保證集羣可用性。

不過單純部署是沒法讓其得知對應的物理部署的,因此咱們須要指定相關配置的值,來告訴es。具體配置方式有兩種:

  • /bin/elasticsearch -Enode.attr.rack_id=rack_one` 啓動時指定。
  • cluster.routing.allocation.awareness.attributes: rack_id 配置文件中指定。
  • es能夠考慮將不一樣的節點配置到不一樣的物理機器上去。
  • 不一樣的節點分配到不一樣的物理機架。
  • 不一樣的節點分配到不一樣的網絡區域中去。
CAP理論

機架感知須要考慮的狀況(權衡可靠性、可用性、帶寬消耗等各類狀況)。
elasticsearch做爲分佈式的組件,CAP特性中的P(分區容錯性)必需要考慮。
用通俗的語言來說一下就是:咱們知道,正常狀況下es集羣的各個節點應該都是互相連通的。
然而不管是環境仍是人爲因素影響,均可能形成節點的故障,此時網絡可能會被分爲幾塊區域。若是一個數據只在一個節點上保存,那麼沒法連通後,就再也訪問不到這個數據了,這時咱們說它是分區沒法容忍的。

file

分片分配過濾

容許某些節點或某些節點組從分配中排除,以便將其停用。
這裏的應用場景是:咱們計劃對節點進行停機下線的時候,能夠避免新建的索引分片落到這個節點上。

總結
  • elasticsearch的最小工做單元是分片,因此掌握分片在節點上的分配方式很重要,經過梳理,咱們清楚了節點宕機後恢復對集羣的影響。
  • 基於磁盤感知的分片分配方式。
  • 基於機架感知的分片分配方式。
  • CAP理論中的p(分區容錯性)簡要理解。
  • 排除節點,不分配分片,靈活下線節點。
歡迎來公衆號【俠夢的開發筆記】 一塊兒交流進步
相關文章
相關標籤/搜索