跳至正文

TECHNICAL KNOWLEDGE / 技术栈

从架构思路,到实现细节。

技术选型、工程实践与部署记录,逐步展开来看。

沟通你的技术问题 ↗

集群(Cluster)

一个 Elasticsearch 集群由一个或多个节点(Node)组成。集群有一个唯一的名称,每个节点通过这个名称加入集群。集群的主要职责是管理和协调所有节点的工作,确保数据分布和高可用性。

 

  • 集群名称:唯一标识一个集群的名称,所有属于同一集群的节点必须共享同一个集群名称。
  • 主节点(Master Node):负责管理集群范围内的元数据和集群状态,例如创建或删除索引,跟踪节点的加入或离开等。
  • 数据节点(Data Node):存储实际的数据,并处理与搜索和索引相关的操作。
  • 协调节点(Coordinating Node):处理客户端请求,分发请求到合适的节点并聚合结果。这些节点不存储数据或处理搜索,只负责请求路由和结果聚合。
  • 处理节点(Ingest Node):执行预处理数据的管道,例如日志数据的解析和转换。

     

节点(Node)

一个节点是一个单独的 Elasticsearch 实例,它作为集群的一部分工作。每个节点都有一个唯一的名称和配置文件,定义其角色和行为。节点可以扮演多种角色:

  • 主节点(Master Node):管理集群的元数据和节点信息,确保集群健康状态。集群中通常会有多个主节点候选,以提高容错能力。
  • 数据节点(Data Node):存储索引数据并处理数据相关的操作,例如文档的索引、搜索和聚合。数据节点需要较多的磁盘空间和内存。
  • 协调节点(Coordinating Node):不存储数据或参与主节点选举,专门用于路由请求和聚合搜索结果。所有节点默认都是协调节点。
  • 处理节点(Ingest Node):处理文档预处理任务,可以在数据索引前执行数据管道。

     

索引(Index)

一个索引是包含类似文档集合的逻辑命名空间。每个索引有一个唯一的名称,并包含一组文档和相关设置。一个索引在物理上被分成多个分片(Shard),每个分片是一个独立的 Lucene 索引,可以存储在不同的节点上。

  • 分片(Shard):一个索引可以分成多个分片,每个分片独立存储一部分数据。分片允许数据水平拆分,以提高性能和扩展性。
    • 主分片(Primary Shard):每个文档被索引到一个主分片上。
    • 副本分片(Replica Shard):主分片的拷贝,用于提高数据的高可用性和读取性能。
  • 分片分配:Elasticsearch 会自动将分片分配到不同的节点上,以均衡负载和提高容错能力。

     

数据流(Data Flow)

  1. 索引数据:
    • 客户端发送索引请求到协调节点。
    • 协调节点将请求路由到包含相关主分片的节点。
    • 主分片处理请求并将数据复制到副本分片。

       

  2. 搜索数据:
    • 客户端发送搜索请求到协调节点。
    • 协调节点将请求分发到相关分片(主分片或副本分片)。
    • 各个分片处理搜索请求并返回结果。
    • 协调节点聚合结果并返回给客户端。

       

高可用性和容错

  • 主节点选举:集群会选举一个主节点来管理集群元数据。如果主节点失效,集群会自动选举新的主节点。
  • 分片复制:通过副本分片保证数据高可用性。如果一个节点失效,其上的主分片可以从副本分片中恢复。
  • 自动恢复:当节点失效或重新加入集群时,Elasticsearch 会自动重新分配分片以恢复集群的平衡和数据的高可用性。

     

通过这种架构设计,Elasticsearch 能够处理大规模的数据和复杂的搜索需求,同时提供高可用性和容错能力。