Elasticsearch集群架构分析

606 阅读3分钟

集群节点角色

节点角色职责

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: [ ]

节点角色配置项与缩写

角色名称配置项缩写说明
候选主节点mastermMaster-eligible node
仅投票节点voting_onlyvVoting-only node
数据节点datadData node
内容数据节点data_contentsContent data node
热数据节点data_hothHot data node
暖数据节点data_warmwWarm data node
冷数据节点data_coldcCold data node
冻数据节点data_frozenfFrozen data node
预处理节点ingestiIngest node
仅协调节点Coordinating only node
远程节点remote_cluster_clientrRemote-eligible node
机器学习节点mlmMachine learning node
传输节点transformtTransform 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也是类似的流程。 image.png

在生产环境中,协调节点需要单独部署,仅作为查询网关使用,以提升集群吞吐性能。

image.png

同时,集群规模较大的场景,Master节点也会单独部署。

image.png

如果有数据ETL处理需求可以单独部署ingest节点(比较复杂的ETL建议同时结合logstash组件来处理),实现读写分离架构。

image.png

进一步优化,可将冷热数据分离,热点数据节点采用更好的硬件配置,如SSD硬盘以及更大的内存等。

image.png

单机集群简单搭建

复制三份Elasticsearch目录,重命名如下:

image.png

分别修改三个目录的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

然后依次启动节点即可。