1、主节点(或者候选主节点)
一个ES节点启动后,使用Zen Discovery 机制去寻找集群中的其他节点,并与之建立连接。集群中从候选主节点中选举出一个主节点。主节点负责创建索引,删除索引,分配分片,追踪集群中其他节点的状态等工作。
正常情况下,集群中所有的节点对主节点的选择是一致的,即一个集群中只能有一个主节点。然而在某些情况下,如网络通信故障,主节点负载过高无法及时响应等等,导致集群重新选举主节点,当网络通信恢复正常时集群中就会出现多个主节点的现象,即节点对集群状态的认知不一致,俗称集群脑裂现象。为了避免这种情况发生,可以通过 discovery.zen.minimum_master_nodes 来设置最少可工作的候选主节点个数。建议设置为(候选主节点/2) + 1 比如三个候选主节点,该配置项为 (3/2)+1 ,来保证集群中有半数以上的候选主节点。
候选主节点的设置方法是设置node.mater为true,默认情况下,node.mater和node.data的值都为true,即该节点既可以做候选主节点也可以做数据节点。由于数据节点承载了数据的操作,负载通常都很高,所以随着集群的扩大,建议将二者分离,设置专用的候选主节点。当我们设置node.data为false,就将节点设置为专用的候选主节点了。
node.master = true
node.data = false
稳定的主节点对集群健康非常重要,默认情况下集群中的任何一个节点都有可能被选为主节点,索引和搜索数据会占用大量的CPU,内存,IO资源,为了确保一个集群的稳定,建议生产环境分离主节点和数据节点,并启用备用主节点。
2、数据节点
数据节点负责数据的存储和相关具体操作,比如CRUD、搜索、聚合。所以,数据节点对机器配置要求比较高,首先需要有足够的磁盘空间来存储数据,其次数据操作对系统CPU、Memory和IO的性能消耗都很大。通常随着集群的扩大,需要增加更多的数据节点来提高可用性。
前面提到默认情况下节点既可以做候选主节点也可以做数据节点,但是数据节点的负载较重,所以需要考虑将二者分离开,设置专用的数据节点,避免因数据节点负载重导致主节点不响应。
node.master = false
node.data = true
3、客户端节点
当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
node.master = false
node.data = false
4.建议
在一个生产集群中我们可以对这些节点的职责进行划分,建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大,所以在集群中建议再设置一批client节点(node.master: false node.data: false),这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。
网友评论