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 个或多个协调节点,这样的配置可以实现高可用性、数据冗余和负载均衡
- 需要根据实际情况评估和调整节点的配置,以满足业务需求,也需要考虑硬件资源、网络带宽和数据量等因素。
朔风