前面咱們學習過,master節點的職責有:node
分片分配是指將分片分配到某個主機節點上的一個過程。觸發的場景有:segmentfault
分片的分配,對整個es集羣有重要的影響,因此,如何熟悉控制它,是一個很重要的知識點。es集羣提供設置集羣容許分配那種類型的分片,包括全部分片(默認)、主分片、新索引的主分片、禁止全部索引分配分片。這幾個選項。網絡
可能你會以爲奇怪,禁止分片分配,那還怎麼玩?運維
存在便是合理的,這個屬性在運維集羣(滾動重啓、須要維護集羣,推遲分片分配)的時候用處很大,好比,在手動關閉掉一個節點後,集羣會在固定的一個時間窗口後發現節點的丟失,而且開始數據平衡,這個操做在多個數據量較大的分片上平衡是至關的耗時的,因此在這種狀況下,能夠在集羣級別上,先禁止索引分配分片,
維護完畢後,再設置回來。elasticsearch
小結:在你知道節點會從故障中很快恢復回來的時候,可使用它來推遲副本分片的移動。分佈式
index.unassigned.node_left.delayed_timeout學習
會讓你的集羣在觸發從新分配前有時間去檢測節點是否會從新加入。spa
也就是說,這個delayed_timeout只對副本的重建起做用。對象
在CPU和內存資源富餘的狀況下,可能會使用一臺主機啓動多個實例的狀況,這在必定程度上能充分利用資源,但同時也帶來了風險。以一個主機啓動兩個實例爲例。
blog
由圖可知,192.161.11.12這臺主機上部署了兩個es實例,node-1和node-2。
假如此索引有1個副本,圖上分片1和它的副本分別分片到了node-一、node-2。
在這種狀況下,可用性是比較低的,若是這臺主機宕機,
那麼此索引的分片1數據就會所有丟失。
如何避免這種狀況呢?固然就是避免在一主機上啓動多個實例,
或者經過設置:cluster.routing.allocation.same_shard.host:true。
來強制阻止這種狀況發生。
elasticsearch除了從集羣總體層面考慮分片分配,同時也會考慮到可用磁盤空間等環境因素。
disk.watermark.low表明着磁盤使用率的低水位線,默認85%,這個配置意味着,es不會將分片分配給超過這個值的節點,此設置對新建立的索引的主分片沒有影響,可是會阻止分配它們的副本。
同理存在高水位線配置disk.watermark.high. 默認爲90% ,這意味着Elasticsearch將嘗試將分片從磁盤使用率超過90%的節點上分離出來,這個配置一樣影響集羣的平衡。
防止節點用完磁盤空間的最後手段的配置,disk.watermark.flood_stage,默認值95%,採用強制只讀的方式來保護集羣和主機。
機架感知,讓elasticsearch在分配分片時,考慮物理硬件配置。
感知物理硬件配置的好處是:當硬件出現問題時,好比物理機、或者同一機架,某一個機房出問題時,依靠物理感知,尋求一個最優的部署配置,最大程度的保證集羣可用性。
不過單純部署是沒法讓其得知對應的物理部署的,因此咱們須要指定相關配置的值,來告訴es。具體配置方式有兩種:
機架感知須要考慮的狀況(權衡可靠性、可用性、帶寬消耗等各類狀況)。
elasticsearch做爲分佈式的組件,CAP特性中的P(分區容錯性)必需要考慮。
用通俗的語言來說一下就是:咱們知道,正常狀況下es集羣的各個節點應該都是互相連通的。
然而不管是環境仍是人爲因素影響,均可能形成節點的故障,此時網絡可能會被分爲幾塊區域。若是一個數據只在一個節點上保存,那麼沒法連通後,就再也訪問不到這個數據了,這時咱們說它是分區沒法容忍的。
容許某些節點或某些節點組從分配中排除,以便將其停用。
這裏的應用場景是:咱們計劃對節點進行停機下線的時候,能夠避免新建的索引分片落到這個節點上。
歡迎來公衆號【俠夢的開發筆記】 一塊兒交流進步