管理现有索引编辑

如果您一直在使用 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 管理的索引

  1. 更新您的索引模板以包含必要的 ILM 设置。
  2. 将初始索引引导为写入索引。
  3. 停止写入旧索引,并使用指向引导索引的别名索引新文档。

要重新索引到管理的索引

  1. 如果您不想在 ILM 管理的索引中混合新旧数据,请暂停索引新文档。在同一个索引中混合新旧数据是安全的,但组合索引需要保留,直到您准备好删除新数据。
  2. 减少 ILM 轮询间隔,以确保索引在等待滚动检查时不会变得太大。默认情况下,ILM 每 10 分钟检查一次需要执行的操作。

    response = client.cluster.put_settings(
      body: {
        persistent: {
          'indices.lifecycle.poll_interval' => '1m'
        }
      }
    )
    puts response
    PUT _cluster/settings
    {
      "persistent": {
        "indices.lifecycle.poll_interval": "1m" 
      }
    }

    每分钟检查一次,查看是否需要执行 ILM 操作(如滚动)。

  3. 使用 重新索引 API 重新索引您的数据。如果您想按原始索引顺序对数据进行分区,您可以运行单独的重新索引请求。

    文档保留其原始 ID。如果您不使用自动生成的文档 ID,并且从多个源索引重新索引,您可能需要进行额外的处理以确保文档 ID 不冲突。一种方法是在重新索引调用中使用 脚本 将原始索引名称追加到文档 ID。

    response = client.reindex(
      body: {
        source: {
          index: 'mylogs-*'
        },
        dest: {
          index: 'mylogs',
          op_type: 'create'
        }
      }
    )
    puts response
    POST _reindex
    {
      "source": {
        "index": "mylogs-*" 
      },
      "dest": {
        "index": "mylogs", 
        "op_type": "create" 
      }
    }

    匹配您现有的索引。使用新索引的前缀可以使使用此索引模式变得更加容易。

    指向引导索引的别名。

    如果多个文档具有相同的 ID,则停止重新索引。建议这样做,以防止在不同源索引中的文档具有相同的 ID 时意外覆盖文档。

  4. 重新索引完成后,将 ILM 轮询间隔设置回其默认值,以防止主节点上的不必要负载

    response = client.cluster.put_settings(
      body: {
        persistent: {
          'indices.lifecycle.poll_interval' => nil
        }
      }
    )
    puts response
    PUT _cluster/settings
    {
      "persistent": {
        "indices.lifecycle.poll_interval": null
      }
    }
  5. 恢复使用相同的别名索引新数据。

    使用此别名进行查询现在将搜索您的新数据和所有重新索引的数据。

  6. 一旦您验证了所有重新索引的数据都可以在新的管理索引中使用,您就可以安全地删除旧索引。