如何在elasticsearch中配置每个群集的分片数

Sha*_*zan 6 elasticsearch

我不明白ES中的分片配置.关于ES中的分片我几乎没有问题:

  1. 主分片的数量是通过index.number_of_shards参数配置的,对吧?

    因此,这意味着每个索引配置了分片数.如果是这样,如果我有2个索引,那么我将在节点上有10个分片?

  2. 假设我有一个节点(节点1)配置了3个分片和1个副本.然后,我在同一个集群中创建一个具有2个分片的新节点(节点2).所以,我假设我只复制两个碎片,对吧?

    此外,如果节点1出现故障,集群如何"知道"它应该有3个分片而不是2个,会发生什么?由于我在节点2上只有2个分片,那么这意味着我丢失了节点1中其中一个分片的数据?

Joh*_*one 9

首先,我开始阅读索引,主分片,副本分片和节点,以了解差异:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/glossary.html

这是一个非常好的描述:

2.3指数基础

elasticsearch中最大的单个数据单元是一个索引.索引是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或单调增加的ID(1,2,3,4 ......),它们是均匀分布的.

这是默认方法,它通常很有效,因为它解决了跨群集数据的夜间问题.它还意味着只需要将单个文档的提取路由到文档哈希值的分片.但是路由查询怎么样?例如,如果我们在弹性搜索中存储用户历史记录,并且正在为每条用户历史数据使用UUID,则用户数据将在整个群集中均匀存储.但是,这里有一些浪费,因为这意味着我们对该用户数据的搜索具有较差的数据位置.必须在索引中的所有分片上运行查询,并针对所有可能的数据运行查询.假设我们有很多用户,我们可以通过将所有给定用户的数据一致地路由到单个分片来提高查询性能.一旦用户的数据被如此分段,我们只需要在对该用户的数据执行操作时跨单个分片执行.


Bla*_*POP 1

回答 1)是的,您将有 10 个分片,其中 2 个索引有 5 个分片。

答案 2)我认为您对分片和索引感到困惑。

分片是针对索引而非节点进行分割的。

如果您创建一个包含 3 个分片和 1 个副本的索引。

您将获得 3 个主分片和 3 个副本分片。

如果您启动新节点,分片将与新节点平衡。因此,旧节点中将有 3 个分片,新节点中将有 3 个分片。

如果旧节点发生故障,您将通过新节点数据生存。它将拥有旧节点的精确副本。

要了解elasticsearch的基本概念,请参阅

希望能帮助到你..!