Skip to content
章节导航

ElasticSearch 8.x 高可用分布集群架构

生产环境中 Elastic Search 基本不可能单机部署,采用高可用集群架构。高可用集群架构是指在生产环境中使用多台服务器来部署 Elasticsearch,以实现数据的冗余和故障容错

Elasticsearch 高可用集群架构常见概念

集群(Cluster)

  • 集群是由多个节点组成的 Elasticsearch 实例的集合,
  • 集群共享相同的索引和数据,并协同工作以提供高可用性和性能

节点(Node)

  • 节点是运行在单个服务器上的Elasticsearch实例
  • 一个节点可以容纳多个分片,每个节点都有一个唯一的名称和地址。

分片(Shard)

  • 分片是数据的基本单元,在分布式环境中将索引的数据划分成多个分片存储在不同的节点上
  • 主分片负责处理读写请求,副本分片用于数据的冗余和故障转移
  • search 相关请求可以由主分片处理,也可以由副本分片处理

选主(Master Election)

  • 在一个集群中,通过选举机制选择一个主节点进行集群管理和控制
  • 主节点负责分配和管理主分片,而非主节点则负责处理读请求和副本分片。

集群发现(Cluster Discovery)

  • 集群发现是指节点之间自动发现和加入集群的过程
  • Elasticsearch 提供了多种集群发现机制,如多播发现、单播发现、云发现等。

查看节点角色

  • 集群中有多个节点角色的时候,就需要手动设定、配置节点的角色
  • 不手动设置节点角色,默认节点角色如下所示
shell
GET _cat/nodes?v

ip              heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
192.168.253.101            9          93  44    2.08    1.05     0.42 cdfhilmrstw *      node-1
  • 拓展
shell
C:Coordinating Node(协调节点):负责请求的路由和负载均衡,不存储数据。
D:Data Node(数据节点):存储数据并执行数据相关的操作,如索引和搜索。
F:Fetch Node(提取节点):从其他节点获取数据,协助执行分布式搜索。
H:HTTP Node(HTTP 节点):可以使用HTTP协议与之通信的节点。
I:Ingest Node(摄取节点):对文档进行预处理,如转换和过滤。
L:Machine Learning Node(机器学习节点):运行机器学习任务。
M:Master Node(主节点):负责集群管理和控制,如选主、分配分片等。
R:Remote Client Node(远程客户端节点):允许远程客户端连接的节点。
S:Scripting Node(脚本节点):负责脚本的评估和执行。
T:Transform Node(转换节点):执行转换任务,将源索引数据转换为目标索引。
W:ML Datafeed Node(机器学习数据源节点):用于处理机器学习数据源。

Elasticsearch 集群三种主要类型的节点

主节点(Master Node)

功能

主节点负责集群管理、控制和协调操作,包括分配和管理主分片,并参与选主过程。

用途

  • 在集群中,通常有一个或多个主节点,主节点的数量取决于集群的规模和要求
  • 主节点一般不参与数据的读写操作,它只负责协调工作

默认的是主节点 + 数据节点(master + data) ,节点可以成为主节点的资格,又可以存储数据

node.master: true

node.data: true

数据节点(Data Node)

功能

  • 数据节点负责存储和处理数据,包括索引、搜索和查询等操作。数据节点接收客户端的读写请求,执行各种操作
  • 处理数据相关,如 CRUD、搜索和聚合,是 I/O 密集型、内存密集型和 CPU 密集型的,需要大量的 CPU、内存和 IO

用途

  • 在生产环境中,一般会有多个数据节点,以存储和处理大量的数据
  • 数据节点可以水平扩展,提供更高的性能和容量

    节点没有成为主节点的资格,不参与选举,只存储数据

    node.master: false

    node.data: true

协调节点(Coordinating Node)

功能

是一个无数据节点,用于负载均衡和请求协调。它接收客户端的读写请求,并将它们转发给合适的数据节点进行处理。

用途

在高负载情况下,协调节点可以平衡请求的分发,提高系统的性能和吞吐量。还可以缓存结果,减轻数据节点的压力

不能成为主节点,也不存储数据,主要是进行负载均衡

node.master: false

node.data: false

总结

  • 一个节点可以充当一个或多个角色,默认三个角色都有
  • 每种节点类型都有不同的功能和用途在生产环境中,通常的配置是将这些节点类型组合使用,实现高可用性和高性能

建议

  • 小规模集群不需严格区分角色
  • 大规模集群则可以分开角色,并发量大可以增加独立协调节点和数据节点,提升处理能力
  • 节点的数量和规模取决于数据量、性能需求和可用资源等因素
  • 一个典型的 Elasticsearch 集群配置
    • 3 个主节点、5 个数据节点和 1 个或多个协调节点,这样的配置可以实现高可用性、数据冗余和负载均衡
    • 需要根据实际情况评估和调整节点的配置,以满足业务需求,也需要考虑硬件资源、网络带宽和数据量等因素。