管理现有索引
编辑管理现有索引编辑
如果您一直在使用 Curator 或其他机制来管理定期索引,那么在迁移到 ILM 时,您有两个选择
- 设置您的索引模板以使用 ILM 策略来管理您的新索引。一旦 ILM 开始管理您当前的写入索引,您就可以将适当的策略应用于您的旧索引。
- 重新索引到 ILM 管理的索引。
从 Curator 版本 5.7 开始,Curator 会忽略 ILM 管理的索引。
将策略应用于现有的时间序列索引编辑
将您的定期索引迁移到 ILM 管理的最简单方法是 配置索引模板 以将生命周期策略应用于新索引。一旦您正在写入的索引被 ILM 管理,您就可以 手动将策略应用 于您的旧索引。
为您的旧索引定义一个单独的策略,该策略省略了滚动操作。滚动用于管理新数据的位置,因此不适用。
请记住,应用于现有索引的策略会将每个阶段的 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 分钟检查一次需要执行的操作。
response = client.cluster.put_settings( body: { persistent: { 'indices.lifecycle.poll_interval' => '1m' } } ) puts response
-
使用 重新索引 API 重新索引您的数据。如果您想按原始索引顺序对数据进行分区,您可以运行单独的重新索引请求。
文档保留其原始 ID。如果您不使用自动生成的文档 ID,并且从多个源索引重新索引,您可能需要进行额外的处理以确保文档 ID 不冲突。一种方法是在重新索引调用中使用 脚本 将原始索引名称追加到文档 ID。
response = client.reindex( body: { source: { index: 'mylogs-*' }, dest: { index: 'mylogs', op_type: 'create' } } ) puts response
-
重新索引完成后,将 ILM 轮询间隔设置回其默认值,以防止主节点上的不必要负载
response = client.cluster.put_settings( body: { persistent: { 'indices.lifecycle.poll_interval' => nil } } ) puts response
PUT _cluster/settings { "persistent": { "indices.lifecycle.poll_interval": null } }
-
恢复使用相同的别名索引新数据。
使用此别名进行查询现在将搜索您的新数据和所有重新索引的数据。
- 一旦您验证了所有重新索引的数据都可以在新的管理索引中使用,您就可以安全地删除旧索引。