1. 程式人生 > 程式設計 >探索ElasticSearch-ElasticSearch叢集的工作原理(七)

探索ElasticSearch-ElasticSearch叢集的工作原理(七)

前言

ElasticSearch為我們提供了開箱即用的特性。我們不用去關心底層的細節也能夠正常使用ElasticSearch來為我們服務。但是,如果要深入理解ElasticSearch僅僅在淺層次的使用層面肯定是遠遠不夠的。如果,你不僅僅滿足於簡單使用ElasticSearch,那麼推薦你繼續往下面閱讀。

通過本文,你將會解答下面這幾個問題。

  • 新的ElasticSearch是如何加入叢集的?
  • ElasticSearch叢集是如何判斷節點是否存活的?
  • 檔案是如何分發到某一個分片上面的?

ElasticSearch叢集工作原理

節點的發現

當網路中已經存在了一個ElaticSearch的叢集時,啟動了一個新的ElasticSearch

的節點,那麼此節點會自動加入到該ElasticSearch的叢集中。那麼,到底這個節點是怎麼加入到叢集的呢?

舉個例子。現在網路中存在一個master節點和一個data節點的叢集,那麼當網路中再次啟動一個ElasticSearch的節點時,會發生什麼呢?如下圖所示。

新啟動的ElasticSearch會進行一個多播的操作。該節點會向所有在網路中的機器都傳送一個ping的請求。可能大部分情況下,該機器都不是ElasticSearch的機器,此時沒有相應返回。但是,當傳送請求到ElasticSearchmaster節點上面時,會返回相關的響應。一但判斷新的ElasticSearch的叢集名稱是相同的時候,master

節點會記錄該節點所在的機器,執行相關的資料轉移。之後該節點將成為了ElasticSearch叢集的一個新的節點。

節點的探活

上面探討的是新的ElasticSearch節點加入時,叢集工作的原理。那麼如果正常工作的叢集中,有節點出現宕機行為呢?ElasticSearch的叢集是怎麼感知到有節點宕機,剔除損壞的節點,而且進行資料的轉移的呢?

還是上面這個例子,這個時候已經有三個ElasticSearch的節點了。如下圖所示。

因為要保證叢集的正常工作,所以master節點會定期進行探活工作。具體為每隔一段時間就去ping其他已知的ElaticSearch的節點。

如果這個時候,有一個節點宕機了,那麼master

節點將沒有辦法收到響應。此時,master節點將會將原來的副本分片提升為主分片。將整個叢集設定為Yellow狀態。表示已經有部分資料丟失,但是當前叢集還是存在全部的資料,繼續提供搜尋服務,但是不保證叢集的效能等指標。

檔案的分發

那麼當索引一個新的檔案時,ElasticSearch是怎麼將該檔案分發的呢?

還是上面那個例子。叢集中有三個節點,而且一個索引的三個分片均勻分佈在三個節點上面。此時要索引一個id為2的新檔案,那麼會被路由分發到那個節點上面呢?

其實檔案的分佈遵循這下面這個公式。

shard_num = hash(_routing) % num_primary_shards
複製程式碼

那我們假設上面新檔案進行hash之後,仍然是2,那麼最後會落到shard為2的分片上面,如下圖所示。

小結

節點的發現上面討論是預設的情況下,其實ElasticSearch中可以配置很多其他的發現策略。檔案的分發也可以通過_routing欄位來制定使用哪一個值來作為hash函式的入參。這些,下次講解下。

關於寫作

以後這裡每天都會寫一篇文章,題材不限,內容不限,字數不限。儘量把自己每天的思考都放入其中。

如果這篇文章給你帶來了一些幫助,可以動動手指點個贊,順便關注一波就更好了。

如果上面都沒有,那麼寫下讀完之後最想說的話?有效的反饋和你的鼓勵是對我最大的幫助。

另外打算把部落格給重新撿起來了。歡迎大家來訪問吃西瓜

我是shane。今天是2019年9月8日。百天寫作計劃的第四十六天,46/100。