Elasticsearch权威指南:分布式集群中添加索引的深度解析

Elasticsearch权威指南:分布式集群中添加索引的深度解析

elasticsearch-definitive-guide The Definitive Guide to Elasticsearch elasticsearch-definitive-guide 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-definitive-guide

索引的本质与作用

在Elasticsearch中,索引(index)是数据存储的核心逻辑单元。它本质上是一个指向一个或多个物理分片(shard)的逻辑命名空间。理解索引的运作机制对于构建高效可靠的搜索系统至关重要。

分片:数据存储的基本单元

分片是Elasticsearch中最基础的工作单元,每个分片只保存索引中的部分数据。从技术实现上看:

  1. 每个分片都是一个独立的Lucene实例
  2. 每个分片都是一个完整的搜索引擎
  3. 文档实际存储在分片中,但应用程序不直接与分片交互

分片机制是Elasticsearch实现分布式存储的核心。文档存储在分片中,而分片则分布在集群的各个节点上。当集群规模变化时,Elasticsearch会自动在节点间迁移分片以保持集群平衡。

主分片与副本分片

Elasticsearch中的分片分为两种类型:

主分片(Primary Shard)

  • 每个文档只属于一个主分片
  • 主分片数量决定了索引的最大数据容量
  • 在索引创建时固定,之后无法更改

副本分片(Replica Shard)

  • 是主分片的完整拷贝
  • 提供数据冗余,防止硬件故障
  • 可处理读请求(搜索和文档检索)
  • 数量可随时调整

虽然理论上单个主分片可存储多达Integer.MAX_VALUE - 128个文档,但实际容量取决于多种因素:硬件配置、文档大小和复杂度、索引和查询模式以及预期的响应时间。

创建索引实践

让我们通过一个具体例子来理解索引创建过程。假设我们要在单节点集群中创建一个名为"blogs"的索引:

PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

这个请求创建了一个包含3个主分片和1个副本(即每个主分片有1个副本)的索引。在单节点集群中,所有3个主分片都会被分配到该节点。

集群健康状态分析

创建索引后检查集群健康状态,通常会看到状态为"yellow"。这表示:

  1. 所有主分片都正常运行(集群能成功处理任何请求)
  2. 但并非所有副本分片都处于活动状态
  3. 实际上,所有3个副本分片都处于"未分配"状态

这种设计是合理的,因为将主分片和它的副本放在同一个节点上没有意义——如果该节点故障,我们将丢失所有数据副本。

生产环境考量

在单节点集群中运行虽然功能完整,但存在数据丢失风险。为了获得高可用性,建议:

  1. 至少部署3个节点组成的集群
  2. 确保副本分片分布在不同的节点上
  3. 根据数据量和查询负载合理设置分片数量

记住,主分片数量在索引创建后无法更改(除非重建索引),而副本数量可以随时调整。因此,在创建索引时就需要仔细规划主分片数量。

通过理解索引和分片的工作原理,您可以更好地设计Elasticsearch集群架构,确保系统既具备良好的性能又能保证数据安全。

elasticsearch-definitive-guide The Definitive Guide to Elasticsearch elasticsearch-definitive-guide 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-definitive-guide

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍妲葵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值