当前位置: 首页 > 面试题库 >

Elasticsearch中的分片和副本

权韬
2023-03-14
问题内容

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

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


问题答案:

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

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

创建索引时(在索引第一个文档时也会自动创建索引),您可以定义它将组成多少个分片。如果您不指定数字,它将具有默认的分片数量:5个原色。这是什么意思?

这意味着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个未分配的分片,副本和集群状态YELLOWGREEN。没有数据丢失,但是由于不能分配某些分片,因此可能会更好。

一旦备份了剩下的节点,它将再次加入群集,并且副本将再次分配。可以加载第二个节点上的现有分片,但它们需要与其他分片同步,因为写操作最有可能在节点关闭时发生。该操作结束时,群集状态将变为GREEN

希望这可以为您澄清一切。



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

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

  • 我正在建立Shared集群的过程中。 我还想在集群中配置读副本。 假设有一个3,1个主要和2个次要的碎片。写将转到碎片的主成员,但我可以将所有读发送到次成员吗?

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

  • 本文向大家介绍ElasticSearch中的分片是什么? 相关面试题,主要包含被问及ElasticSearch中的分片是什么? 时的应答技巧和注意事项,需要的朋友参考一下 在大多数环境中,每个节点都在单独的盒子或虚拟机上运行。 索引 - 在Elasticsearch中,索引是文档的集合。 分片 -因为Elasticsearch是一个分布式搜索引擎,所以索引通常被分割成分布在多个节点上的被称为分片的

  • 选择恰当的分片数量和分片副本数量 最开始使用ElasticSearch时,一般都是创建一个索引,导入数据,然后发送查询命令检索数据。我们确信系统运行庚子,至少在最开始,数据量不大而且QPS(Query Per Second)也不高的时候运行良好。在幕后,ElasticSearch创建了一些分片来存储数据,也可能还会创建分片副本(例如,如果用默认配置),而且用户在配置方面也不用过多地操心。 当应用程