ElasticSearch 是如何实现分布式的?

news/2025/2/27 9:09:32

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 的分布式架构,可以用上面这个类比来回答,相信面试官会对你的理解能力印象深刻!


http://www.niftyadmin.cn/n/5869849.html

相关文章

【Python爬虫(80)】当Python爬虫邂逅边缘计算:探索数据采集新境界

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

AWS S3 如何设置公开访问权限?

1.让整个bucket都有公开访问权限 1.1关闭【阻止公共读】 1.2关闭ACL访问控制 1.3打开桶策略 这样桶内所有的图片就能访问了 2.只开放特定文件让其具有访问权限? 2.1关闭【阻止公共读】 如之前的图示 2.2打开ACL控制 2.3单个文件打开公共读

SOC-ATF 安全启动BL31流程分析(3)

一、BL31启动流程 与bl1和bl2不同,bl31包含两部分功能,在启动时作为启动流程的一部分,执行软硬件初始化以及启动bl32和bl33镜像。在系统启动完成后,将继续驻留于系统中,并处理来自其它异常等级的smc异常,以…

Element Plus: el-card的内容滚动问题

问题 由于el-card的body div默认没有设置的height,因此它里面的内容高度超出后不能滚动。如下图所示: 方案 通过body-style(也可以使用body-class)设置height。如下图所示:

@Aspect 注解是如何被解析和处理的

Aspect 注解是 Spring AOP (Aspect-Oriented Programming) 的核心注解之一,用于声明一个切面类。Spring 容器在启动时会解析和处理 Aspect 注解,并将其转换为相应的代理对象,以实现 AOP 功能。 解析和处理流程: 容器启动&#xf…

MySQL DBA技能指南

1. MySQL 安装与配置 安装和部署:掌握 MySQL 在不同操作系统上的安装方法(Linux、Windows、Docker 等)。配置管理:熟悉 MySQL 配置文件(my.cnf 或 my.ini)的设置与优化,了解常见的配置参数&…

(十 一)趣学设计模式 之 组合模式!

目录 一、 啥是组合模式?二、 为什么要用组合模式?三、 组合模式的实现方式四、 组合模式的优缺点五、 组合模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…

道可云人工智能每日资讯|深圳将设立人工智能和机器人产业基金

道可云元宇宙每日简报(2025年2月26日)讯,今日元宇宙新鲜事有: 上海青浦发布国际产业协作元宇宙平台 近日,“2025出海企业与跨境专业服务论坛”在上海青浦区徐泾镇举行。论坛上重磅发布三大全球化服务平台&#xff0c…