管理现有索引
编辑管理现有索引
编辑如果您一直在使用 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 分钟检查一次是否需要执行操作。
resp = client.cluster.put_settings( persistent={ "indices.lifecycle.poll_interval": "1m" }, ) print(resp)
response = client.cluster.put_settings( body: { persistent: { 'indices.lifecycle.poll_interval' => '1m' } } ) puts response
const response = await client.cluster.putSettings({ persistent: { "indices.lifecycle.poll_interval": "1m", }, }); console.log(response);
-
使用 reindex API 重新索引您的数据。如果要按照原始索引的顺序对数据进行分区,您可以运行单独的重新索引请求。
文档保留其原始 ID。如果您不使用自动生成的文档 ID,并且从多个源索引重新索引,您可能需要进行额外的处理以确保文档 ID 不会冲突。一种方法是在重新索引调用中使用脚本将原始索引名称附加到文档 ID。
resp = client.reindex( source={ "index": "mylogs-*" }, dest={ "index": "mylogs", "op_type": "create" }, ) print(resp)
response = client.reindex( body: { source: { index: 'mylogs-*' }, dest: { index: 'mylogs', op_type: 'create' } } ) puts response
const response = await client.reindex({ source: { index: "mylogs-*", }, dest: { index: "mylogs", op_type: "create", }, }); console.log(response);
-
重新索引完成后,将 ILM 轮询间隔设置回其默认值,以防止主节点上的不必要负载
resp = client.cluster.put_settings( persistent={ "indices.lifecycle.poll_interval": None }, ) print(resp)
response = client.cluster.put_settings( body: { persistent: { 'indices.lifecycle.poll_interval' => nil } } ) puts response
const response = await client.cluster.putSettings({ persistent: { "indices.lifecycle.poll_interval": null, }, }); console.log(response);
PUT _cluster/settings { "persistent": { "indices.lifecycle.poll_interval": null } }
-
使用相同的别名恢复索引新数据。
使用此别名查询现在将搜索您的新数据和所有重新索引的数据。
- 一旦您验证了所有重新索引的数据都可以在新的托管索引中使用,您可以安全地删除旧索引。