迁移至自管理和 Elastic Cloud on Kubernetes 部署上的 ILM
如果您一直在使用 Elasticsearch Curator 或其他机制来管理周期性索引,那么在迁移至 ILM 时,您有几种选择。
- 设置您的索引模板以使用 ILM 策略来管理新索引。一旦 ILM 开始管理您当前的写入索引,您就可以将适当的策略应用于旧索引。
- 重索引至 ILM 管理的索引中。
过渡到使用 ILM 管理周期性索引的最简单方法是配置索引模板,以便将生命周期策略应用于新索引。您可以参考许多示例 ILM 策略,这些策略展示了如何根据不同标准启动索引滚动更新(rollover)。
一旦您正在写入的索引由 ILM 管理,您就可以手动将策略应用于旧索引。为旧索引定义一个单独的策略,并省略滚动更新操作。Rollover 用于管理新数据的去向,因此不适用。
请记住,应用于现有索引的策略会将每个阶段的 min_age 与索引的原始创建日期进行比较,并可能立即进入多个阶段。如果您的策略执行资源密集型操作(如强制合并),您不希望在切换到 ILM 时让大量索引同时执行这些操作。
您可以在用于现有索引的策略中指定不同的 min_age 值,或者设置 index.lifecycle.origination_date 来控制索引年龄的计算方式。
一旦所有 ILM 之前的索引都已过期并被删除,您就可以删除用于管理它们的策略。
如果您使用的是 Beats 或 Logstash,在 7.0 及更高版本中启用 ILM 将自动设置 ILM 来管理新索引。如果您是通过 Logstash 使用 Beats,则可能需要更改 Logstash 输出配置并调用 Beats 设置,以便为新数据使用 ILM。
除了将策略应用于现有索引之外,另一种方法是将数据重索引至由 ILM 管理的索引中。如果您因为创建数据量极少的周期性索引而导致分片数量过多,或者因为持续向同一个索引写入数据而导致分片过大并引发性能问题,则可能需要这样做。
首先,您需要设置新的由 ILM 管理的索引
- 更新您的索引模板以包含必要的 ILM 设置。
- 引导一个初始索引作为写入索引。
- 停止向旧索引写入数据,并使用指向引导索引的别名来索引新文档。
若要重索引至托管索引
如果您不想在 ILM 管理的索引中混合新旧数据,请暂停索引新文档。在同一个索引中混合新旧数据是安全的,但合并后的索引需要保留,直到您准备好删除新数据为止。
减少 ILM 轮询间隔,以确保在等待滚动更新检查时索引不会变得过大。默认情况下,ILM 每 10 分钟检查一次需要采取的操作。
PUT _cluster/settings{ "persistent": { "indices.lifecycle.poll_interval": "1m" } }- 每分钟检查一次,查看是否需要执行滚动更新等 ILM 操作。
使用 reindex API 重新索引您的数据。如果您希望按照数据最初被索引的顺序对数据进行分区,则可以运行单独的重索引请求。
重要提示文档保留其原始 ID。如果您不使用自动生成的文档 ID,并且正在从多个源索引进行重索引,您可能需要进行额外处理以确保文档 ID 不冲突。一种方法是在重索引调用中使用脚本,将原始索引名称附加到文档 ID 上。
POST _reindex{ "source": { "index": "mylogs-*" }, "dest": { "index": "mylogs", "op_type": "create" } }- 匹配您现有的索引。为新索引使用前缀可以使这种索引模式的使用更加容易。
- 指向您的引导索引的别名。
- 如果多个文档具有相同的 ID,则停止重索引。建议这样做,以防止在不同源索引中的文档具有相同 ID 时意外覆盖文档。
当重索引完成后,将 ILM 轮询间隔设置回其默认值,以防止对主节点造成不必要的负载
PUT _cluster/settings{ "persistent": { "indices.lifecycle.poll_interval": null } }使用相同的别名恢复新数据的索引。
现在使用此别名进行查询将搜索您的新数据和所有已重索引的数据。
一旦您确认所有重索引的数据在新的托管索引中都可用,您就可以安全地删除旧索引。