管理现有索引

edit

如果你一直在使用Curator或其他机制来管理周期性索引, 在迁移到ILM时,你有几个选项:

  • 设置您的索引模板以使用ILM策略来管理您的新索引。 一旦ILM管理您的当前写入索引,您可以对旧索引应用适当的策略。
  • 重新索引到ILM管理的索引中。

从Curator版本5.7开始,Curator会忽略由ILM管理的索引。

将策略应用于现有的时间序列索引

edit

过渡到使用ILM管理周期性索引的最简单方法是 配置一个索引模板,将生命周期策略应用于新索引。 一旦您正在写入的索引由ILM管理, 您可以手动将策略应用于您的旧索引。

为您的旧索引定义一个单独的策略,省略滚动操作。 滚动用于管理新数据的去向,因此不适用。

请记住,应用于现有索引的策略会将每个阶段的min_age与索引的原始创建日期进行比较,并且可能会立即通过多个阶段。 如果您的策略执行资源密集型操作,如强制合并, 您不希望在切换到ILM时,大量索引同时执行这些操作。

您可以在用于现有索引的策略中指定不同的min_age值, 或者设置index.lifecycle.origination_date 来控制索引年龄的计算方式。

一旦所有预ILM索引都已老化并删除,您可以删除用于管理它们的策略。

如果您使用的是 Beats 或 Logstash,在 7.0 及更高版本中启用 ILM 会自动设置 ILM 来管理新索引。 如果您通过 Logstash 使用 Beats, 您可能需要更改 Logstash 输出配置并调用 Beats 设置 以对新数据使用 ILM。

重新索引到托管索引

edit

另一种替代将策略应用于现有索引的方法是 将您的数据重新索引到一个由ILM管理的索引中。 如果您创建了具有非常少量数据的周期性索引,导致分片数量过多,或者持续向同一个索引中索引数据导致分片过大和性能问题,您可能希望这样做。

首先,您需要设置新的 ILM 管理索引:

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

重新索引到托管索引中:

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

    PUT _cluster/settings
    {
      "persistent": {
        "indices.lifecycle.poll_interval": "1m" 
      }
    }

    每分钟检查一次,看看是否需要执行诸如滚动更新等ILM操作。

  3. 使用reindex API重新索引您的数据。 如果您希望按照数据最初索引的顺序对其进行分区, 您可以运行单独的重新索引请求。

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

    POST _reindex
    {
      "source": {
        "index": "mylogs-*" 
      },
      "dest": {
        "index": "mylogs", 
        "op_type": "create" 
      }
    }

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

    指向您的引导索引的别名。

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

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

    PUT _cluster/settings
    {
      "persistent": {
        "indices.lifecycle.poll_interval": null
      }
    }
  5. 使用相同的别名恢复索引新数据。

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

  6. 一旦您确认所有重新索引的数据都已在新管理的索引中可用, 您可以安全地删除旧索引。