我不了解ES中的分片配置。 关于ES中的分片,我几乎没有问题:
主分片的数量是通过index.number_of_shards
参数配置的,对吗?
因此,这意味着每个索引配置了分片数。 如果是这样,如果我有2个索引,那么我将在节点上有10个分片?
假设我有一个节点(节点1)配置了3个分片和1个副本。 然后,我在同一个集群中创建一个具有2个分片的新节点(节点2)。 所以,我假设我只复制两个碎片,对吧?
此外,如果节点1出现故障,集群如何“知道”它应该有3个分片而不是2个,会发生什么?由于我在节点2上只有2个分片,这意味着我丢失了节点1中其中一个分片的数据?
答案 0 :(得分:8)
首先,我开始阅读索引,主分片,副本分片和节点以了解差异:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/glossary.html
这是一个非常好的描述:
2.3索引基础
elasticsearch中最大的单个数据单元是一个索引。索引 是elasticsearch中文档的逻辑和物理分区。 文档和文档类型是唯一的每个索引。索引没有 了解其他索引中包含的数据。从一个操作 立场,设置了许多性能和耐久性相关的选项 仅在每个索引级别。从查询的角度来看,同时 elasticsearch通常支持跨索引搜索 使搜索设计更具组织意义 个别指数。
Elasticsearch索引与“数据库”抽象最相似 在关系世界。弹性搜索索引是完全分区的 单个运行的服务器实例中的Universe。文件和类型 映射的范围是每个索引,因此可以安全地重用名称和ID 跨索引。索引也有自己的群集设置 复制,分片,自定义文本分析以及许多其他问题。
elasticsearch中的索引与Lucene索引的映射不是1:1 事实上,在可配置数量的Lucene索引中进行分片,5 默认情况下,每个分片有1个副本。一台机器可能有一个 给定索引的分片数量多于或少于其他分片 集群中的计算机。 Elasticsearch尝试保留总数据 所有机器上的所有索引相等,即使这意味着 某些指数可能在给定的情况下不成比例地表示 机。每个分片都有一个可配置数量的完整副本 始终存储在唯一的实例上。如果群集不大 足以支持群集的指定数量的副本 健康将被报告为退化的“黄色”状态。基本开发 因此,弹性搜索的设置总是认为它是 在默认索引下,在降级状态下运行,单个 正在运行的实例没有对等方可以将其数据复制到。请注意这一点 对其用于开发目的的操作没有实际影响。它 但是,建议elasticsearch始终在多个上运行 生产环境中的服务器。作为一个集群数据库,很多 数据保证在多个节点上可用。
从这里开始:http://exploringelasticsearch.com/modeling_data.html#sec-modeling-index-basics
创建索引时,您可以告诉它有多少主分片和副本分片http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html。 ES默认为每个主要5个主分片和1个副本分片,总共10个分片。
如果主节点和它的副本不能驻留在同一节点上,这些分片将在群集中有多少个节点上进行平衡。因此,如果您从2个节点开始,每个主节点默认5个主分片和1个副本,则每个节点将获得5个分片。添加更多节点,每个节点丢弃的分片数。添加更多索引,每个节点的分片数量增加。
在所有情况下,节点数必须比配置的副本数大1。因此,如果配置1个副本,则应该有2个节点,以便主节点可以在一个节点上,而单个副本在另一个节点上,否则将不会分配副本,并且您的群集状态将为黄色。如果您将其配置为2个副本,这意味着1个主分片和2个副本分片,则至少需要3个节点才能将它们全部分开。等等。
您的问题无法直接回答,因为它们基于对ES如何运作的错误假设。您没有添加带分片的节点 - 您添加节点,然后ES将重新平衡整个群集中的现有分片。是的,如果你愿意,你可以对此有一些控制权,但在你更熟悉ES操作之前我不会这样做。我在这里阅读:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-allocation.html和此处:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-reroute.html和此处:http://exploringelasticsearch.com/advanced_techniques.html#advanced-routing
从上一个链接:
8.1.1 Elasticsearch路由如何工作
了解路由在大型弹性搜索群集中非常重要。通过 对路由数量进行细粒度控制 所使用的资源可以大大减少,通常是数量级。
弹性搜索扩展的主要机制是分片。 分片是分割数据和计算的常用技术 跨多个服务器,其中文档的属性具有功能 返回应用于它的一致值以确定哪个 它将存储在服务器上。 elasticsearch中使用的值 默认情况下是文档的_id字段。用于转换的算法 分片ID的值是所谓的一致散列 算法
保持良好的集群性能取决于甚至分片 平衡。如果数据在群集中分布不均匀 机器将被过度使用,而其他机器将大部分闲置。 为了避免这种情况,我们甚至想要一个数字分布 我们的一致哈希算法尽可能。文档ID很好 通常是因为如果它们是UUID,它们是均匀分布的 或单调增加的ids(1,2,3,4 ......)。
这是默认方法,它通常可以很好地解决 整个群集中的数据出现问题。这也意味着 只需要将单个文档的提取路由到该分片 文件哈希。但是路由查询怎么样?例如,如果 我们将用户历史存储在elasticsearch中,并使用UUID 每条用户历史数据,用户数据将被均匀存储 整个集群。然而,这里有一些浪费 意味着我们对该用户数据的搜索具有较差的数据位置。 必须在索引中的所有分片上运行查询,然后运行 所有可能的数据。假设我们有很多用户可能 通过一致地路由所有给定来提高查询性能 用户的数据到单个分片。一旦用户的数据一直存在 如此分段,我们只需要在一个分片时执行 对该用户的数据执行操作。
答案 1 :(得分:3)
是的,每个索引的分片数量。因此,如果您有2个索引,每个索引有5个分片,那么是的,您将在所有节点上分配总共10个分片。
分片数与群集中的节点数无关。如果你有3个分片和一个节点,显然所有3个分片都将驻留在那个节点上。但是,如果您随后添加了其他节点,则不会神奇地创建更多分片,并且您无法指定在该新节点上应驻留一定数量的分片。相反,现有的分片在所有节点上尽可能均匀地分布,导致一个节点具有2个分片,一个节点具有1个分片,总共为3.如果添加了第三个节点,则每个节点将容纳1个分片换句话说,分片数量是固定的,并且在您添加更多节点时不会缩放。
至于你的最后一个问题,它是基于一个错误的前提,所以很难回答。相反,我们举三个分片和两个节点的例子。在该设置中,一个节点将容纳2个分片,一个节点将容纳1个分片。如果其中任何一个节点发生故障,则群集会关闭,因为它们都没有完整的分片集。第一个节点缺少1个分片,第二个节点缺失2.这是副本进入的位置。通过添加副本,您可以确保每个节点最终都有一组完整的分片。例如,如果在上面的场景中添加了1个副本,那么第一个节点将拥有2个活动分片和1个副本,这些副本位于另一个节点上。第二个节点将有1个活动分片和1个副本,每个副本位于第一个分片上。因此,如果任一节点发生故障,群集只能激活副本并仍然继续工作。
答案 2 :(得分:1)
回答1)是的,你将有10个分片fr 2索引,有5个分片。
回答2)我认为你与分片和索引相混淆。
碎片是分段,索引不是节点。
如果您创建一个包含3个分片和1个副本的索引。
您将获得3个主分片和3个副本分片。
如果启动新节点,则分片将与新节点平衡。因此,旧节点中将有3个分片,新节点中将有3个分片。
如果旧节点出现故障,您将继续使用新节点数据。它将具有旧节点的精确副本。
了解elasticsearch的基本概念refer
它有帮助......!
答案 3 :(得分:1)
1)是,每个索引配置了分片数。这是一个静态操作,应该在创建索引时完成。如果要在以后更改分片数,则必须重新索引文档并花费时间。
2)分片数量不依赖于群集中的节点数量。让我们说你是一个图书销售网站。你有100本书要卖。您的网站有一个包含3个节点的弹性集群。您创建一个包含5个分片的图书索引。每个和非常碎片包含20本书。 2个分片将驻留在node1上,2个分片将驻留在node2中,1个分片将驻留在node3中。现在让我们说节点2已经关闭了。但是,我们仍然在节点1中有2个分片,在节点3中有1个分片。查询弹性搜索仍然会返回节点1和节点3上的数据。即,60个书籍数据仍然可用。 40本书的数据丢失了。
但是,整体群集状态将为红色,表示群集部分正常运行,但某些数据不可用。
要使系统容错,您可以配置副本。默认情况下,elasticsearch为每个分片创建一个副本。因此,在这种情况下,如果未覆盖默认配置,则节点2上的2个分片的副本将在节点1或节点3上复制,并且当节点2不可用时它们将成为主分片。因此,即使节点2关闭,所有数据都可用。
在这种情况下,整个群集运行状况将为黄色,这意味着群集仍然可用。但是有些节点丢失了。