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

Elasticsearch中的碎片和副本

齐泰
2023-03-14

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

它们是什么,我有5个重复的索引吗?如果是,为什么?我需要一些解释。

共有2个答案

房育
2023-03-14

索引被分解成碎片,以便对它们进行分配和缩放。

副本是碎片的副本,在节点丢失时提供可靠性。这个数字经常会混淆,因为replica count==1意味着集群必须有碎片的主副本和复制副本才能处于绿色状态。

要创建副本,群集中必须至少有2个节点。

您可能会发现此处的定义更容易理解:http://www.elasticsearch.org/guide/reference/glossary/

最好的问候,保罗

景靖琪
2023-03-14

我会试着用一个真实的例子来解释,因为你得到的答案和回复似乎对你没有帮助。

下载elasticsearch并启动它时,将创建一个elasticsearch节点,该节点尝试加入现有集群(如果可用)或创建一个新集群。假设您使用一个节点创建了自己的新集群,也就是刚刚启动的节点。我们没有数据,因此我们需要创建一个索引。

创建索引时(索引也是在为第一个文档创建索引时自动创建的),可以定义它将由多少个碎片组成。如果您没有指定一个数字,它将有一个缺省的碎片数:5个Primaries。这是什么意思?

这意味着elasticsearch将创建包含您数据的5个主要碎片:

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

每次索引文档时,elasticsearch都会决定哪个主碎片应该保存该文档,并将其索引到该文档。主碎片不是数据的副本,它们是数据!拥有多个碎片确实有助于利用单机上的并行处理,但关键是,如果我们在同一集群上启动另一个elasticsearch实例,碎片将以均匀的方式分布在集群上。

然后,节点1将只保存例如三个分片:

 ____    ____    ____ 
| 1  |  | 2  |  | 3  |
|____|  |____|  |____|

由于剩余的两个碎片已移动到新启动的节点:

 ____    ____
| 4  |  | 5  |
|____|  |____|

为什么会出现这种情况?因为elasticsearch是一个分布式搜索引擎,这样您就可以利用多个节点/机器来管理大量的数据

每个elasticsearch索引都至少由一个主碎片组成,因为这是存储数据的地方。但是,每一个分片都是有代价的,因此,如果您只有一个节点,并且没有可预见的增长,那么只需使用一个主分片即可。

另一种类型的碎片是副本。默认值为1,这意味着每个主碎片都将复制到包含相同数据的另一个碎片。副本用于提高搜索性能和故障转移。副本碎片永远不会被分配在相关主数据所在的同一节点上(这几乎就像将备份与原始数据放在同一磁盘上一样)。

回到我们的示例,对于1个副本,我们将在每个节点上拥有整个索引,因为将在第一个节点上分配2个副本碎片,并且它们将包含与第二个节点上的主碎片完全相同的数据:

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4R |  | 5R |
|____|  |____|  |____|  |____|  |____|

第二个节点也是如此,它将包含第一个节点上的主碎片的副本:

 ____    ____    ____    ____    ____
| 1R |  | 2R |  | 3R |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

通过这样的设置,如果一个节点关闭,您仍然拥有整个索引。副本碎片将自动成为主要碎片,尽管节点出现故障,集群仍将正常工作,如下所示:

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

由于您有“number_of_replicas”:1,因此无法再分配副本,因为它们从未分配在主服务器所在的同一节点上。这就是为什么您将有5个未分配的碎片、副本,并且集群状态将是黄色而不是绿色。没有数据丢失,但它可能更好,因为某些碎片不能分配。

一旦备份了离开的节点,它就会再次加入集群,并重新分配副本。可以加载第二个节点上的现有分片,但它们需要与其他分片同步,因为写操作很可能发生在节点关闭时。在此操作结束时,群集状态将变为绿色

希望这能为你澄清问题。

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

  • 问题内容: 我试图了解Elasticsearch中的分片和副本,但是我没有设法理解它。如果我下载Elasticsearch并运行脚本,那么据我所知,我已经启动了具有单个节点的集群。现在,该节点(我的PC)具有5个分片(?)和一些副本(?)。 它们是什么,我有5个重复的索引吗?如果可以,为什么?我可能需要一些解释。 问题答案: 我将尝试用一个真实的例子来解释,因为您得到的答案和答复似乎对您没有帮助。

  • 我正在运行一个2节点的elasticsearch集群,并将我的所有索引配置为2个主碎片和1个副本。起初,我认为每个节点将存储1个主碎片和1个副本,尽管这不是正在发生的事情。 如上所示,每个碎片都由单个节点托管,没有分配副本。 我做错了什么?

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

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

  • 由于不推荐使用TabActivity,我需要找到一种方法来使用片段。在我知道它如何工作之前,我已经使用了碎片,但我需要一个指南来创建我的标签主机与碎片活动。我在互联网上找到了几个例子,它们都是关于将片段放入标签的容器中的。