Elasticsearch的節點、集群和分片
節點
什么是節點
- ES是使用Java語言開發的。
- ES可以創建多個節點,一個節點就是一個ES實例,也就是一個Java線程。
- ES在生產環境中每個節點都是分布在不同的服務器上的,目的是達到集群的高可用
- 多個節點構成一個集群
節點角色
- 主節點(master node):負責管理整個集群的節點,主要負責如構建和刪除索引、監控節點和分發分片等,不存儲數據
- 數據節點(data node):主要負責存儲數據
- 協調節點(coordination node):負責在整個 Elasticsearch 集群中分發查詢,默認每個節點都是協調節點
- 攝取節點(ingest node):允許節點運行用于使用 Elasticsearch 文檔的管道
- 機器學習節點(machine learning node):用于處理機器學習API調用
- 遠程支持節點 (remote eligible node):支持遠程集群
- 變換節點 (transform node):創建新索引和獲得有用的分析見解的工具
分片
- 每個分片是數據存儲和索引的基本單位,用來水平分隔數據,也就是說將數據分別存儲到每個分片中
- 每個分片又可以分為主分片和復制分片,主分片負責讀取和寫入數據,復制分片只負責存儲數據,主分片和復制分片中存儲的數據一致,且主分片和復制分片必須在不同的節點上,保證數據的高可用
- 主分片宕機后,重新選舉主分片
ES集群
什么是ES集群
- 多個節點組成ES集群,其中主節點負責管理整個集群,不存儲數據,數據靠數據節點存儲
- 當主節點宕機時候,會從有master角色的集群重新選舉新的主節點
如何配置ES集群
- 集群中的所有節點確保cluster.name唯一
- 每個節點使用不同的node.name
- 通過network.host配置集群的IP
- 通過http.port配置端口,如果在同一機器下每個節點必須不一樣
- 通過transport.tcp.port設置集群間通信端口號,在同一個及其下必須不一樣
- 通過discovery.zen.ping.unicast.hosts: [“XXX”,“XXX”,"……”]配置集群自動發現機器ip集合
集群健康度
- green:所有的主分片和副本分片都已分配。表示集群是100%可用的
- yellow:所有的主分片已經分片了,但至少還有一個副本分片是缺失的。不會有數據丟失,所以搜索結果依然是完整的。
- 至少一個主分片(以及它的全部副本)都在缺失中。這意味著你在缺少數據:搜索只能返回部分數據
查看集群健康度
- 通過head插件可以查看
- 通過健康狀態api查看:_cat/health 或 _cluster/health