加载中

索引级别分片分配设置

您可以使用分片分配过滤器来控制 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.*"
}
© . All rights reserved.