当前位置: 首页 > 知识库问答 >
问题:

碎片和副本弹性搜索

毕嘉
2023-03-14

假设在创建索引时,我没有为此设置任何副本,如果我使用update settings API进行更新,并且将副本状态更改为1。如果我有2个节点,那么应该在第二个节点上创建副本,因为在主节点侧,由于集群状态显示黄色,碎片没有分配给node2,所以不会创建副本,即使我们将副本启用为1。

请分享为什么副本碎片没有分配到Node2?

但在集群启动时,节点显示它们检测到并相互连接。

共有1个答案

仲孙经赋
2023-03-14

下面是弹性搜索的基本概念

安装?基本概念有几个概念是ElasticSearch的核心。从一开始就理解这些概念将极大地帮助简化学习过程

Elasticsearch是一个近实时搜索平台。这意味着从索引一个文档到它成为可搜索的时间有一个轻微的延迟(通常是一秒)。

集群集群是一个或多个节点(服务器)的集合,它们一起保存了您的全部数据,并提供跨所有节点的联合索引和搜索功能。集群由一个唯一的名称标识,缺省情况下这个名称是“elasticsearch”。这个名称很重要,因为如果节点被设置为通过其名称加入群集,则该节点只能是群集的一部分。

确保不要在不同的环境中重用相同的集群名称,否则可能会导致节点加入错误的集群。例如,您可以将logg-dev、logg-stage和logg-prod用于开发、分期和生产集群。

请注意,集群中只有一个节点是有效的,而且完全没有问题。此外,您还可能有多个独立的集群,每个集群都有自己唯一的集群名称。

节点节点是单个服务器,它是集群的一部分,存储数据,并参与集群的索引和搜索功能。与集群一样,节点由名称标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。如果不想要默认的节点名称,可以定义所需的任何节点名称。这个名称对于管理非常重要,因为您希望标识网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。

可以将节点配置为通过群集名称加入特定的群集。默认情况下,每个节点都被设置为加入一个名为elasticsearch的集群,这意味着,如果您在网络上启动多个节点,并且假设它们能够发现彼此,那么它们都将自动形成并加入一个名为elasticsearch的集群。

在单个集群中,可以有任意多个节点。此外,如果当前没有其他Elasticsearch节点在您的网络上运行,则默认情况下启动单个节点将形成一个名为Elasticsearch的新的单节点集群。

索引索引是具有某种相似特征的文档的集合。例如,您可以有一个客户数据索引、另一个产品目录索引和另一个订单数据索引。索引由名称(必须全部为小写)标识,在对索引中的文档执行索引、搜索、更新和删除操作时,该名称用于引用索引。

在单个集群中,可以定义任意多个索引。

类型,则可以定义一个或多个类型。类型是索引的逻辑类别/分区,其语义完全取决于您。通常,类型是为具有一组公共字段的文档定义的。例如,让我们假设您运行一个博客平台,并将您的所有数据存储在单个索引中。在该索引中,您可以为用户数据定义一种类型,为博客数据定义另一种类型,以及为评论数据定义另一种类型。

文档文档是可以索引的基本信息单位。例如,您可以为单个客户提供一个文档,为单个产品提供另一个文档,为单个订单提供另一个文档。本文用JSON(JavaScript Object Notathtml" target="_blank">ion)表示,这是一种普遍存在的internet数据交换格式。

在索引/类型中,可以存储任意多的文档。请注意,尽管文档物理上驻留在索引中,但文档实际上必须被索引/分配给索引内部的类型。

碎片和副本索引可能存储大量数据,这些数据可能超过单个节点的硬件限制。例如,占用1TB磁盘空间的10亿个文档的单个索引可能不适合单个节点的磁盘,或者可能太慢,无法单独为来自单个节点的搜索请求提供服务。

为了解决这个问题,Elasticsearch提供了将索引细分为多个称为碎片的部分的能力。创建索引时,可以简单地定义所需的碎片数。每个碎片本身就是一个功能齐全的独立的“索引”,可以托管在集群中的任何节点上。

分片之所以重要,主要有两个原因:

它允许您水平地拆分/缩放您的内容量,允许您跨分片(可能在多个节点上)分布和并行化操作,从而提高性能/吞吐量,分片的分布机制以及它的文档如何聚合回搜索请求完全由Elasticsearch管理,并且对您作为用户是透明的。

在任何时候都可能出现故障的网络/云环境中,在碎片/节点因某种原因脱机或消失的情况下,使用故障转移机制是非常有用的,并且强烈建议使用故障转移机制。为此,Elasticsearch允许您将索引碎片的一个或多个副本复制成所谓的副本碎片,或简称副本。

复制之所以重要,主要有两个原因:

它在碎片/节点发生故障时提供了高可用性。由于这个原因,必须注意,副本分片绝不会分配在与复制它的原始/主分片相同的节点上。它允许您扩展您的搜索量/吞吐量,因为搜索可以并行地在所有副本上执行。总而言之,每个索引可以拆分为多个碎片。索引也可以被复制零次(意味着没有副本)或更多次。一旦复制,每个索引将具有主碎片(从其复制的原始碎片)和副本碎片(主碎片的副本)。可以在创建索引时为每个索引定义碎片和副本的数量。创建索引后,可以随时动态更改副本的数量,但不能在事后更改碎片的数量。

默认情况下,在Elasticsearch中为每个索引分配5个主碎片和1个副本,这意味着如果集群中至少有两个节点,则索引将有5个主碎片和另外5个副本碎片(1个完整副本),每个索引总共有10个碎片。

注意:每个Elasticsearch碎片都是一个Lucene索引。在一个Lucene索引中可以有最大数量的文档。截至LUCENE-5843,限制为2,147,483,519个(=integer.max_value-128)文档。可以使用_cat/shards API监视碎片大小。

 类似资料:
  • 在学习ElasticSearch的过程中,我偶然发现并没有得出最终结论。 ElasticSearch的最大碎片大小是多少

  • 我的ElasticSearch集群中有2个节点,有1个索引。索引设置为有5个碎片和1个副本。我希望所有5个碎片在一个节点,与一个副本的每一个在另一个节点。我不希望ElasticSearch在两个节点之间平均分配这5个碎片(以及平均分配副本)。 换句话说,我希望一个节点严格作为备份,保存所有副本。这在ElasticSearch中是可能的吗?如果是,我需要配置哪些设置?

  • 我试图理解什么是碎片和副本在Elasticsearch中,但我没有设法理解它。如果我下载Elasticsearch并运行脚本,那么根据我所知,我已经启动了一个具有单个节点的集群。现在这个节点(我的PC)有5个碎片(?)还有一些复制品(?)。 它们是什么,我有5个重复的索引吗?如果是,为什么?我需要一些解释。

  • 我正在尝试在我的本地机器上安装弹性搜索环境的单集群-多节点环境。我混淆了碎片和复制品的概念 情况1)在下面的pic中:emp索引碎片数=1和副本数=1,这似乎很好,因为主节点不包含副本,碎片数应该是1,所以分配另一个节点中的一个成为它的碎片和副本 情况2)在情况2中,员工索引-i增加了碎片数=2和副本数=2-> 下面那个头部插件在暗示什么 1)我们设置的碎片数量是否存在于每个节点中-例如,在emp

  • 有人能告诉我如何选择弹性搜索索引的碎片和副本数吗? 我已将索引的大小配置为20GB,但不知道如何选择编号或碎片和副本 注意:我有5个节点,3个主节点(用于热数据),2个数据节点(一个用于热数据,第二个用于冷数据) 谢谢你的帮助

  • 我是Android新手。我想建立一个标签格式的应用程序。我找到了许多使用了活动的文档。在许多情况下,还使用了碎片活动。我不确定从哪一个开始更好。请建议我是否应该使用或以选项卡格式开始开发?