Elasticsearch基礎分布式架構
寫在前面的話:讀書破萬卷,編碼如有神
--------------------------------------------------------------------
參考內容:
《Elasticsearch頂尖高手系列-快速入門篇》,中華石杉
--------------------------------------------------------------------
主要內容包括:
- Elasticsearch對復雜分布式機制的透明隱藏特性
- Elasticsearch的垂直擴容與水平擴容
- 增加或減少節點時的數據rebalance
- master節點
- 節點平等的分布式架構
- primary shard和replica shard機制再次梳理
- 單node環境下創建index是什麽樣子的
--------------------------------------------------------------------
1、Elasticsearch對復雜分布式機制的透明隱藏特性
Elasticsearch是一套分布式系統,分布式是為了應對大數據量。
Elasticsearch隱藏了復雜的分布式機制:
- 分片:我們之前隨隨便便就將一些document插入到es集群中去了,我們沒有關心過數據是如何進行分配的、數據到哪個shard中去了。
- 集群發現機制(cluster discovery):如果啟動一個新的es進程,那麽這個es進程會作為一個node並且發現es集群,然後自動加入進去。
- shard負載均衡:舉例,假設現在有3個節點,總共有25個shard要分配到3個節點上去,es會自動進行均分分配,以保證每個節點的均衡的讀寫負載請求
- shard副本
- 請求路由
- 集群擴容
- shard重分配
--------------------------------------------------------------------
2、Elasticsearch的垂直擴容與水平擴容
擴容方案:
6臺服務器,每臺容納1T的數據,馬上數據量要增長到8T,這個時候有兩個方案。
(1)垂直擴容:重新購置兩臺服務器,每臺服務器的容量就是2T,替換掉老的兩臺服務器,那麽現在6臺服務器的總容量就是 4 * 1T + 2 * 2T = 8T。
(2)水平擴容:新購置兩臺服務器,每臺服務器的容量就是1T,直接加入到集群中去,那麽現在服務器的總容量就是8 * 1T = 8T
垂直擴容:采購更強大的服務器 ,成本非常高昂,而且會有瓶頸,假設世界上最強大的服務器容量就是10T,但是當你的總數量達到5000T的時候,你要采購多少臺最強大的服務器啊。
水平擴容:業界經常采用的方案,采購越來越多的普通服務器,性能比較一般,但是很多普通服務器組織在一起,就能構成強大的計算和存儲能力。
--------------------------------------------------------------------
3、增加或減少節點時的數據rebalance
比如現在有4個node,其中3個node中有一個shard,1個node中有2個shard,但是這個時候如果有一個新的node加入進來,則es會自動把其中一個shard分配到剛加入的node上去。
--------------------------------------------------------------------
4、master節點
一個es集群中總會有一個node是master節點:
- 管理es集群的元數據:比如說索引的創建和刪除、維護索引元數據;節點的增加和移除、維護集群的數據
- 默認情況下,會自動選擇出一臺節點作為master節點
- master節點不承載所有的請求,所以不會是單點瓶頸
--------------------------------------------------------------------
5、節點平等的分布式架構
(1)節點對等,每個節點都能接收所有的請求
(2)自動請求路由:任何一個節點接收到請求後,都可以把這個請求自動路由到相關節點上去處理該請求。
(3)響應收集:最原始節點會從其他節點接收響應數據,然後把這些數據返回給客戶端。
--------------------------------------------------------------------
6、primary shard 和 replica shard機制再次梳理
(1)一個索引(index)包含多個shard
(2)每個shard都是一個最小工作單元,承載部分數據,lucene實例,完整的建立索引和處理請求的能力。
(3)增減節點時,shard會自動在nodes中負載均衡。
(4)primary shard和replica shard,每個document肯定只存在於某一個primary shard以及其對應的replica shrad中,不可能存在於多個primary shard。
(5)replica shard是primary shard的副本,負責容錯,以及承擔讀請求負載。
(6)primary shard的數量在創建索引的時候就固定了,replica shard的數量可以隨時修改。
(7)primary shard的默認數量是5,replica shrad默認數量是1。
(8)primary shard不能和自己的replica shard放在同一個節點上(否則節點宕機時,primary shard和replica shard都丟失了,起不到容錯的作用。),但是可以和其它primary shard的replica shard放在同一個節點上。
--------------------------------------------------------------------
7、單node環境下創建index是什麽樣子的
(1)單node環境下,創建一個index: 有3個primary shard、3個replica shard
(2)集群狀態是yellow
(3)這個時候,只會將3個primary shard分配到僅有的一個node上去,另外3個replica shard是無法分配的
(4)集群可以正常工作,但是一旦出現節點宕機,數據全部丟失,而且集群不可用,無法承擔任何請求
Elasticsearch基礎分布式架構