Elasticsearch的架构原理可以详细分为以下几个方面进行介绍:
一、Elasticsearch基本概念
Elasticsearch(简称ES)是一个基于Lucene构建的开源、分布式、RESTful搜索和分析引擎。它支持全文搜索、结构化搜索、半结构化搜索、数据分析、地理位置和对象间关联关系搜索等功能。ES使用Java编写,隐藏了Lucene的复杂性,为开发者提供了一套统一的API和client。
二、Elasticsearch节点类型
- Master节点:
- 主要负责:管理索引(如创建、删除索引)、分配分片、维护元数据、管理集群节点状态。
- 特点:不负责数据写入和查询,比较轻量级。
- 选举过程:通过Zen Discovery机制找到集群中的其他节点,并建立连接,然后从候选主节点中选举出一个主节点。
- DataNode节点:
- 主要负责:数据写入、数据检索。大部分ES的压力都集中在DataNode节点上。
- 特点:可以保存数据的节点,负责保存分片数据。
- 决策:由Master Node决定如何把分片分发到数据节点上。
- 其他节点类型:
- Master eligible nodes:可以参与选举的合格节点,每个节点启动后默认就是一个Master eligible节点。
- Ingest Node:数据前置处理转换节点,支持pipeline管道设置,用于对数据进行过滤、转换等操作。
- Machine Learning Node:负责运行机器学习的Job,用于异常检测等。
三、分片和副本机制
- 分片(Shard):
- ES将索引的数据分成若干部分,分布在不同的服务器节点中。每个分片是一个独立的、可读写的Lucene索引。
- 主分片数在索引创建时指定,后续不允许修改。
- 副本分片(Replica Shard):
- 是主分片的拷贝,用于实现数据的冗余和高可用性。
- 每个分片可以有多个副本分片,副本分片可以分布在不同的节点上。
四、Elasticsearch重要工作流程
- 文档写入原理:
- 选择任意一个DataNode发送请求,该节点成为coordinating node(协调节点)。
- 通过路由计算公式确定文档要写入的分片。
- coordinating node将请求转发给对应的primary shard所在的DataNode。
- Primary Shard处理请求,写入数据到索引库中,并将数据同步到Replica shard。
- 检索原理:
- client发起查询请求,某个DataNode接收到请求后成为coordinating node。
- coordinating node将查询请求广播到每一个数据节点,数据节点的分片处理查询请求。
- 各分片将符合条件的数据返回给coordinating node,coordinating node汇总并排序结果后返回给client。
五、数据存储与索引
- ES使用Lucene作为其底层数据存储引擎,数据存储在Lucene索引中。
- ES支持近实时索引,通过refresh、flush和segment合并等机制确保数据的快速检索和更新。
六、集群管理
- ES通过HTTP协议进行节点之间的通信,实现集群的状态管理和数据同步。
- 支持集群的弹性伸缩,可以通过添加或移除节点来调整集群的规模。
以上是对Elasticsearch架构原理的详细介绍,涵盖了其基本概念、节点类型、分片和副本机制、重要工作流程、数据存储与索引以及集群管理等方面。
后续会持续更新分享相关内容,记得关注哦!
标签:架构,基本原理,索引,Elasticsearch,分片,数据,节点,ES From: https://blog.csdn.net/AOMGyz/article/details/140109171