Elasticsearch中的碎片和副本

我试图了解Elasticsearch中的碎片和副本是什么,但我无法理解它。 如果我下载Elasticsearch并运行脚本,那么从我知道的我已经开始一个单一节点的集群。 现在这个节点(我的电脑)有5个碎片(?)和一些副本(?)。

他们是什么,我有5个重复的索引? 如果是这样的话 我可能需要一些解释。

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

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

当你创build一个索引时(索引第一个文档时也会自动创build一个索引),你可以定义它将由多less个碎片组成。 如果你没有指定一个数字,它将有默认的碎片数量:5个原色。 这是什么意思?

这意味着elasticsearch将创build5个主要的碎片,其中将包含您的数据:

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

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

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

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

由于剩下的两个碎片已经移动到新开始的节点:

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

为什么会发生? 由于elasticsearch是一个分布式search引擎,您可以使用多个节点/机器来pipe理大量的数据。

每个elasticsearch索引至less由一个主分片组成,因为这是存储数据的地方。 但是,每一个碎片都是有代价的,因此如果你有一个节点,而且没有可预见的增长,那就坚持一个主碎片。

另一种types的碎片是复制品。 缺省值为1,表示每个主分片都将被复制到另一个分片中,该分片将包含相同的数据。 副本用于提高search性能和故障转移。 副本分片永远不会分配到相关主节点所在的同一节点上(这几乎就像将备份放在与原始数据相同的磁盘上)。

回到我们的例子,有一个副本,我们将在每个节点上有整个索引,因为3副本分片将被分配到第一个节点上,并且它们将包含与第二个节点上的主元素完全相同的数据:

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

第二个节点相同,它将包含第一个节点上主分片的副本:

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

有了像这样的设置,如果一个节点closures,你仍然有整个索引。 副本分片将自动成为初选,尽pipe节点发生故障,集群仍能正常工作,如下所示:

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

由于您有"number_of_replicas":1 ,副本不能再分配,因为它们从不分配在其主节点所在的同一节点上。 这就是为什么你将有5个未分配的碎片,复制品和群集状态将YELLOW而不是GREEN 。 没有数据丢失,但可能会更好,因为一些碎片不能分配。

只要已经离开的节点备份,它将再次join集群,副本将被重新分配。 第二个节点上的现有碎片可以被加载,但是它们需要与其他碎片同步,因为写入操作很可能发生在节点closures的时候。 在此操作结束时,群集状态将变为GREEN

希望这个为你澄清事情。

如果你真的不喜欢看到黄色。 您可以将副本数设置为零:

 curl -XPUT 'localhost:9200/_settings' -d ' { "index" : { "number_of_replicas" : 0 } } ' 

请注意,只能在本地开发框中执行此操作。

一个索引被分成碎片以便分发和扩展。

副本是碎片的副本,并在节点丢失时提供可靠性。 在这个数字中经常出现混乱,因为副本计数== 1意味着集群必须具有可用的绿色状态的分片的主副本和复制副本。

为了创build副本,您的群集中必须至less有2个节点。

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

最好的问候,保罗

一个索引被分成碎片以便分发和扩展。

副本是碎片的副本。

一个节点是一个属于一个集群的弹性search的运行实例。

群集由共享相同群集名称的一个或多个节点组成。 每个集群都有一个由集群自动select的主节点,如果当前主节点发生故障,则可以replace它们。

在ElasticSearch中,我们将文档索引编入索引。 每个索引都有内部分发数据的分片数量,内部分片存储着作为数据核心存储的Lucene分片。 所以如果索引有5个碎片,这意味着数据已经分布在碎片中,而不是同样的数据存在碎片中。

注意说明ES的核心videohttps://www.youtube.com/watch?v=PpX7J-G2PEo

多指数或多个碎片的文章弹性search,多个索引与一个索引和不同数据集的types?