Elasticsearch官方文档翻译-索引分片分配过滤规则
本系列文章翻译ES官方8.0版本文档。本章对应内容地址 Index-level shard allocation filtering
因为水平有限,翻译内容难免存在错漏,欢迎大家指出
索引分片分配过滤规则
可以使用索引分片分配过滤规则为特定的索引指定分片存储的节点,这些过滤操作与集群分配(cluster-wide allocation filtering)和感知分配同时(allocation awareness)进行。
分片分配过滤规则可以基于自定义的节点属性或是一些内置属性如_name, _host_ip, _publish_ip, _ip, _host, _id, _tier and _tier_preference来进行分配。索引生命周期管理器功能依据这些用于筛选的属性进行分片的重分配。
cluster.routing.allocation配置是动态的,允许活跃索引将分片重集合中的一个节点迁移到其他节点。分片在满足其他所有的规则后就会进行重分配,如主分片和副分片不能分配到同一节点。
举例来说,你可以通过节点的一些属性来了解节点的特性,然后就可以通过分分片筛选分配器为特定的索引指定最优的节点分配分片。
启用索引分片分配过滤规则
通过自定义节点属性过滤
- 可以在每个节点的elasticsearch.yml文件中指定自定义的节点属性,例如我们有
small
,medium
, 和big
三种类型的节点,则可以添加size属性,如下
node.attr.size: medium
也可以在启动节点时设置,如下
./bin/elasticsearch -Enode.attr.size=medium
2. 为索引添加过滤配置,index.routing.allocation配置支持三种过滤规则:include
, exclude
, and require。
例如,需要将test索引的分片分配到big
或 medium
节点,则使用index.routing.allocation.include配置项,如下
PUT test/_settings { "index.routing.allocation.include.size": "big,medium" }
如果设置多个过滤规则,则只有满足所有条件的节点才会分配分片:
- 如果指定了require的过滤规则,则节点必须满足所有指定的该类规则。
- 如果指定了
exclude
的过滤规则,则节点必须不满足所有的该类规则。 - 如果指定了
include
的过滤规则,则节点需要至少满足一个规则。
例如,如下的配置则只有节点的size属性必须为big且rack属性必须为rack1的才能分配test索引的分片。
PUT test/_settings { "index.routing.allocation.require.size": "big", "index.routing.allocation.require.rack": "rack1" }
索引分片过滤配置
index.routing.allocation.include.{attribute}
将索引分片分配给至少满足一个条件的节点。
index.routing.allocation.require.{attribute}
将索引分片分配给满足所有条件的节点。
index.routing.allocation.exclude.{attribute}
将索引分片分配给不包含所有这些属性的节点。
内置的分片分配属性如下
_name | 根据节点名称匹配 |
_host_ip | 根据节点ip匹配(与主机梦对应的ip) |
_publish_ip | 对外ip匹配 |
_ip | 节点ip或者对外ip匹配 |
_host | 机器名匹配 |
_id | 节点id匹配 |
_tier | 节点类型匹配 |
其中一些属性可以使用通配符设置,如
PUT test/_settings { "index.routing.allocation.include._ip": "192.168.2.*" }