ElasticSearch 分散式及容錯機制
- 2022 年 3 月 13 日
- 筆記
- 【G】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。