将索引分配过滤器迁移到节点角色

编辑

将索引分配过滤器迁移到节点角色

编辑

如果您当前使用自定义节点属性和基于属性的分配过滤器,以在数据层中移动索引,并采用热-温-冷架构,我们建议您切换到使用内置的节点角色和自动数据层分配。使用节点角色可以使 ILM 自动在数据层之间移动索引。

虽然我们建议依赖自动数据层分配来管理热-温-冷架构中的数据,但您仍然可以使用基于属性的分配过滤器来控制其他用途的分片分配。

Elasticsearch Service 和 Elastic Cloud Enterprise 可以自动执行迁移。对于自管理部署,您需要手动更新配置、ILM 策略和索引,以切换到节点角色。

在 Elasticsearch Service 或 Elastic Cloud Enterprise 上自动迁移到节点角色

编辑

如果您使用的是 Elasticsearch Service 或 Elastic Cloud Enterprise 中默认部署模板的节点属性,当您执行以下操作时,系统会提示您切换到节点角色

  • 升级到 Elasticsearch 7.10 或更高版本
  • 部署温、冷或冻结数据层
  • 启用自动缩放

这些操作会自动更新您的集群配置和 ILM 策略以使用节点角色。此外,升级到 7.14 或更高版本会在对部署应用任何配置更改时自动更新 ILM 策略。

如果您使用自定义索引模板,请在自动迁移完成后检查它们,并删除任何基于属性的分配过滤器

自动迁移后,您无需执行任何进一步的操作。只有在您不允许自动迁移或拥有自管理部署时,才需要执行以下手动步骤。

在自管理部署上迁移到节点角色

编辑

要切换到使用节点角色

将数据节点分配到数据层

编辑

为每个数据节点配置适当的角色,以将其分配到一个或多个数据层:data_hotdata_contentdata_warmdata_colddata_frozen。一个节点还可以具有其他角色。默认情况下,新节点配置为具有所有角色。

当您向 Elasticsearch Service 部署添加数据层时,一个或多个节点会自动配置相应的角色。要在 Elasticsearch Service 部署中显式更改节点的角色,请使用更新部署 API。将节点的 node_type 配置替换为适当的 node_roles。例如,以下配置将节点添加到热层和内容层,并使其能够充当摄取节点、远程节点和转换节点。

"node_roles": [
  "data_hot",
  "data_content",
  "ingest",
  "remote_cluster_client",
  "transform"
],

如果您直接管理自己的集群,请在 elasticsearch.yml 中为每个节点配置适当的角色。例如,以下设置将节点配置为热层和内容层中的仅数据节点。

node.roles [ data_hot, data_content ]

从现有 ILM 策略中删除自定义分配设置

编辑

更新每个生命周期阶段的分配操作,以删除基于属性的分配设置。ILM 会在每个阶段注入一个迁移操作,以自动将索引过渡到数据层。

如果分配操作没有设置副本数量,请完全删除分配操作。(空的分配操作无效。)

该策略必须为架构中的每个数据层指定相应的阶段。必须存在每个阶段,以便 ILM 可以注入迁移操作以在数据层之间移动索引。如果您不需要执行任何其他操作,则该阶段可以为空。例如,如果为部署启用了温和冷数据层,则您的策略必须包括热、温和冷阶段。

停止在新索引上设置自定义热属性

编辑

当您创建数据流时,它的第一个后备索引现在会自动分配给 data_hot 节点。同样,当您直接创建索引时,它会自动分配给 data_content 节点。

在 Elasticsearch Service 部署上,删除在所有索引上设置热分片分配属性的 cloud-hot-warm-allocation-0 索引模板。

resp = client.indices.delete_template(
    name=".cloud-hot-warm-allocation-0",
)
print(resp)
response = client.indices.delete_template(
  name: '.cloud-hot-warm-allocation-0'
)
puts response
const response = await client.indices.deleteTemplate({
  name: ".cloud-hot-warm-allocation-0",
});
console.log(response);
DELETE _template/.cloud-hot-warm-allocation-0

如果您使用的是自定义索引模板,请更新它以删除您用于将新索引分配到热层的基于属性的分配过滤器

为了完全避免在混合层偏好和自定义属性路由设置时出现的问题,我们还建议更新所有旧版、可组合和组件模板,以删除它们配置的设置中的基于属性的分配过滤器

为现有索引设置层偏好

编辑

ILM 通过在每个阶段自动注入迁移操作,自动将托管索引过渡到可用的数据层。

要使 ILM 能够将现有托管索引移动到数据层,请更新索引设置为

  1. 通过将其设置为 null 来删除自定义分配过滤器。
  2. 设置层偏好

例如,如果您的旧模板将 data 属性设置为 hot 以将分片分配到热层,请将 data 属性设置为 null,并将 _tier_preference 设置为 data_hot

resp = client.indices.put_settings(
    index="my-index",
    settings={
        "index.routing.allocation.require.data": None,
        "index.routing.allocation.include._tier_preference": "data_hot"
    },
)
print(resp)
response = client.indices.put_settings(
  index: 'my-index',
  body: {
    'index.routing.allocation.require.data' => nil,
    'index.routing.allocation.include._tier_preference' => 'data_hot'
  }
)
puts response
const response = await client.indices.putSettings({
  index: "my-index",
  settings: {
    "index.routing.allocation.require.data": null,
    "index.routing.allocation.include._tier_preference": "data_hot",
  },
});
console.log(response);
PUT my-index/_settings
{
  "index.routing.allocation.require.data": null,
  "index.routing.allocation.include._tier_preference": "data_hot"
}

对于已经从热阶段过渡出去的索引,层偏好应包括适当的回退层,以确保在首选层不可用时可以分配索引分片。例如,将热层指定为已处于温阶段的索引的回退层。

resp = client.indices.put_settings(
    index="my-index",
    settings={
        "index.routing.allocation.require.data": None,
        "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
    },
)
print(resp)
response = client.indices.put_settings(
  index: 'my-index',
  body: {
    'index.routing.allocation.require.data' => nil,
    'index.routing.allocation.include._tier_preference' => 'data_warm,data_hot'
  }
)
puts response
const response = await client.indices.putSettings({
  index: "my-index",
  settings: {
    "index.routing.allocation.require.data": null,
    "index.routing.allocation.include._tier_preference": "data_warm,data_hot",
  },
});
console.log(response);
PUT my-index/_settings
{
  "index.routing.allocation.require.data": null,
  "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
}

如果索引已处于冷阶段,则包括冷、温和热层。

对于同时配置了 _tier_preferencerequire.data_tier_preference 已过时(即,节点属性配置比配置的 _tier_preference “冷”)的索引,迁移需要删除 require.data 属性并更新 _tier_preference 以反映正确的层。

例如,对于具有以下路由配置的索引

{
  "index.routing.allocation.require.data": "warm",
  "index.routing.allocation.include._tier_preference": "data_hot"
}

应按如下方式修复路由配置

resp = client.indices.put_settings(
    index="my-index",
    settings={
        "index.routing.allocation.require.data": None,
        "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
    },
)
print(resp)
response = client.indices.put_settings(
  index: 'my-index',
  body: {
    'index.routing.allocation.require.data' => nil,
    'index.routing.allocation.include._tier_preference' => 'data_warm,data_hot'
  }
)
puts response
const response = await client.indices.putSettings({
  index: "my-index",
  settings: {
    "index.routing.allocation.require.data": null,
    "index.routing.allocation.include._tier_preference": "data_warm,data_hot",
  },
});
console.log(response);
PUT my-index/_settings
{
  "index.routing.allocation.require.data": null,
  "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
}

这种情况可能发生在默认使用数据层的系统中,例如,恢复使用节点属性的 ILM 策略并将托管索引从热阶段过渡到温阶段时。在这种情况下,节点属性配置指示索引应分配到的正确层。