Elasticsearch 节点角色
一个Elasticsearch实例代表了一个ES 节点,如果不通过 node.roles 设置节点的角色,一个ES节点默认的节点角色有:master 、data 、data_content、data_hot、data_warm、data_cold、ingest、ml、remote_cluster_client。
Master-eligible node
该节点拥有master 角色,能够在集群故障时被选举为master node,master node负责创建、删除索引,追踪集群中的节点,并确定每个node的shard分配。master node必须有data目录的权限,因为data目录存放了集群的状态信息。
Dedicated Master-eligible node
master node拥有足够的硬件资源去履行它的职责对于整个集群健康运行至关重要,索引和搜索数据是非常耗资源的操作,在大集群和高吞吐量的集群中,应该避免让Master-eligible nodes执行这类任务。为此可以创建三个专用节点,只有master角色,作为Master-eligible node,配置为:
node.roles: [ master ]
Voting-only master-eligible node
Voting-only master-eligible node在master node的选举过程中参与投票,但是不会作为候选人被选为master node,如下配置该节点为voting-only master-eligible node,只有具有master角色的节点,才能被标记拥有voting-only角色。voting-only nodes不会被选举为master node并履行相应功能,所以对于内存和CPu要求较低,但是相比于集群中其他node,所有的master-eligible nodes也包括voting-only nodes都需要相当快速的磁盘以及可靠、低延迟的网络,以便于更新集群状态。
node.roles: [ master, voting_only ]
Data node
该节点拥有 data 角色,Data node保存索引数据,并且执行数据相关的操作:CRUD、search搜索、聚合搜索等,这些操作都比较耗费I/O、内存和CPU资源,在资源不够的情况下应该合理添加data node,一个拥有data角色的节点可以覆盖任何特定的data node细分角色。单独划分data node的好处是可以将master 和data角色区分开。
node.roles: [ data ]
在多层级业务场景部署架构下,可以根据不同层级给data node分配更加细分的角色:data_content,data_hot, data_warm, data_cold。
Content data node
该角色的nodes会处理用户创建的文档内容,包括CRUD、数据搜索和聚合等。
node.roles: [ data_content ]
Hot data node
该角色的nodes会根据数据进入ES的时间存储时序数据,hot层对数据读写要求较快,可以使用SSD。
node.roles: [ data_hot ]
Warm data node
该角色的nodes会存储不再被经常更新但是仍然被查询的索引数据,相比较于在hot层数据查询的频率要低。
node.roles: [ data_warm ]
Cold data node
该角色的nodes会存储很少被获取的只读索引,该层耗费资源少,可以搜索快照索引减少资源需求。
node.roles: [ data_cold ]
Ingest node
该节点拥有 ingest 角色,Ingest node可以在文档索引之前执行ingest pipeline,进行数据清洗、字段填充等工作,对于数据预处理较为复杂,负载较重的ingest来说,应该单独部署ingest node。
node.roles: [ ingest ]
Remote-eligible node
改节点拥有remote_cluster_client角色,可以充当远程客户端,默认情况下,集群内任意节点都可以作为跨集群的客户端连接到远程集群。
Machine learning node
该节点拥有ml角色,并且 xpack.ml.enabled 开关打开,如果需要使用机器学习功能,集群内至少需要有一个机器学习节点。
node.roles: [ remote_cluster_client ]
Transform node
改节点拥有transform角色,如果想要使用transforms功能,集群中只是需要一个transform node。
Coordinating node
协调节点负责处理所有来自客户端的请求以及返回给客户端的响应结果,默认情况下每个node都是协调节点。如果将node按功能分配角色:master node处理主节点事务、data node保存数据、ingest node进行数据预处理,那么coordinating node则是 route 客户端请求、处理搜索数据整合阶段并且分配批量索引操作 bulk indexing。可以将node配置为 Coordinating only node,让该节点作为一个负载均衡器。添加过多的Coordinating only node会给集群带来负担,因为master node需要等待集群state信息更新到了所有节点。其实,data node就可以很好的充当协调节点。
node.roles: [ ]