在Elasticsearch當中,ES分為三種角色:master、data、client。
三種角色由elasticsearch.yml配置文件中的node.master、node.true來控制。
如果不修改elasticsearch的節點角色信息,那么默認就是node.master: true、node.data: true
默認情況下,es集群中的每個節點都有成為主節點的資格,也都存儲數據,還可以提供查詢服務,負載均衡以及數據合並等服務。在高並發的場景下集群容易出現負載過高問題。
角色划分:
master:該節點不和應用創建連接,主要用於元數據(metadata)的處理,比如索引的新增、刪除、分片分配等,master節點不占用io和CPU,內存使用量一般
data:該節點和索引應用創建連接、接收索引請求,該節點真正存儲數據,ES集群的性能取決於該節點的個數(每個節點最優配置的情況下),data節點會占用大量的CPU、io和內存。
client:該節點和檢索應用創建連接、接受檢索請求,但其本身不負責存儲數據,可當負責均衡節點,client節點不占用io、cpu和內存。
各節點間的關系
master:master節點具備主節點的選舉權,有資格成為主節點,主節點控制整個集群的元數據。
data:data節點的分片執行查詢語句獲得查詢結果后將結果反饋給client。此過程較消耗硬件資源。
client:client節點接受搜索請求后將請求轉發到與查詢條件相關的多個data節點的分片上,然后多個data節點的分片執行查詢語句或者查詢結果再返回給client節點,client來把各個data節點的返回結果進行整合、排序等一系列操作后再將最終結果返回給用戶請求。
資源規划
master節點:ES如果做集群的話Master節點至少三台服務器或者三個Master實例加入相同集群,三個Master節點最多只能故障一台Master節點,親測,如果故障兩個Master節點,ES將無法組成集群。
data節點:單個索引在一個data節點上分片數保持在3個以內;每1GB堆內存對應集群的分片保持在20個以內;每個分片不要超過30G;
client節點:增加client節點可增加檢索並發,但檢索的速度還是取決於查詢所命中的分片個數以及分片中的數據量。
data節點經驗:
如果單索引每個節點可支撐90G數據,依此可計算出所需data節點數 。
如果是多索引按照單個data節點jvm內存最大30G來計算,一個節點的分片保持在600個以內,存儲保持在18T以內。
主機的cpu、io固定,建議一台主機只部署一個data節點,不同角色節點獨立部署,方便擴容
每條數據保持在2k以下索引性能大約3000-5000條/s/data節點,增加data節點數可大幅度增加索引速率,節點數與索引效率的增長關系呈拋物線形狀
ES的四種集群角色
node.master: true #主節點;允許節點是否可以成為一個master節點,ES是默認集群中的第一台機器成為master,如果這台機器停止就會重新選舉。(默認開啟)
node.data: true #數據節點;允許該節點存儲索引數據(默認開啟)
上面這兩個屬性可以有四種組合方式:
第一種:主節點+數據節點
第一種為ES默認選項,以下兩個值都為true,該節點既有成為master的資格還要存儲數據,如果該節點被選為了真正的master,還要存儲數據,那么該節點的壓力相對來說就較大了,生產中不建議這樣,即成為了主節點還成為了數據節點。
node.master: true
node.data: true
第二種:主節點
第二種為主節點模式,該節點只有成為master節點的資格,並不正真存儲數據,在沒有成為master的情況下還可以進行集群內的請求轉發,數據合並等功能,此選擇在生產中為master節點。
node.master: true
node.data: false
第三種:數據節點
第三種為數據節點,該節點只存儲數據,沒有資格成為master,只做數據存儲功能;在集群中需要單獨設置幾個這樣的節點,用來存儲數據。
node.master: false
node.data: true
第四種:客戶端節點
第四種為client節點,該節點既沒有成為master的資格,還不存儲數據,主要是針對海量請求的時候可以進行負載均衡、數據合並、數據查詢、請求轉發等功能。
node.master: false
node.data: false