将索引分配过滤器迁移到 ILM 节点角色
如果您的集群当前依赖于 自定义节点属性 和 基于属性的分配过滤器 在 数据层 之间移动索引,迁移到 Elasticsearch 节点角色可以简化管理。节点角色与索引生命周期管理 (ILM) 配合使用,可自动将索引移动到热、温、冷和冻结层,从而减少手动配置并确保高效的分片分配。
虽然我们建议依靠自动数据层分配来管理热-温-冷架构中的数据,但您仍然可以使用基于属性的分配过滤器来控制其他用途的分片分配。
Elastic Cloud Hosted 和 Elastic Cloud Enterprise 可以自动执行迁移。对于自托管部署,您需要手动更新配置、ILM 策略和索引以切换到节点角色。
如果您在 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 中使用来自默认部署模板的节点属性,当您执行以下操作时,系统将提示您切换到节点角色:
- 升级到 Elasticsearch 7.10 或更高版本
- 部署温、冷或冻结数据层
- 启用自动缩放
这些操作会自动更新您的集群配置和 ILM 策略以使用节点角色。此外,升级到 7.14 或更高版本会在您的部署应用任何配置更改时自动更新 ILM 策略。
如果您使用自定义索引模板,请在自动迁移完成后检查它们,并删除任何 基于属性的分配过滤器。
自动迁移后,您无需采取任何进一步的操作。以下手动步骤仅在您不允许自动迁移或拥有自托管部署时才是必要的。
要切换到使用节点角色,请:
- 将数据节点分配到相应的数据层。
- 从您的索引生命周期管理策略中删除基于属性的分配设置。
- 停止在新索引上设置自定义热属性。
- 更新现有索引以设置层级偏好。
为每个数据节点配置适当的角色以将其分配到一个或多个数据层:data_hot、data_content、data_warm、data_cold 或 data_frozen。节点也可以具有其他角色。默认情况下,新节点配置有所有角色。
当您向 Elastic Cloud Hosted 部署添加数据层时,一个或多个节点会自动配置相应的角色。要明确更改 Elastic Cloud Hosted 部署中节点的角色,请使用更新部署 API。将节点的 node_type 配置替换为适当的 node_roles。例如,以下配置将节点添加到热层和内容层,并使其能够充当摄取节点、远程节点和转换节点。
"node_roles": [
"data_hot",
"data_content",
"ingest",
"remote_cluster_client",
"transform"
],
如果您直接管理自己的集群,请在 elasticsearch.yml 中为每个节点配置适当的角色。例如,以下设置将节点配置为热层和内容层中的纯数据节点。
node.roles [ data_hot, data_content ]
更新每个生命周期阶段的分配 (allocate) 操作以删除基于属性的分配设置。ILM 会在每个阶段注入一个迁移 (migrate) 操作,以自动将索引通过数据层进行转换。
如果 allocate 操作没有设置副本数量,请完全删除 allocate 操作。(空的 allocate 操作无效。)
该策略必须为架构中的每个数据层指定相应的阶段。必须包含每个阶段,以便 ILM 可以注入迁移操作以将索引通过数据层移动。如果您不需要执行任何其他操作,该阶段可以为空。例如,如果您为部署启用了温数据层和冷数据层,则您的策略必须包含热、温和冷阶段。
当您创建数据流时,其第一个后端索引现在会自动分配给 data_hot 节点。同样,当您直接创建索引时,它会自动分配给 data_content 节点。
在 Elastic Cloud Hosted 部署上,删除在所有索引上设置热分片分配属性的 cloud-hot-warm-allocation-0 索引模板。
DELETE _template/.cloud-hot-warm-allocation-0
如果您使用自定义索引模板,请更新它以删除您用于将新索引分配给热层的基于属性的分配过滤器。
为了完全避免混合层级偏好和自定义属性路由设置时出现的问题,我们还建议更新所有旧版、可组合和组件模板,从它们配置的设置中删除基于属性的分配过滤器。
ILM 通过在每个阶段自动注入迁移操作,自动将受管理的索引通过可用的数据层进行转换。
要使 ILM 能够将现有受管理的索引通过数据层移动,请更新索引设置以:
- 通过将其设置为
null来删除自定义分配过滤器。 - 设置层级偏好。
例如,如果您的旧模板将 data 属性设置为 hot 以将分片分配给热层,请将 data 属性设置为 null,并将 _tier_preference 设置为 data_hot。
PUT my-index/_settings
{
"index.routing.allocation.require.data": null,
"index.routing.allocation.include._tier_preference": "data_hot"
}
对于已经从热阶段转换出去的索引,层级偏好应包含适当的回退层,以确保如果首选层不可用,可以分配索引分片。例如,指定热层作为已处于温阶段的索引的回退层。
PUT my-index/_settings
{
"index.routing.allocation.require.data": null,
"index.routing.allocation.include._tier_preference": "data_warm,data_hot"
}
如果索引已处于冷阶段,请包含冷、温和热层。
对于既配置了 _tier_preference 又配置了 require.data 但 _tier_preference 已过时(即节点属性配置比配置的 _tier_preference “更冷”)的索引,迁移需要删除 require.data 属性并更新 _tier_preference 以反映正确的层级划分。
例如:对于具有以下路由配置的索引
{
"index.routing.allocation.require.data": "warm",
"index.routing.allocation.include._tier_preference": "data_hot"
}
应按如下方式修复路由配置
PUT my-index/_settings
{
"index.routing.allocation.require.data": null,
"index.routing.allocation.include._tier_preference": "data_warm,data_hot"
}
这种情况可能发生在默认使用数据层的系统中,例如,当恢复使用节点属性的 ILM 策略并将受管理的索引从热阶段转换为温阶段时。在这种情况下,节点属性配置指示索引应分配到的正确层级。