文章目录
ES集群中各节点角色功能简介
本博客根据ES 7.15 ,介绍ES中各节点角色功能。集群节点角色可以在配置文件elasticsearch.yml
中通过node.roles
配置,如果配置了节点角色,那么该节点将只会执行配置的角色功能;如果不配置,该节点将会执行以下角色功能:
master # 主节点
data # 通用数据节点
data_content # 数据目录节点
data_hot # 热点数据节点
data_warm # 中温数据节点
data_cold # 冷数据节点
data_frozen # 封存数据节点
ingest # 数据摄入节点
ml # 机器学习节点
remote_cluster_client # 远程候选节点
transform # 转换节点
注意
- 如果私自配置节点信息,请确保集群配置有master角色的节点和data角色的节点
- 如果有较大的机器学习(machine learning)任务或转换(transform)任务,建议将候选的主节点(Master-eligible node)与数据节点(data node)、机器学习节点(machine learning node)和转换节点(transforming node)分开是很有必要的。
- 每个节点都默认为协调节点(Coordinating node),如果
node.roles
设置为[]
那么该节点将只执行协调节点功能。
候选主节点(Master-eligible node)
候选主节点不仅有选举权还有被选举权;每个节点主要负责索引创建、索引删除、追踪节点信息和决定分片分配节点等。
配置候选主节点
node.roles: [ master ]
配置只有选举权的节点
该节点相较于master节点,需要更少的堆内存和低配的cpu
node.roles: [ master, voting_only ]
注意
master, voting_only两个必须一起使用
数据节点
数据节点负责存储文档数据和数据的CRUD操作。因此该节点是CPU和IO密集型,需要实时监控该节点资源信息,以免过载。将节点设置为数据节点方式为,在elasticsearch.yml中添加如下内容:
node.roles: [ data ]
目前数据存储节点是多层架构,节点可被指定特定一层或特定多层,每层分别为:data_content
,data_hot
,````data_warm,
data_cold,
data_frozen。每个节点要么选择单个层级或多个层级,要么设置为
data```,切记不可即设置为data,也设置为data_*(这里的*表示content、hot等),下面将对每个层进行详细介绍。
目录数据节点(Content data node)
目录节点负责存储常量数据,且不随着时间的推移,改变数据的温层(hot、warm、cold)。且该节点的查询优先级是高于其它IO操作,所以该节点search和aggregations都会较快一些。系统索引和非数据流索引都存储在该节点。设置方法,如下
node.roles: [ data_content ]
热点数据节点(Hot data node)
热数据节点是时序数据的重要入口,用于存储最近频繁搜索和修改的时序数据;热数据节点必须具有快速的读写能力,最好是SSD。设置方法,如下
node.roles: [ data_hot ]
中温数据节点(Warm data node)
当时序数据访问频率下降,可以将其移动到中温节点,中温节点用于存储修改较少,但任然有查询的数据。查询的频率肯定比热点节点要少。设置方法,如下
node.roles: [ data_warm ]
冷数据节点(Cold data node)
当时序数据不再更新,那么可以将该数据移动到冷数据节点;冷数据节点用于存储只读,且访问频率较低的数据。该节点机器性能可以低一点。设置方法,如下
node.roles: [ data_cold ]
封存数据节点(Frozen data node)
当数据很少查询,可以将数据从cold移动到Fronzen节点;封存数节点可以使用部分挂载方法查询备份索引,去数据仓库拉取数据到本地,这个本地存储在封存各节点是公用的,即多个封存节点只会加载一份这个数据到本地!设置方法,如下
node.roles: [ data_frozen ]
数据摄入节点(Ingest node)
该节点将只用于执行预处理管道,设置方法如下
node.roles: [ ingest ]
协调节点(Coordinating only node)
协调节点主要负责根据集群状态路由分发搜索,路由分发bulk操作。此外每个节点都是自带协调节点功能,如果该节点只作为协调节点,设置方法,如下
node.roles: [ ]
注意
协调节点对于大集群,将有益于降低主节点和数据节点负担。但是添加过多的协调节点,将增加整个集群负担(因为需要将集群状态同步到每个协调节点)。
远程候选节点(Remote-eligible node)
远程候选节点可以作为远程集群的客户端,主要负责搜索远程集群数据和同步两个集群间数据。设置方法,如下
node.roles: [ remote_cluster_client ]
机器学习节点(Matchine learning node)
机器学习节点负责处理机器学习相关请求。设置方法,如下
node.roles: [ ml]
注意
如果想在ml节点中访问远程集群,则必须在ml节点的roles中添加remote_cluster_client角色;如果启动异常探查任务,则必须在master-eligible的节点中配置remote_cluster_client。
转换节点(Transform node)
转换节点会进行一种特殊操作,通过特定聚集语句计算,然后将结果写到新的索引中。如果需要使用远成集群数据,请务必在转换节点中添加remote_cluster_client
;转换节点设置方法,如下
node.roles: [ transform ]
改变节点角色
数据节点会保存以下信息到磁盘:
- 该节点保存的分片信息
- 每个索引在该节点的分片信息
- 集群的元信息,包括设置和索引模板
主节点会保存以下信息到磁盘:
- 索引元数据信息
- 集群的元数据,包括设置和索引模板
注意
-
如果
data.path
如果存在数据数据,且该节点不是data节点会启动失败 -
如果具有data角色和master角色节点没有索引元数据信息存在,也会启动失败
-
修改角色之前请使用 allocation fill将数据移走,操作方法如下(10.0.0.1就是想操作的节点ip):
PUT _cluster/settings { "transient" : { "cluster.routing.allocation.exclude._ip" : "10.0.0.1" } }