Logo
Section 1 / 7

Elasticsearch 的架构 Elasticsearch 是一个分布式、可扩展的搜索和分析引擎,基于 Apache Lucene 构建。它采用主从架构(Master-Replica),支持水平扩展,能够处理大量数据并提供近实时的搜索能力。 核心组件包括: 1. 节点(Node) - 每个运行 Elasticsearch 的实例称为一个节点。 - 节点可以是主节点(Master Node)、数据节点(Data Node)、协调节点(Coordinating Node)或专用主节点(Ingest Node)。 - 主节点负责集群管理,如创建或删除索引、跟踪节点状态等。 - 数据节点存储数据并执行数据相关的操作,如搜索和聚合。 - 协调节点接收客户端请求,并将请求分发到合适的节点,然后汇总结果返回给客户端。 - Ingest 节点用于预处理数据,例如解析、转换和过滤文档。 2. 集群(Cluster) - 一组连接在一起的节点组成一个集群。 - 集群通过选举机制选出一个主节点来管理整个集群的状态。 - 集群具有自我修复能力,当节点失效时,系统会自动重新分配分片。 3. 索引(Index) - 索引是逻辑上的数据容器,类似于关系型数据库中的“数据库”。 - 一个索引由多个分片(Shard)组成,每个分片是一个独立的 Lucene 索引。 - 分片分为主分片(Primary Shard)和副本分片(Replica Shard),副本分片用于提高可用性和容错性。 4. 分片(Shard) - 分片是索引的物理划分单位,用于实现数据的分布式存储。 - 主分片用于写入数据,副本分片用于读取和故障恢复。 - 分片数量在索引创建时确定,之后不可更改。 - 分片可以分布在不同的节点上,以实现负载均衡和高可用。 5. 倒排索引(Inverted Index) - Elasticsearch 使用倒排索引结构来实现高效文本搜索。 - 倒排索引将文档中出现的每个词映射到包含该词的文档列表,从而快速定位匹配文档。 6. RESTful API - Elasticsearch 提供基于 HTTP 的 RESTful API,支持对索引、文档进行增删改查操作。 - 可通过 curl、Postman 或编程语言客户端(如 Java、Python)与之交互。 7. 分布式特性 - 所有节点之间通过内部通信协议保持同步。 - 数据写入时,先写入主分片,再复制到副本分片。 - 搜索请求被发送到所有相关分片,结果合并后返回。 8. 高可用与容错 - 通过副本分片实现数据冗余,即使某个节点宕机,数据仍可通过副本访问。 - 主节点故障时,其他节点会重新选举新的主节点,确保集群持续运行。 9. 扩展性 - 支持横向扩展:通过添加更多节点来提升性能和容量。 - 可以动态调整分片数量(需重建索引)以适应数据增长。 10. 插件与扩展 - 支持通过插件扩展功能,如安全认证、监控、分析、机器学习等。 整体架构设计使得 Elasticsearch 适用于日志分析、全文搜索、实时数据分析等场景,具备高性能、高可用和易扩展的特点。

了解 Elasticsearch 的概念及其与其他数据库的区别。

导入

Elasticsearch 的架构 Elasticsearch 是一个分布式、可扩展的搜索和分析引擎,基于 Apache Lucene 构建。它采用主从架构(Master-Replica),支持水平扩展,能够处理大量数据并提供近实时的搜索能力。 核心组件包括: 1. 节点(Node) - 每个运行 Elasticsearch 的实例称为一个节点。 - 节点可以是主节点(Master Node)、数据节点(Data Node)、协调节点(Coordinating Node)或专用主节点(Ingest Node)。 - 主节点负责集群管理,如创建或删除索引、跟踪节点状态等。 - 数据节点存储数据并执行数据相关的操作,如搜索和聚合。 - 协调节点接收客户端请求,并将请求分发到合适的节点,然后汇总结果返回给客户端。 - Ingest 节点用于预处理数据,例如解析、转换和过滤文档。 2. 集群(Cluster) - 一组连接在一起的节点组成一个集群。 - 集群通过选举机制选出一个主节点来管理整个集群的状态。 - 集群具有自我修复能力,当节点失效时,系统会自动重新分配分片。 3. 索引(Index) - 索引是逻辑上的数据容器,类似于关系型数据库中的“数据库”。 - 一个索引由多个分片(Shard)组成,每个分片是一个独立的 Lucene 索引。 - 分片分为主分片(Primary Shard)和副本分片(Replica Shard),副本分片用于提高可用性和容错性。 4. 分片(Shard) - 分片是索引的物理划分单位,用于实现数据的分布式存储。 - 主分片用于写入数据,副本分片用于读取和故障恢复。 - 分片数量在索引创建时确定,之后不可更改。 - 分片可以分布在不同的节点上,以实现负载均衡和高可用。 5. 倒排索引(Inverted Index) - Elasticsearch 使用倒排索引结构来实现高效文本搜索。 - 倒排索引将文档中出现的每个词映射到包含该词的文档列表,从而快速定位匹配文档。 6. RESTful API - Elasticsearch 提供基于 HTTP 的 RESTful API,支持对索引、文档进行增删改查操作。 - 可通过 curl、Postman 或编程语言客户端(如 Java、Python)与之交互。 7. 分布式特性 - 所有节点之间通过内部通信协议保持同步。 - 数据写入时,先写入主分片,再复制到副本分片。 - 搜索请求被发送到所有相关分片,结果合并后返回。 8. 高可用与容错 - 通过副本分片实现数据冗余,即使某个节点宕机,数据仍可通过副本访问。 - 主节点故障时,其他节点会重新选举新的主节点,确保集群持续运行。 9. 扩展性 - 支持横向扩展:通过添加更多节点来提升性能和容量。 - 可以动态调整分片数量(需重建索引)以适应数据增长。 10. 插件与扩展 - 支持通过插件扩展功能,如安全认证、监控、分析、机器学习等。 整体架构设计使得 Elasticsearch 适用于日志分析、全文搜索、实时数据分析等场景,具备高性能、高可用和易扩展的特点。

了解 Elasticsearch 的概念及其与其他数据库的区别。

Elasticsearch 是一个分布式、开源的搜索与分析引擎,专为处理大规模数据而设计。其独特的架构支持实时搜索与分析,因此在日志管理、全文搜索和商业智能等应用场景中广受欢迎。Elasticsearch 架构的一个关键特性是采用分布式数据模型,从而实现水平扩展和高可用性。

节点(Node) 是 Elasticsearch 的单个实例(物理或虚拟服务器),每个节点都有唯一的 ID 和名称,并且只能属于一个集群。

...
Elasticsearch node

集群(Cluster) 是由一个或多个分布在不同机器上的节点组成的集合,这些节点协同工作以完成共同目标。集群中的每个节点可以被分配一个或多个角色,例如存储数据。

...
Cluster visualization
1{ 2 "_id": "1", 3 "name": "Pizza", 4 "price": 12.99, 5 "category": "Emtree", 6 "ingredients": [ 7 "dough", 8 "sauce", 9 "cheese", 10 "toppings" 11 ] 12}

索引(Index) 是具有相似特征的一组文档的集合。例如,以下示例展示了“菜品”和“演员”两个索引,每个索引包含两条文档。


菜品索引
1{ 2 "_id": "1", 3 "name": "Pizza", 4 "price": 12.99, 5 "category": "Emtree", 6 "ingredients": [ 7 "dough", 8 "sauce", 9 "cheese" 10 ] 11}
1{ 2 "_id": "2", 3 "name": "Spaghetti", 4 "price": 10.99, 5 "category": "Emtree", 6 "ingredients": [ 7 "eggs", 8 "bacon", 9 "parmesan cheese", 10 "pepper" 11 ] 12}
演员索引
1{ 2 "_id": "1", 3 "name": "leonardo dicaprio", 4 "age": 48, 5 "nationality": "American", 6 "Occupations": [ 7 "actor", 8 "film producer" 9 ], 10 "height": 1.83 11}
1{ 2 "_id": "2", 3 "name": "John Smith", 4 "age": 54, 5 "nationality": "American", 6 "Occupations": [ 7 "actor", 8 "rapper", 9 "film producer" 10 ], 11 "height": 1.88 12}

分片(Shard) 是索引数据的一个分区。每个分片包含索引中的一部分文档,并存储在集群中的某个节点上。创建索引时,默认会生成一个分片,但也可以配置为多个分片,并将它们分布到不同的节点上。

分片(Sharding) 是将索引划分为更小部分(分片)并将其分布到集群中各个节点的过程。这使得 Elasticsearch 能够通过增加节点实现横向扩展,并支持在多个分片上并行处理搜索请求。

下图展示了菜品索引和演员索引如何分布在三个分片上,这些分片分别位于三个不同的节点上。

...
Sharding visualization

使用分片在 Elasticsearch 中带来的优势包括:

  • 提升性能:通过将数据分布在多个分片上,搜索和索引操作可以并行执行,从而显著提升性能。
  • 增强容量:分片支持 Elasticsearch 的水平扩展能力,使其能够处理更大规模的数据。
  • 提高灵活性:分片允许数据分布在不同的硬件或基础设施上,便于资源分配和管理。

副本(Replica) 是分片的拷贝。副本用于提供高可用性和容错能力。当主分片发生故障或不可用时,其中一个副本可被提升为主分片,确保索引仍能正常进行搜索和写入操作。

此外,副本还可用于提升搜索性能。例如,当发起搜索请求时,可以在所有分片(包括副本)上并行执行查询,从而加快响应速度。

...
Replica visualization

Elasticsearch 与传统关系型数据库(RDBMS)存在一些相似之处。以下是两者在概念上的对应关系及差异说明:

  • 集群 vs 数据库:在 RDBMS 中,数据库通常指一组模式和多个表的集合;而在 Elasticsearch 中,一组索引被组织在一个集群中。

  • 索引 vs 表:表是行的集合,而索引是文档的集合。

  • 文档 vs 行:文档和行分别代表索引和表中存储的数据。行结构较为固定,而文档则更加灵活。

  • 字段 vs 列:字段和列都表示结构化数据模型中的单一数据属性。

  • 分片:在 Elasticsearch 和 RDBMS 中,该概念含义一致。

  • 副本:在 Elasticsearch 和 RDBMS 中,该概念含义一致。

...
Elasticsearch vs. RDBMS

Elasticsearch 简介

与 Elasticsearch 交互