集群节点角色
节点角色职责
Elasticsearch8.5集群中的节点角色非常多,详细介绍可参考:官网说明
如果没有在elasticsearch.yml配置文件中设置node.roles属性,那么节点默认具备以下角色:
master:候选主节点,主节点负责集群全局管理。data:保存数据并执行与数据相关的操作,如CRUD、搜索和聚合。data_content:内容数据data_hot:热数据.最频繁搜索的数据data_warm:暖数据.比较频繁搜索的数据data_cold:冷数据.搜索频次低的数据data_frozen:冻数据.基本不再查询的数据ingest:预处理节点.在索引之前对数据执行常见转换(ETL)。ml:机器学习节点。运行job并处理机器学习API请求remote_cluster_client:远程集群客户端节点。用于跨集群检索或跨集群复制。transform:运行转换并处理转换API请求
除此之外还有两种节点角色:
- 仅选举主节点:仅参与投票选举master节点,自己不能成为主节点
node.roles: [master,voting-only]
- 仅协调节点:路由请求、处理搜索减少阶段和分发批量索引。仅协调节点就是作为智能负载均衡器。
node.roles: [ ]
节点角色配置项与缩写
| 角色名称 | 配置项 | 缩写 | 说明 |
|---|---|---|---|
| 候选主节点 | master | m | Master-eligible node |
| 仅投票节点 | voting_only | v | Voting-only node |
| 数据节点 | data | d | Data node |
| 内容数据节点 | data_content | s | Content data node |
| 热数据节点 | data_hot | h | Hot data node |
| 暖数据节点 | data_warm | w | Warm data node |
| 冷数据节点 | data_cold | c | Cold data node |
| 冻数据节点 | data_frozen | f | Frozen data node |
| 预处理节点 | ingest | i | Ingest node |
| 仅协调节点 | 空 | 空 | Coordinating only node |
| 远程节点 | remote_cluster_client | r | Remote-eligible node |
| 机器学习节点 | ml | m | Machine learning node |
| 传输节点 | transform | t | Transform node |
查看集群节点角色:
GET /_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 21 99 14 cdfhilmrstw - node-3
127.0.0.1 15 99 14 cdfhilmrstw - node-2
127.0.0.1 9 99 14 cdfhilmrstw * node-1
- node.role栏,各类角色的缩写组合,可以参考上面的角色缩写表格识别节点角色职责。
- master栏,带星号的为主节点
集群节点设计
每个节点都默认具备协调功能,当一个客户端向某个节点发起请求时,这个节点就成为当前请求的协调节点,它的生命周期和请求绑定。
如下图,客户端查询请求发给node-2,node-2就成为当前查询请求的协调节点,node-2负责向集群中所有节点(包括自己)转发查询请求,各个节点查询到数据后汇总到node-2,node-2负责聚合查询结果再返回给客户端。同理,请求如果发送到node-1或node-3也是类似的流程。
在生产环境中,协调节点需要单独部署,仅作为查询网关使用,以提升集群吞吐性能。
同时,集群规模较大的场景,Master节点也会单独部署。
如果有数据ETL处理需求可以单独部署ingest节点(比较复杂的ETL建议同时结合logstash组件来处理),实现读写分离架构。
进一步优化,可将冷热数据分离,热点数据节点采用更好的硬件配置,如SSD硬盘以及更大的内存等。
单机集群简单搭建
复制三份Elasticsearch目录,重命名如下:
分别修改三个目录的elasticsearch.yml配置如下:
# 关闭身份认证和SSL安全通道
xpack.security.enabled: false
xpack.security.http.ssl:
enabled: false
xpack.security.transport.ssl:
enabled: false
http.host: 0.0.0.0
transport.host: 0.0.0.0
cluster.name: my-application
# 集群节点
discovery.seed_hosts: ["localhost:9900","localhost:9910","localhost:9920"]
# 初始化新集群时master节点选举集合
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
# 以下是需要每个节点配置不一样的地方
node.name: node-1 # node-2 node-3
http.port: 9200 # 9210 9220
transport.port: 9900 # 9910 9920
然后依次启动节点即可。