ElasticSearch 是如何实现分布式的?

ElasticSearch 是如何实现分布式的?

如果你正在准备技术面试,或者想深入理解 ElasticSearch(简称 ES)是如何实现分布式的,这篇文章将用通俗易懂的方式来讲解。

1. 为什么需要分布式搜索?

在互联网行业,搜索是一个重要的功能,像电商网站搜索商品、社交平台搜索用户、企业内部搜索文档等,几乎所有大型系统都依赖高效的搜索功能。

最早,搜索引擎主要依赖 Lucene,这是一个强大的搜索库。但 Lucene 本身并不支持分布式,它更适合单机环境。随着数据量越来越大,单机搜索性能不够用了,于是出现了基于 Lucene 的分布式搜索引擎,比如 ElasticSearch(ES)。

今天,大部分公司都在用 ES 作为搜索引擎,因此 ES 也成了面试中的高频考点。常见的一个问题是:ElasticSearch 是如何实现分布式的?

2. ES 的分布式架构

ElasticSearch 采用 分布式架构 ,意味着它可以运行在多台机器上,并把数据分散存储到不同的服务器中,实现横向扩展,提高搜索性能和可靠性。

可以用一个快递公司来类比 ES 的分布式架构:

  • 索引(Index)相当于仓库:一个索引存储的是某类数据,比如订单数据。
  • 分片(Shard)相当于多个快递站点:数据会被拆分存储到不同的 shard 里,每个 shard 只存一部分数据,类似于不同的快递站点各自负责一部分快递。
  • 副本(Replica)相当于备用仓库:每个 shard 都有副本,如果某个 shard 发生故障,系统可以用副本数据继续提供服务,不影响搜索功能。

3. ES 里的核心概念

为了更清楚地理解 ES 的架构,我们用 MySQL 来类比:

ElasticSearch 概念 MySQL 类比 解释
Index 数据库中的一张表 存储某一类数据,如订单数据、用户数据等
Type(已废弃) 表中的分类字段 ES 7.x 以后已移除,之前用于区分类似的数据
Mapping 表的结构 定义每个字段的数据类型
Document 表中的一行数据 ES 里存储的最小数据单元
Field 表中的字段 每个文档由多个字段组成

举个例子:

假设我们有一个订单索引 order_idx,存储所有的订单数据,相当于 MySQL 里的一张 order 表。

每条订单数据是一个 Document ,里面包含订单 ID、商品名称、价格等多个 Field

4. ES 的分片(Shard)机制

ElasticSearch 之所以能高效处理大规模数据,关键在于它的 分片(Shard)机制

假设你是快递公司的老板,有 300 万个包裹要送,如果让一个快递员送完所有包裹,肯定忙不过来。但是如果把 300 万个包裹拆分到 3 个快递站,每个快递站各自负责 100 万个包裹,送快递的效率就大大提升了。

ES 也是同样的道理:

  • 一个索引(Index)可以拆分成多个分片(Shard)。
  • 每个分片存储一部分数据,多个分片分布在不同的服务器上。
  • 查询时,ES 可以同时在多个分片上并行处理请求,提高搜索性能。

例如:

  • 你有 3T 订单数据,拆分成 3 个 shard,每个 shard 存 1T 数据。
  • 如果数据增长到 4T,可以新建一个 4 个 shard 的索引,重新分配数据。

5. 主分片(Primary Shard)和副本分片(Replica Shard)

为了保证数据可靠性,ES 采用了 主分片(Primary Shard)+ 副本分片(Replica Shard) 机制。

5.1 主分片(Primary Shard)

  • 负责数据的存储和查询。
  • 当你向 ES 写入数据时,数据会先存到主分片。

5.2 副本分片(Replica Shard)

  • 作为主分片的备份,存储相同的数据。
  • 当主分片宕机时,ES 可以用副本分片来继续提供服务,保证高可用。

比如:

  • 你的 ES 集群有 3 个主分片,每个主分片都有 1 个副本。
  • 那么 ES 实际上会有 6 个 shard(3 个主分片 + 3 个副本分片)。
  • 如果一台服务器宕机,数据仍然可用。

6. Master 节点和故障恢复

ElasticSearch 采用 主节点(Master)+ 数据节点(Data Node) 架构,保证集群的正常运行。

  • Master 节点:负责管理整个集群,比如索引创建、分片分配、主从切换等。
  • Data 节点:负责存储数据和执行搜索查询。

6.1 Master 节点的选举

如果 Master 节点宕机,ES 会自动选举一个新的 Master,保证集群不会崩溃。

6.2 故障恢复机制

假设某台服务器宕机,导致主分片不可用,ES 会:

  1. 让副本分片(Replica Shard)切换成新的主分片(Primary Shard)。
  2. 等宕机的服务器恢复后,重新分配副本分片。

这个机制确保即使服务器故障,ES 也能继续提供搜索和数据存储服务。

7. 结语

ElasticSearch 作为分布式搜索引擎,核心原理就是 数据分片 + 副本存储 + 主节点管理

简单来说,ES 就像一个高效的快递网络,把数据拆成多个小块(Shard),分发到不同的服务器上,同时保持数据的副本,确保高性能和高可用。

如果你在面试中被问到 ES 的分布式架构,可以用上面这个类比来回答,相信面试官会对你的理解能力印象深刻!

相关推荐
猿毕设6 分钟前
【FL0090】基于SSM和微信小程序的球馆预约系统
java·spring boot·后端·python·微信小程序·小程序
山间点烟雨15 分钟前
3. 前后端实现压缩包文件下载
前端·后端·压缩包
risc12345617 分钟前
【Elasticsearch】Set up a data stream 创建data stream
elasticsearch
m0_7482386319 分钟前
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
spring boot·后端·mybatis
aircrushin31 分钟前
【PromptCoder + Cursor】利用AI智能编辑器快速实现设计稿
前端·后端·html
木木与代码(接项目)42 分钟前
Git常用命令
chrome·git·elasticsearch
一直在路上的码农1 小时前
ES时序数据库的性能优化
运维·elasticsearch·性能优化·时序数据库
m0_748234341 小时前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang
怪咖码农1 小时前
Java面试常问的面试题
java·开发语言·面试
Oo_Amy_oO2 小时前
使用SDKMAN!安装springboot
spring boot·后端·sdkman