<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Eleasticsearch中recovery指的就是一個索引的分片分配到另外一個節點的過程;一般在快照恢復、索引副本數變更、節點故障、節點重啟時發生。由於master儲存整個叢集的狀態資訊,因此可以判斷出哪些shard需要做再分配,以及分配到哪個結點,例如:
如果某個shard主分片在,副分片所在結點掛了,那麼選擇另外一個可用結點,將副分片分配(allocate)上去,然後進行主從分片的複製。
如果某個shard的主分片所在結點掛了,副分片還在,那麼將副分片升級為主分片,然後做主從分片複製。
如果某個shard的主副分片所在結點都掛了,則暫時無法恢復,等待持有相關資料的結點重新加入叢集後,從該結點上恢復主分片,再選擇另外的結點複製副分片。
正常情況下,我們可以通過ES的health的API介面,檢視整個叢集的健康狀態和整個叢集資料的完整性:
狀態及含義如下:
green
: 所有的shard主副分片都是正常的;
yellow
: 所有shard的主分片都完好,部分副分片沒有或者不完整,資料完整性依然完好;
red
: 某些shard的主副分片都沒有了,對應的索引資料不完整。
recovery過程要消耗額外的資源,CPU、記憶體、結點之間的網路頻寬等等。 這些額外的資源消耗,有可能會導致叢集的服務效能下降,或者一部分功能暫時不可用。瞭解一些recovery的過程和相關的設定引數,對於減小recovery帶來的資源消耗,加快叢集恢復過程都是很有幫助的。
ES叢集可能會有整體重啟的情況,比如需要升級硬體、升級作業系統或者升級ES大版本。重啟所有結點可能帶來的一個問題: 某些結點可能先於其他結點加入叢集, 先加入叢集的結點可能已經可以選舉好master,並立即啟動了recovery的過程,由於這個時候整個叢集資料還不完整,master會指示一些結點之間相互開始複製資料。 那些晚到的結點,一旦發現原生的資料已經被複制到其他結點,則直接刪除掉本地“失效”的資料。 當整個叢集恢復完畢後,資料分佈不均衡,顯然是不均衡的,master會觸發rebalance過程,將資料在節點之間挪動。整個過程無謂消耗了大量的網路流量;合理設定recovery相關引數則可以防範這種問題的發生。
gateway.expected_nodes gateway.expected_master_nodes gateway.expected_data_nodes
以上三個引數是說叢集裡一旦有多少個節點就立即開始recovery過程。 不同之處在於,第一個引數指的是master或者data都算在內,而後面兩個引數則分指master和data node。
在期待的節點數條件滿足之前, recovery過程會等待gateway.recover_after_time (預設5分鐘) 這麼長時間,一旦等待超時,則會根據以下條件判斷是否啟動:
gateway.expected_nodes gateway.expected_master_nodes gateway.expected_data_nodes
舉例來說,對於一個有10個data node的叢集,如果有以下的設定:
gateway.expected_data_nodes: 10 gateway.recover_after_time: 5m gateway.recover_after_data_nodes: 8
那麼叢集5分鐘以內10個data node都加入了,或者5分鐘以後8個以上的data node加入了,都會立即啟動recovery過程。
如果不是full restart,而是重啟單個data node,仍然會造成資料在不同結點之間來回複製。為避免這個問題,可以在重啟之前,先關閉叢集的shard allocation:
然後在節點重啟完成加入叢集後,再重新開啟:
這樣在節點重啟完成後,儘量多的從本地直接恢復資料。
但是在ES1.6版本之前,即使做了以上措施,仍然會發現有大量主副本之間的資料拷貝。從表面去看,這點很讓人不能理解。
主副本資料完全一致,ES應該直接從副本本地恢復資料就好了,為什麼要重新從主片再複製一遍呢? 原因在於recovery是簡單對比主副本的segment file來判斷哪些資料一致可以本地恢復,哪些不一致需要遠端拷貝的。
而不同節點的segment merge是完全獨立執行的,可能導致主副本merge的深度不完全一樣,從而造成即使檔案集完全一樣,產生的segment file卻不完全一樣。
為了解決這個問題,ES1.6版本以後加入了synced flush的新特性。 對於5分鐘沒有更新過的shard,會自動synced flush一下,實質是為對應的shard加了一個synced flush ID。這樣當重啟節點的時候,先對比一下shard的synced flush ID,就可以知道兩個shard是否完全相同,避免了不必要的segment file拷貝,極大加快了冷索引的恢復速度。
需要注意的是synced flush只對冷索引有效,對於熱索引(5分鐘內有更新的索引)沒有作用。 如果重啟的結點包含有熱索引,那麼還是免不了大量的檔案拷貝
。因此在重啟一個結點之前,最好按照以下步驟執行,recovery幾乎可以瞬間完成:
對於冷索引,由於資料不再更新,利用synced flush特性,可以快速直接從本地恢復資料。 而對於熱索引,特別是shard很大的熱索引,;除了synced flush派不上用場需要大量跨節點拷貝segment file以外,translog recovery是導致慢的更重要的原因。
從主片恢復資料到副片需要經歷3個階段:
可見,在recovery完成之前,translog是不能夠被清除掉的(禁用掉正常運作期間後臺的flush操作)。
如果shard比較大,第一階段耗時很長,會導致此階段產生的translog很大。重放translog比起簡單的檔案拷貝耗時要長得多,因此第二階段的translog耗時也會顯著增加。
等到第三階段,需要重放的translog可能會比第二階段還要多。 而第三階段是會阻塞新索引寫入的,在對寫入實時性要求很高的場合,就會非常影響使用者體驗。
因此,要加快大的熱索引恢復速度,最好的方式是遵從上一節提到的方法: 暫停新資料寫入,手動sync flush,等待資料恢復完成後,重新開啟資料寫入,這樣可以將資料延遲影響可以降到最低。
萬一遇到Recovery慢,想知道進度怎麼辦呢? CAT Recovery API可以顯示詳細的recovery各個階段的狀態。 這個API怎麼用就不在這裡贅述了,參考: CAT Recovery。
還有其他一些專家級的設定(參見: recovery)可以影響recovery的速度,但提升速度的代價是更多的資源消耗,因此在生產叢集上調整這些引數需要結合實際情況謹慎調整,一旦影響應用要立即調整回來。
對於搜尋並行量要求高,延遲要求低的場合,預設設定一般就不要去動了。
對於紀錄檔實時分析類對於搜尋延遲要求不高,但對於資料寫入延遲期望比較低的場合,可以適當調大indices.recovery.max_bytes_per_sec,提升recovery速度,減少資料寫入被阻塞的時長。
最後要說的一點是ES的版本迭代很快,對於Recovery的機制也在不斷的優化中。 其中有一些版本甚至引入了一些bug,比如在ES1.4.x有嚴重的translog recovery bug,導致大的索引trans log recovery幾乎無法完成 。
因此實際使用中如果遇到問題,最好在Github的issue list裡搜尋一下,看是否使用的版本有其他人反映同樣的問題。
以上就是Elasticsearch Recovery索引分片分配詳解的詳細內容,更多關於Elasticsearch Recovery索引分片分配的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45