角色划分
在Elasticsearch中,有很多角色,常用的角色有如下:
Master Node:主節點
Master eligible nodes:合格節點
Data Node:數據節點
Coordinating Node:協調節點
Ingest Node:ingest節點
machine learning:機器學習節點
- Master Node:主節點,該節點不和應用創建連接,每個節點都保存了集群狀態,master節點不占用磁盤IO和CPU,內存使用量一般。
- Master eligible nodes:合格節點,每個節點部署后不修改配置信息,默認就是一個 eligible 節點,該節點可以參加選主流程,成為Mastere節點。該節點也保存了集群節點的狀態。eligible節點比Master節點更節省資源,因為它還未成為 Master 節點,只是有資格成功Master節點。
- Data Node:數據節點,該節點和索引應用創建連接、接收索引請求,該節點真正存儲數據,ES集群的性能取決於該節點的個數(每個節點最優配置的情況下),data節點會占用大量的CPU、IO和內存。
- Coordinating Node:協調節點,該節點和檢索應用創建連接、接受檢索請求,但其本身不負責存儲數據,可當負責均衡節點,該節點不占用io、cpu和內存。
- Ingest Node:ingest 節點可以看作是數據前置處理轉換的節點,支持 pipeline管道 設置,可以使用 ingest 對數據進行過濾、轉換等操作,類似於 logstash 中 filter 的作用,功能相當強大。
各節點間的關系
- Master Node:master節點控制整個集群的元數據。只有Master Node節點可以修改節點狀態信息及元數據(metadata)的處理,比如索引的新增、刪除、分片路由分配、所有索引和相關 Mapping 、Setting 配置等等。
- Master eligible nodes:有資格成為Master節點但暫時並不是Master的節點被稱為 eligible 節點,該節點只是與集群保持心跳,判斷Master是否存活,如果Master故障則參加新一輪的Master選舉。
- Data Node:data節點的分片執行查詢語句獲得查詢結果后將結果反饋給Coordinating節點,在查詢的過程中非常消耗硬件資源,如果在分片配置及優化沒做好的情況下,進行一次查詢非常緩慢(硬件配置也要跟上數據量)。
- Coordinating Node:協調節點接受客戶端搜索請求后將請求轉發到與查詢條件相關的多個data節點的分片上,然后多個data節點的分片執行查詢語句或者查詢結果再返回給協調節點,協調節點把各個data節點的返回結果進行整合、排序等一系列操作后再將最終結果返回給用戶請求。
- Ingest Node: Ingest節點處理時機——在數據被索引之前,通過預定義好的處理管道對數據進行預處理。默認情況下,所有節點都啟用Ingest,因此任何節點都可以處理Ingest任務。我們也可以創建專用的Ingest節點。
資源規划
- Master Node:Elasticsearch如果做集群的話Master節點至少三台服務器或者三個Master實例加入相同集群(生產建議每個es實例部署在不同的設備上),三個Master節點最多只能故障一台Master節點,數據不會丟失,如果三個節點故障兩個節點,則造成數據丟失並無法組成集群。
- Master eligible nodes:Elasticsearch如果使用三台Master做集群,其中一台被真正選為了Master,那么其它兩台就是 eligible 節點。
- Data Node:在Elasticsearch集群中,此節點應該是最多的,單個索引在一個data節點實例上分片數保持在3個以內(我覺得分片數量按照Data節點數量划分比較好,每個節點上存儲一個分片);每1GB堆內存對應集群的分片保持在20個以內;每個分片大小不要超過30G。
- Coordinating Node: 增加協調節點可增加檢索並發,但檢索的速度還是取決於查詢所命中的分片個數以及分片中的數據量。
Data節點建議
內存建議
假如一台機器部署了一個ES實例,則ES最大可用內存給到物理內存的50%,最多不可超過32G,如果單台機器上部署了多個ES實例,則多個ES實例內存相加等於物理內存的50%,多個ES實例內存相加不宜超過32G。
分片建議:
- 如果單個分片每個節點可支撐90G數據,依此可計算出所需data節點數。
- 如果多個分片按照單個data節點jvm內存最大30G來計算,一個節點的分片保持在600個以內,存儲保持在18T以內。