一般地,ElasticSearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。这些功能是由两个属性控制的(node.master和node.data)。默认情况下这两个属性的值都是true。
在生产环境下,如果不修改ElasticSearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题,下面详细介绍一下这两个属性的含义以及不同组合可以达到的效果。
一、node.master
这个属性表示节点是否具有成为主节点的资格。
注意:此属性的值为true,并不意味着这个节点就是主节点。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。所以,这个属性只是代表这个节点是不是具有主节点选举资格。
二、node.data
这个属性表示节点是否存储数据。
三、配置组合
node.master和node.data两个属性的组合可以让ES节点起到不同的作用。
组合一:
node.master: false
node.data: true
该组合说明该node服务器只作为一个数据节点,只用于存储索引数据。使该node服务器功能单一,只用于数据存储和数据查询,降低其资源消耗率。
组合二:
node.master: true
node.data: false
该组合说明该node服务器只作为一个主节点,但不存储任何索引数据。该node服务器将使用自身空闲的资源,来协调各种创建索引请求或者查询请求,讲这些请求合理分发到相关的node服务器上。
组合三:
node.master: false
node.data: false
该组合说明该node服务器即不会被选作主节点,也不会存储任何索引数据。该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。在查询的时候,通常会涉及到从多个node服务器上查询数据,并请求分发到多个指定的node服务器,并对各个node服务器返回的结果进行一个汇总处理, 最终返回给客户端。
组合四:
node.master: true
node.data: true
这种组合表示这个节点即有成为主节点的资格,又存储数据,这个时候如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。elasticsearch默认每个节点都是这样的配置,在测试环境下这样做没问题。实际工作中建议不要这样设置,这样相当于主节点和数据节点的角色混合到一块了。
四、es集群配置一些知识点
1、建议集群中设置3台以上的节点作为master节点【组合二:node.master: true node.data: false】,这些节点只负责成为主节点,维护整个集群的状态。
2、再根据数据量设置一批data节点【组合一:node.master: false node.data: true】,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。
3、在集群中建议再设置一批client节点【组合三:node.master: false node.data: false】,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。但是,添加太多的客户端节点对集群是一种负担,因为主节点必须等待每一个节点集群状态的更新确认!客户节点的作用不应被夸大,数据节点也可以起到类似的作用。
4、节点类型服务器性能要求: master节点:普通服务器即可(CPU 内存 消耗一般)。
data节点:主要消耗磁盘,内存。
client节点:普通服务器即可(若进行分组聚合操作的话,建议该节点内存分配多一点)。