Elasticsearch 集群一般是由多个节点共同组成的分布式集群,节点之间互通,彼此配合,共同对外提供搜索和索引服务(节点之间能够将客户端请求转向到合适的节点)。不同的节点会负责不同的角色,有的负责一个,有的可能负责多个。Elasticsearch 中有多个节点角色,如数据节点、主节点、机器学习节点和协调节点。
数据节点(Data Node)
主要承担了数据存储和数据处理的工作,保存索引分片,处理与数据相关的操作,例如 CRUD、搜索、聚合等各种 I/O、内存和 CPU 密集型操作。集群使用过程中,需要注意监控数据节点的资源使用率,并在服务过载时通过添加更多的数据节点,进行集群扩容,以保障集群的稳定性。
主节点(Master Node)
负责轻量化整个集群范围内的操作,例如创建或删除索引、跟踪哪些节点是集群的一部分以及决定将哪些分片分配给哪些节点。对于集群健康来说,拥有一个稳定的主节点非常重要。
备选主节点(Master-eligible node)
指有资格被选为主节点的节点,任何符合主节点条件的节点(默认情况下为所有节点)都可以通过主选择过程被选为主节点。
默认情况下,所有节点都是数据节点,也都是备选主节点,对于小型集群来说非常方便。由于数据节点处理索引和搜索数据的请求都是 I/O、内存和 CPU 密集型工作,可能对节点的资源造成压力。随着集群的增长,为了确保主节点稳定且不受压力,保障集群的稳定,需将主节点和数据节点分离。
专用主节点(Dedicated Master Node)
指 Elasticsearch 集群中,设置了只能作为主节点的节点。
专用主节点配置建议
设置专用主节点主要是为了保障集群增大时的稳定性,建议专用主节点个数至少为3个。
专用主节点个数为1:只有1个备选主节点,discovery.zen.minimum_master_nodes 设置为1,网络发生故障时缺少备份。
专用主节点个数为2:有2个备选主节点,minimum_master_nodes 设置为1,有备份节点,但网络发生故障,在重新选主时,有发生脑裂的风险(每个备选主节点都将自己设置为主节点);minimum_master_nodes 设置为2,发生故障时,可选主节点个数达不到要求,不能选出主节点。
专用主节点个数为3:有3个备选主节点,discovery.zen.minimum_master_nodes 设置为2,网络发生故障时,丢失一个可选主节点,在重新选主时,能有效选出主节点。
机器学习节点(Machine Learning Node)
机器学习节点用于创建机器学习任务,自动进行数据分析,识别异常数据,也可在此节点加载向量模型,提升向量生成和向量检索能力,同时可以与业务进行隔离,提升集群稳定性。
协调节点(Coordinating Node)
协调节点主要负责协调客户端的请求,如搜索请求或批量索引请求,将接收到的请求分发给合适的数据节点,每个数据节点在本地执行请求,并把结果汇集到协调节点。ES 每个节点都可以承担协调节点的角色,在高并发读写、多聚合查询等 CPU 密集型场景,设立独立的协调节点将有益于降低主节点和数据节点负担。