ElasticSearch 分散式及容錯機制

1 ElasticSearch分散式基礎

1.1 ES分散式機制

  • 分散式機制:Elasticsearch是一套分散式的系統,分散式是為了應對大數據量。它的特性就是對複雜的分散式機制隱藏掉。
  • 分片機制:數據存儲到哪個分片,副本數據寫入另外分片。
  • 集群發現機制:新啟動es實例,會自動加入集群。
  • shard負載均衡:大量數據寫入及查詢,es會將數據平均分配。舉例,假設現在有3個節點,總共有25個shard要分配到3個節點上去,es會自動進行均勻分配,以保持每個節點的均衡的讀寫負載請求。
  • shard副本:新增副本數,分片重分配

1.2 垂直與水平擴容

  垂直擴容:使用更加強大的伺服器替代老伺服器。但單機存儲及運算能力有上線。且成本直線上升。如10台1T的伺服器1萬,單個10T伺服器可能20萬。

  水平擴容:採購更多伺服器,加入集群。對於ES來說,一般採用水平擴容的方式。

1.3 rebalance

  當新增或減少es實例時,或者新增加數據或者刪除數據時,就會導致某些伺服器負載過重或者過輕。es集群就會將數據重新分配,保持一個相對均衡的狀態。

1.4 master節點

(1)管理es集群的元數據

  • 創建刪除節點
  • 創建刪除索引

(2)默認情況下,es會自動選擇一台機器作為master,因為任何一台機器都可能被選擇為master節點,所以單點故障的情況可以忽略不計。

1.5 節點對等

  • 節點對等,每個節點都能接收所有的請求
  • 自動請求路由
  • 響應收集

二、分片shard、副本replica機制

2.1 分片shard

在ES中,索引會被切分成n個分片,每個分片是獨立的lucene索引,可以完成搜索分析存儲等工作。

分片的好處:

  • 如果一個索引數據量很大,會造成硬體硬碟和搜索速度的瓶頸。如果分成多個分片,分片可以分攤壓力。
  • 分片允許用戶進行水平的擴展和拆分
  • 分片允許分散式的操作,可以提高搜索以及其他操作的效率

副本的好處:

  • 當一個分片失敗或者下線時,備份的分片可以代替工作,提高了高可用性。
  • 備份的分片也可以執行搜索操作,分攤了搜索的壓力。

2.2 shard&replica機制

  • 每個index包含一個或多個shard
  • 每個shard都是一個最小工作單元,承載部分數據,lucene實例,完整的建立索引和處理請求的能力
  • 增減節點時,shard會自動在nodes中負載均衡
  • primary shard和replica shard,每個document肯定只存在於某一個primary shard以及其對應的replica shard中,不可能存在於多個primary shard
  • replica shard是primary shard的副本,負責容錯,以及承擔讀請求負載
  • primary shard的數量在創建索引的時候就固定了,replica shard的數量可以隨時修改
  • primary shard的默認數量是1,replica默認是1,默認共有2個shard,1個primary shard,1個replica shard。注意:es7以前primary shard的默認數量是5,replica默認是1,默認有10個shard,5個primary shard,5個replica shard
  • primary shard不能和自己的replica shard放在同一個節點上(否則節點宕機,primary shard和副本都丟失,起不到容錯的作用),但是可以和其他primary shard的replica shard放在同一個節點上

  

三、創建index

3.1 單node環境下

(1)單node環境下,創建一個index,有3個primary shard,3個replica shard
(2)集群status是yellow
(3)這個時候,只會將3個primary shard分配到僅有的一個node上去,另外3個replica shard是無法分配的
(4)集群可以正常工作,但是一旦出現節點宕機,數據全部丟失,而且集群不可用,無法承接任何請求

PUT /test_index1
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

3.2 兩個node環境下

(1)replica shard分配:3個primary shard,1node,3個replica shard,1 node
(2)primary —> replica同步
(3)讀請求:primary/replica

  

四、橫向擴容

假如說存在一個book索引,shard3 replica1

  • 分片自動負載均衡,分片向空閑機器轉移。
  • 每個節點存儲更少分片,系統資源給與每個分片的資源更多,整體集群性能提高。
  • 擴容極限:節點數大於整體分片數,則必有空閑機器。
  • 超出擴容極限時,可以增加副本數,如設置副本數為2,總共3*3=9個分片。9台機器同時運行,存儲和搜索性能更強。容錯性更好。
  • 容錯性:只要一個索引的所有主分片在,集群就就可以運行。

  

五、es容錯機制

以3分片,2副本數,3節點為例介紹。

  • master node宕機,自動master選舉,集群為red
  • replica容錯:新master將replica提升為primary shard,yellow
  • 重啟宕機node,master copy replica到該node,使用原有的shard並同步宕機後的修改,green

  

以上圖為例:

在node1宕機的情況下,那麼P0 shard就會消失,所有的主分片不是全active,那麼集群的狀態是red。

  • 容錯第一步,重新選舉master節點。承擔master相關功能。
  • 容錯第二步,新master將丟失的P0 shard(主分片)對應的R0 replica(副本分片)提升為主分片,現在的集群狀態為yellow並且少一個副本分片,但是現在集群已經可以恢復使用了。
  • 容錯第三步,重啟故障node,新master會感知到新節點加入,將缺失的副本分片copy一份到新的node上面,copy的是被提升為主分片的分片。現在集群已經完全恢復,狀態為green。