碎片和副本弹性搜索



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

请分享我为什么副本碎片没有分配给node2?

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

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

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

近实时(NRT)Elasticsearch是一个近实时搜索平台。这意味着,从为文档编制索引到文档可搜索,会有一段轻微的延迟(通常为一秒钟)。

集群集群是一个或多个节点(服务器)的集合,这些节点将您的整个数据集中在一起,并在所有节点上提供联合索引和搜索功能。集群由一个唯一的名称标识,默认情况下该名称为"弹性搜索"。这个名称很重要,因为如果节点被设置为按名称加入集群,则该节点只能是集群的一部分。

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

请注意,只有一个节点的集群是有效的,而且非常好。此外,您还可以有多个独立的集群,每个集群都有自己唯一的集群名称。

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

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

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

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

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

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

文档文档是可以编制索引的基本信息单元。例如,您可以有一个针对单个客户的文档,另一个针对单一产品的文档,以及另一个用于单一订单的文档。该文档用JSON(JavaScript对象表示法)表示,JSON是一种普遍存在的互联网数据交换格式。

在索引/类型中,可以存储任意数量的文档。请注意,尽管文档在物理上位于索引中,但文档实际上必须被索引/分配给索引中的类型。

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

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

碎片很重要,主要有两个原因:

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

在任何时候都可能出现故障的网络/云环境中,如果碎片/节点因任何原因离线或消失,则具有故障切换机制是非常有用的,强烈建议使用该机制。为此,Elasticsearch允许您将索引碎片的一个或多个副本制作成所谓的副本碎片,简称副本。

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

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

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

注意:每个Elasticsearch碎片都是一个Lucene索引。在一个Lucene索引中可以有最大数量的文档。截至LUCENE-5833,限制为2147483519(=Integer.MAX_VALUE-128)个文档。您可以使用_cat/shards api来监控碎片大小。

最新更新