正在加载

索引级别分片分配

Elastic Stack 自行管理

在 Elasticsearch 中,每个索引的设置允许您通过索引级别的分片分配设置来控制分片到节点的分配。这些设置使您能够指定特定索引的分片应驻留在何处的首选项或约束。 这包括将分片分配给具有特定属性的节点或避免某些节点。 此级别的控制有助于优化资源利用率、平衡负载并确保根据您部署的特定要求进行数据冗余和可用性。 有关更多详细信息,请查看

您可以使用分片分配过滤器来控制 Elasticsearch 将特定索引的分片分配到何处。 这些每个索引的过滤器与集群范围的分配过滤分配感知结合使用。

分片分配过滤器可以基于自定义节点属性或内置的 _name_host_ip_publish_ip_ip_host_id_tier_tier_preference 属性。索引生命周期管理使用基于自定义节点属性的过滤器来确定在阶段之间移动时如何重新分配分片。

cluster.routing.allocation 设置是动态的,使现有的索引能够立即从一组节点移动到另一组节点。 仅当在不违反另一个路由约束(例如,永不在同一节点上分配主分片和副本分片)的情况下才重新定位分片。

例如,您可以使用自定义节点属性来指示节点的性能特征,并使用分片分配过滤将特定索引的分片路由到最合适的硬件类。

要基于自定义节点属性进行过滤

  1. 在每个节点的 elasticsearch.yml 配置文件中使用自定义节点属性指定过滤特征。 例如,如果您有 smallmediumbig 节点,则可以添加一个 size 属性以根据节点大小进行过滤。

    node.attr.size: medium
    

    您也可以在启动节点时设置自定义属性

    ./bin/elasticsearch -Enode.attr.size=medium
    
  2. 向索引添加路由分配过滤器。 index.routing.allocation 设置支持三种类型的过滤器:includeexcluderequire。 例如,要告诉 Elasticsearch 将来自 test 索引的分片分配给 bigmedium 节点,请使用 index.routing.allocation.include

     PUT test/_settings {
      "index.routing.allocation.include.size": "big,medium"
    }
    

    如果指定多个过滤器,则节点必须同时满足以下条件才能将分片重新定位到该节点

    • 如果指定了任何 require 类型条件,则必须满足所有条件
    • 如果指定了任何 exclude 类型条件,则不得满足任何条件
    • 如果指定了任何 include 类型条件,则必须至少满足其中一个条件

    例如,要将 test 索引移动到 rack1 中的 big 节点,您可以指定

     PUT test/_settings {
      "index.routing.allocation.require.size": "big",
      "index.routing.allocation.require.rack": "rack1"
    }
    
设置 描述
index.routing.allocation.include.{{attribute}} 将索引分配给其 {{attribute}} 具有至少一个逗号分隔值的节点。
index.routing.allocation.require.{{attribute}} 将索引分配给其 {{attribute}} 具有所有逗号分隔值的节点。
index.routing.allocation.exclude.{{attribute}} 将索引分配给其 {{attribute}} 没有逗号分隔值的节点。

索引分配设置支持以下内置属性

属性 描述
_name 按节点名称匹配节点
_host_ip 按主机 IP 地址(与主机名关联的 IP)匹配节点
_publish_ip 按发布 IP 地址匹配节点
_ip 匹配 _host_ip_publish_ip
_host 按主机名匹配节点
_id 按节点 ID 匹配节点
_tier 按节点的数据层角色匹配节点。 有关更多详细信息,请参见数据层分配过滤
注意

_tier 过滤基于节点角色。 只有一部分角色是数据层角色,并且通用的数据角色将匹配任何层过滤。

您可以在指定属性值时使用通配符,例如

 PUT test/_settings {
  "index.routing.allocation.include._ip": "192.168.2.*"
}

未分配的分片会尽可能按照优先级顺序恢复。 索引按照以下顺序进行优先级排序

  • 可选的 index.priority 设置(较高优先于较低)
  • 索引创建日期(较高优先于较低)
  • 索引名称(较高优先于较低)

这意味着,默认情况下,较新的索引将在较旧的索引之前恢复。

使用每个索引的可动态更新的 index.priority 设置来自定义索引优先级顺序。 例如

 PUT index_1 
PUT index_2

PUT index_3
{
  "settings": {
    "index.priority": 10
  }
}

PUT index_4
{
  "settings": {
    "index.priority": 5
  }
}

在上面的示例中

  • index_3 将首先恢复,因为它具有最高的 index.priority
  • index_4 将接下来恢复,因为它具有次高的优先级。
  • index_2 将接下来恢复,因为它是在最近创建的。
  • index_1 将最后恢复。

此设置接受一个整数,并且可以使用更新索引设置 API在活动的索引上进行更新

 PUT index_4/_settings {
  "index.priority": 1
}
© . All rights reserved.