图解Elasticsearch之一——索引创建过程

简介: 分片分配是将分片分配给节点的过程。 这可能发生在初始恢复,副本分配,重新平衡或添加或删除节点期间。 大多数时候,你不需要考虑它,这项工作是由Elasticsearch在后台完成的。

引言

这是国外培训ppt课程的节选内容。
以下是我们的Core Elasticsearch:Operations课程中的一些很棒的幻灯片,它们有助于解释分片分配的概念。 我们建议您更全面地了解这一点,但我会在此提供我们培训的概述:

分片分配是将分片分配给节点的过程。 这可能发生在初始恢复,副本分配,重新平衡或添加或删除节点期间。 大多数时候,你不需要考虑它,这项工作是由Elasticsearch在后台完成的。 如果您发现自己对这些细节感到好奇,本文将探讨在几种不同情况下的分片分配。

由于是图解,为方便阅读,我分了4篇文章逐一呈现。

1、认知前提

这是我们的4节点集群,我们将在内容中使用这些示例:

image.png

2、创建索引

image.png

图1:创建索引c

这是最简单的用例。 我们已经创建了一个索引c,为此我们必须分配新的分片。 如上,通过使用Kibana中的Console插件将第一个文档索引到新索引c中,使用灰色框中的命令进行索引相关操作。
对于索引c,我们创建了一个主分片和一个副本分片。 Master主节点需要创建索引c,并分配两个分片c0(主分片和副本分片)。 集群平衡的方式如下:

1、通过查看群集中每个节点包含的平均分片数,然后尝试使该数字尽可能接近相同
2、通过评估集群中的每个索引级别,并尝试在这些索引之间重新平衡分片。

这个过程有一些限制,这些限制是由分配决策者强加的。 主节点评估集群尝试做出的每个决策,并做出是/否决定。

3、分片分配机制

最干净的示例是您不能将主分片和副本分片数据放在同一节点上。

3.1、基于冷热节点类型设置分片

这允许您仅在具有某些属性的节点上放置分片,并接受或拒绝集群做出的决策。
这是控制此配置的用户驱动决策的示例。

image.png

知识点:集群的冷热数据分离。

当使用elasticsearch进行更大时间的数据分析用例时,我们建议使用基于时间的索引和分层架构,其中包含3种不同类型的节点(主节点,Hot热节点和Warm暖冷节点),我们将其称为“冷热数据分离 “架构。每个节点都有自己的特征,如下所述。

主节点

我们建议每个群集运行3个专用主节点,以提供最大的弹性性能。使用这些时,您还应将discovery.zen.minimum_master_nodes设置为2,这样可以防止出现“裂脑”情况。
利用专用主节点,仅负责处理集群管理和状态,提高整体稳定性。
因为它们不包含数据也不参与搜索和索引操作,所以它们在繁重索引或长时间的搜索期间可能不会遇到对JVM的相同需求。因此不太可能受到长时间垃圾收集暂停(gc pause)的影响。
因此,可以为它们配置CPU,RAM和磁盘配置,远低于数据节点所需的配置。

热节点

此专用数据节点执行集群中的所有索引操作。他们也拥有最新的、最常被查询的索引数据。
由于索引是CPU和IO密集型操作,因此这些服务器需要功能强大,并且需要连接SSD存储。
我们建议至少运行3个热节点以实现高可用性。
根据您希望收集和查询的最新数据量,您可能需要增加此数字以实现性能目标。

暖冷节点

这种类型的数据节点旨在处理大量不经常查询的只读索引。
由于这些索引是只读的,因此热节点倾向于使用大型连接磁盘(通常是机械磁盘)而不是SSD。
与热节点一样,我们建议至少使用3个热节点以实现高可用性。
和以前一样,需要注意的是,大量数据可能需要额外的节点来满足性能要求。
另请注意,CPU和内存配置通常需要接近热节点的配置。这只能通过测试类似于您在生产环境中遇到的查询来确定。

相关冷热节点设置和操作参考:
https://www.elastic.co/blog/hot-warm-architecture-in-elasticsearch-5-x

3.2、基于磁盘使用率分片

image.png

Master主节点监视群集上的磁盘使用情况并查看高/低警戒水位线。

3.3、分配分片的节流机制

节流——意味着原则上我们可以为节点分配一个分片,但是有太多的分片在后台需要持续恢复。
为了保护节点并允许恢复,分配决策器可以告诉集群等待并重试在下一次迭代中将分片分配给同一节点。

image.png

4、分片的初始化过程

一旦我们确定了主分片所属的位置,它就会被标记为“初始化”,并且决策将通过修改后的集群状态广播到集群,集群状态可供集群中的所有节点使用。

image.png

标记初始化后,节点将检测到它已分配新的分片, 将创建一个空的lucene索引,一旦完成,将通知主节点已准备好分片,主节点将分片标记为已启动,并发送另一个已修改的集群状态。
一旦分配了主分片的节点获得更新的集群状态,它就会将该分片标记为已启动。 因为它是主分片,现在可以索引它。

正如您所见,所有这些通信都是通过修改的集群状态完成的。 完成此循环后,主节点将执行重新路由并重新评估分片分配,从而可能决定上一次迭代中的节流限制的分片重新分配。

4.1 分配主分片

image.png

在我们的例子中,master现在必须尝试分配剩余的副本c0。 这也是分配决策者的决定,它阻止分配副本,直到主节点在包含它的节点上标记为已启动。

4.2 分配副本分片

此时,使用与上述相同的过程进行重新平衡,目标是确保整个群集中的数据平衡,并且在此示例的情况下,我们将按顺序将c0副本分片分配给群集中的node3 保持平衡。 这应该在群集中的每个节点上留下3个分片。

image.png

我们需要确保副本分片数据和主分片数据一致。

分配副本时,重要的是要了解我们要将任何丢失的数据从主分片复制到副本。
在此之后,主服务器将再次将副本标记为已启动并广播新的集群状态。

篇幅原因,后续的几个小章节:
集群重启、集群删除节点、移动分片引起的分片底层操作将后续跟进。

5、小结

文章原标题"every-shard-deserves-a-home“ 直译为每个分片都值得拥有一个家。
实际的含义想通过图解的方式将不同场景下主分片、副本分片的来龙去脉讲明白。

本来准备写一篇segment底层的文章,但看到了这一片忍不住要翻译一下,
水平有限,欢迎拍砖。

参考:https://www.elastic.co/blog/every-shard-deserves-a-home


image.png

Elasticsearch基础、进阶、实战第一公众号

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
327 5
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
244 3
|
存储 API 数据库
检索服务elasticsearch索引(Index)
【8月更文挑战第23天】
757 6
|
存储 缓存 监控
优化Elasticsearch 索引设计
优化Elasticsearch 索引设计
308 5
|
存储 JSON 关系型数据库
Elasticsearch 索引
【11月更文挑战第3天】
342 4
|
测试技术 API 开发工具
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
258 8
|
存储 搜索推荐 数据建模
Elasticsearch 的数据建模与索引设计
【9月更文第3天】Elasticsearch 是一个基于 Lucene 的搜索引擎,广泛应用于全文检索、数据分析等领域。为了确保 Elasticsearch 的高效运行,合理的数据建模和索引设计至关重要。本文将探讨如何为不同的应用场景设计高效的索引结构,并分享一些数据建模的最佳实践。
612 3
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
自然语言处理 Java 索引
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
260 0