一、逻辑划分

1、Master Node主节点(或者Master Eligible Nodes候选主节点)

(1)、设置

  1. - **node.master = true (mastertrue时,可以设置为主节点,参与选举)**
  2. - **node.data = false **

(2)、作用

  1. - 处理创建,删除索引等请求 / 决定分片⽚被分配到哪个节点 / 负责索引的创建与删除;
  2. - 维护并且更新 Cluster State,且只能由 master node 维护,否则会造成集群状态不正常。

一个ES节点启动后,使用Zen Discovery 机制去寻找集群中的其他节点,并与之建立连接。集群中从候选主节点中选举出一个主节点。主节点负责创建索引,删除索引,分配分片,追踪集群中其他节点的状态等工作。
正常情况下,集群中所有的节点对主节点的选择是一致的,即一个集群中只能有一个主节点。然而在某些情况下,如网络通信故障,主节点负载过高无法及时响应等等,导致集群重新选举主节点,当网络通信恢复正常时集群中就会出现多个主节点的现象,即节点对集群状态的认知不一致,俗称集群脑裂现象。为了避免这种情况发生,可以通过 discovery.zen.minimum_master_nodes 来设置最少可工作的候选主节点个数。建议设置为(候选主节点/2) + 1 比如三个候选主节点,该配置项为 (3/2)+1 ,来保证集群中有半数以上的候选主节点。
候选主节点的设置方法是设置node.mater为true,默认情况下,node.mater和node.data的值都为true,即该节点既可以做候选主节点也可以做数据节点。由于数据节点承载了数据的操作,负载通常都很高,所以随着集群的扩大,建议将二者分离,设置专用的候选主节点。当我们设置node.data为false,就将节点设置为专用的候选主节点了。

稳定的主节点对集群健康非常重要,默认情况下集群中的任何一个节点都有可能被选为主节点,索引和搜索数据会占用大量的CPU,内存,IO资源,为了确保一个集群的稳定,建议生产环境分离主节点和数据节点,并启用备用主节点。

2、Data node数据节点

(1)、设置
node.master = false、node.data = true
(2)、职能
数据节点负责数据的存储和相关具体操作,比如CRUD、搜索、聚合。所以,数据节点对机器配置要求比较高,首先需要有足够的磁盘空间来存储数据,其次数据操作对系统CPU、Memory和IO的性能消耗都很大。通常随着集群的扩大,需要增加更多的数据节点来提高可用性。
前面提到默认情况下节点既可以做候选主节点也可以做数据节点,但是数据节点的负载较重,所以需要考虑将二者分离开,设置专用的数据节点,避免因数据节点负载重导致主节点不响应。

3、Ingest node 提取节点

node.ingest: true(默认)。
Ingest node可以通过ingest pipeline对文档执行预处理操作,以便在索引文档之前对文档进行转换或者增强。
ElasticSearch 5.0 后,引入的一种新的节点类型,默认配置下,每个节点都是 Ingest Node;Ingest Node 具有预处理数据的能力,可拦截 Index,对数据进行预处理例如:

为某个字段设置默认值;
重命名某个字段的字段名;
对字段值进行 Split 操作;
支持设置 Painless Script,对数据进行更加复杂的加工

4、Coordinating Node

node.master=true、node.data=false、node.ingest=false 设置后 节点就成专门的协调节点

  • 处理请求的节点,负责路由请求到正确的节点,如创建索引的请求需要路由到 Master 节点;
  • 所有节点默认都是 Coordinating Node;
  • 通过将其他类型(node.master=true、node.data=false、node.ingest=false 设置后 节点就成专门的协调节点)设置成 False,使其成为专门负责的协调的节点;

5、Tribe node 部落节点

当一个节点配置tribe.*的时候,它是一个特殊协调节点,它可以连接多个集群,在所有连接的集群上执行搜索和其他操作。

二、说明

1、Client Node 客户端节点

设置node.master = false、node.data = false
当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
警告:添加太多的客户端节点对集群是一种负担,因为主节点必须等待每一个节点集群状态的更新确认!客户节点的作用不应被夸大,数据节点也可以起到类似的作用

2、协调节点

  • 处理请求的节点,负责路由请求到正确的节点,如创建索引的请求需要路由到 Master 节点;
  • 所有节点默认都是 Coordinating Node;
  • 通过将其他类型(data node/master node/master eligible node)设置成 False,使其成为专门负责的协调的节点;
  • 当一个请求会跨越多个节点的时候(如search或者bulk-indexing),这时候会引入一个协调节点的概念。从流程上来讲,ES的一次请求非常类似于Map-Reduce操作。在ES中对应的也是两个阶段,称之为scatter-gather。客户端发出一个请求到集群的任意一个节点,这个节点就是所谓的协调节点,它会把请求转发给含有相关数据的节点(scatter阶段),这些数据节点会在本地执行请求然后把结果返回给协调节点。协调节点将这些结果汇总(reduce)成一个单一的全局结果集(gather阶段)