ElasticSearch系列 - 集羣&節點和分片
文章目錄
ElasticSearch 特性
ElasticSearch是一個高性能,高可用,易擴展的分佈式搜索引擎。
其高可用體現在:
- 服務可用性:允許有節點停止服務,整個ElasticSearch集羣必須正常對外提供服務(冗餘節點)
- 數據可用性:允許部分節點丟失,但是數據不會丟失(冗餘數據)
其可擴展性體現在:
- 請求量提升/數據的不斷增長(將數據分佈到所有節點上)(新增節點就能提供讀寫能力)
ElasticSearch分佈式架構的好處
- 存儲的水平擴容
- 提高可用性
ElasticSearch不同的集羣通過名字不同來區分,默認名字是elasticsearch
可以通過修改配置文件,或者在命令行中 -E cluster.name = test 進行設定
一個分佈式集羣可以有一個或多個節點
節點
一個節點就是一個ElasticSearch的實例,本質上就是一個Java進程。
每個節點都有名字,通過配置文件,或者啓動時候 -E node.name = node1指定
每一個節點在啓動之後,會分配一個UID,保存在data目錄下
Master eligible Node & Master Node
每個節點啓動後,默認就是一個Master eligible節點(可以設置node.master:false 禁止),Master-eligible節點可以參與選主流程,成爲Master節點
當第一個節點啓動,它會將自己選舉成Master節點
每個節點上都保存了集羣的狀態信息(所有節點信息,所有的索引和其相關的Mapping和Setting信息,分片路由信息),只有Master節點可以修改集羣狀態信息(任何節點修改會導致不一致,而且需要額外的鎖控制)
Data Node
可以保存數據的節點,叫做Data Node,負責保存分片數據。在數據擴展上起到了至關重要的作用
Coordinating Node
負責接收Client請求,將請求分發到合適的節點,最終吧結果匯聚在一起
每個節點默認都起到了Coordinating Node的職責
Hot & Warm Node
本質上還是Data Node,根據不同的硬件配置,可以實現Hot & Warm架構,降低集羣部署成本。
例如海量數據分析,就可以使用高硬件服務器,做Hot Node,處理海量日誌
Machine Learning Node
負責跑機器學習Job,用來做異常檢測
Tribe Node
Tribe Node 連接到不同的elasticSearch集羣,並且支持將這些集羣當成一個單獨集羣處理(5.3開始使用Cross Cluster Search處理)
配置節點類型
生產環境中一個節點應該設置單一的角色(意味着節點可以多角色)
節點類型 | 配置參數 | 默認值 | 備註 |
---|---|---|---|
master eligible | node.master | true | 可以參加選主 |
data | node.data | true | 存儲數據 |
ingest | node.ingest | True | ingest節點可以運行一些pipeline的腳本 |
Coordinating | 無 | 每個節點默認都是coordinating節點,設置其他類型全部爲false | |
machine learning | node.ml | true(需要enable x-pack) | 機器學習 |
分片
分片分爲兩種類型:主分片(Primary Shard)和副本分片(Replica Shard)
- 主分片:用以解決數據水平擴展的問題,通過主分片,可以將數據分佈到集羣內的所有節點上(主從複製)
- 主分片在索引創建時指定,後續不允許修改,除非reindex
- 一個分片是一個運行的Lucene實例
- 副本分片:用於解決數據高可用的問題,是主分片的拷貝(可以提高讀吞吐量)
- 副本分片數,可動態調整
假設一個集羣中有兩個節點。movie索引的分片分佈情況如下所示
PUT /movies
{
"settings":{
"number_of_shards":2, //主節點
"number_of_replicas":2 //副本節點
}
}
綠色是主節點,整個集羣中2個 P1 P0,每個主分片都有2個副本分片P0對應的是兩個R0,P1對應的是兩個R1。
設置分片大小時候,必須做好容量規劃
假設這時候新增一個節點Node 4,那麼新的節點將沒分片,無法做到水平擴展。而且因爲分片設置過小,可能導致單個分片數據量太大,導致數據重新分配耗時過大。
但是如果分片設置過大,會影響相關性打分,影響統計結果,單個節點過多分片影響性能,浪費資源