ES擴容、容災理解

擴容

副本分片可以動態的增加副本分片的數目,但是主分片不可以。

擴容本質上就是遷移分片至新的節點以達到擴容的目的。

如果有6個分片(3主3從),那麼就可以擴容至6個節點。每個節點存放一個分片,並且每個分片擁有該節點的全部資源。

如果想要擴容超過6個節點怎麼辦?

主分片的數目在創建索引的時候就已經確定。這個數目定義了這個索引能夠存儲的最大數據量。但是讀操作可以被主分片和副本分片同時處理,所以增大副本分片的數量可以提高吞吐量,集羣搜索性能將大幅度提升。

如果只是在一個集羣同數量的節點上增加副本數量並不會增加性能,因爲每個分片從節點上分到的資源會變少,需要增加硬件資源來提升吞吐量。

副本分片數量增加數據冗餘性。

擴容的兩種方法

方式一:垂直擴容

例如當前的服務器能夠容納1T的數量,現在數據量達到了10T,直接購買一臺10T的服務器進行替換。

方式二:水平擴容

增加多臺擁有類似性能的服務器構成集羣。

es一般採用方式二水平擴容的方式進行擴容。從成本上來說,內存容量小,並且性能相對較低的服務器相比較與內存容量大,性能好的服務器,在價格上的差距不是一個量級的。從另一方面來說,elasticSearch是一套分佈式的系統,分佈式的存在也是爲存放大量的數據。講到elasticSearch的擴容,自然就會想到shard和replica shard。

elasticSearch擁有cluster discovery(集羣發現機制),當我們啓動一個新的節點,該節點會發現集羣並且自動加入到集羣中。並且es集羣會自動進行各個shard之間的數據均衡處理。並且當節減少時,es集羣也會自動將減少的節點中的數據移到其他正在運行的節點中。所以elasticSearch一般選擇水平擴容的方式

 

容災

ES有很完善的容災機制,候選master一般有多個,data節點也有多個,因此節點異常的時候通過訪問切換到其他節點來容災。

1.故障發現

master會定時去ping其他節點(包括其他master節點),datanode也會去ping master節點。

Discovery.zen.fd.ping_interval=1s  默認每隔1秒探測1次

Discovery.zen.fd.ping_timeout=30s 默認ping探測的超時時間爲30秒

Discovery.zen.fd.ping_retry=3  默認重試3次

2.節點切換

master節點切換

當其他節點探測到master異常且超過重試次數後,候選master節點會進行競爭,規則:

1.每次選舉每個節點會把自己所知道的候選master節點根據nodeid進行一次排序,然後選出第一個節點,暫且認爲它是master節點

2.如果對某個幾點的投票數達到 候選master數/2+1 個(防止腦裂的發生)並且該節點也選舉自己爲master,那麼這個節點即爲master,否則重新選舉。

data節點切換

當master節點檢測到某個data節點有異常的時候:

1.master剔除該data節點,如果有副本,此時數據不丟失,集羣狀態爲yellow;如果沒有副本,則數據丟失,集羣狀態爲red。

2.master找出該異常data節點的所有分片,如果該節點上有主分片,則將其他節點上的副本分片提升爲主分片;該節點的所有主分片恢復後,該異常data節點所涉及的數據讀寫都恢復正常。

3.集羣狀態恢復爲green

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章