索引级别分片分配
Elastic Stack 自行管理
在 Elasticsearch 中,每个索引的设置允许您通过索引级别的分片分配设置来控制分片到节点的分配。这些设置使您能够指定特定索引的分片应驻留在何处的首选项或约束。 这包括将分片分配给具有特定属性的节点或避免某些节点。 此级别的控制有助于优化资源利用率、平衡负载并确保根据您部署的特定要求进行数据冗余和可用性。 有关更多详细信息,请查看
您可以使用分片分配过滤器来控制 Elasticsearch 将特定索引的分片分配到何处。 这些每个索引的过滤器与集群范围的分配过滤和分配感知结合使用。
分片分配过滤器可以基于自定义节点属性或内置的 _name
、_host_ip
、_publish_ip
、_ip
、_host
、_id
、_tier
和 _tier_preference
属性。索引生命周期管理使用基于自定义节点属性的过滤器来确定在阶段之间移动时如何重新分配分片。
cluster.routing.allocation
设置是动态的,使现有的索引能够立即从一组节点移动到另一组节点。 仅当在不违反另一个路由约束(例如,永不在同一节点上分配主分片和副本分片)的情况下才重新定位分片。
例如,您可以使用自定义节点属性来指示节点的性能特征,并使用分片分配过滤将特定索引的分片路由到最合适的硬件类。
要基于自定义节点属性进行过滤
在每个节点的
elasticsearch.yml
配置文件中使用自定义节点属性指定过滤特征。 例如,如果您有small
、medium
和big
节点,则可以添加一个size
属性以根据节点大小进行过滤。node.attr.size: medium
您也可以在启动节点时设置自定义属性
./bin/elasticsearch -Enode.attr.size=medium
向索引添加路由分配过滤器。
index.routing.allocation
设置支持三种类型的过滤器:include
、exclude
和require
。 例如,要告诉 Elasticsearch 将来自test
索引的分片分配给big
或medium
节点,请使用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 |
按节点的数据层角色匹配节点。 有关更多详细信息,请参见数据层分配过滤 |
您可以在指定属性值时使用通配符,例如
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
}