原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/reindex-upgrade-remote.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/reindex-upgrade-remote.html

从远程集群重新索引 (Reindex from a remote cluster)

可以使用 从远程重新索引 将索引从旧集群迁移到新的 7.7.1 集群。 这使你能够在不中断服务的情况下从 6.8 之前的集群迁移到 7.7.1。

Elasticsearch 提供向后兼容性支持,使索引可以从以前的主要版本升级到当前的主要版本。 跳过主要版本意味着你必须自己解决任何一个向后兼容性的问题。

Elasticsearch 不支持跨主要版本的向前兼容性。 例如,不能从 7.x 集群重新索引到 6.x 集群。

如果你使用了机器学习功能,并且正在从 6.5 或更低版本的集群中迁移索引,则作业和 数据馈送(datafeed) 配置信息不会存储在索引中。 必须在新集群中重新创建机器学习作业。 如果是从 6.6 或更高版本的集群迁移,最好暂时停止与机器学习工作和数据馈送(datafeed)相关的任务,以防止不同的机器学习索引之间的不一致,因为索引是在略微不同的时间索引的。 使用 设置升级模式(set upgrade mode) API停止所有数据馈送并关闭所有机器学习作业

迁移索引的操作步骤:

  1. 设置一个新的 7.7.1 集群,并将现有集群添加到 elasticsearch.yml 中的 reindex.remote.whitelist

    reindex.remote.whitelist: oldhost:9200

    新集群不必一开始就完全横向扩展。 当你迁移索引并将负载转移到新集群时,可以向新集群添加节点,也可以从旧集群中删除节点。

  2. 对于需要迁移到新集群的每一个索引:

    1. 用合适的 mapping 和 setting 创建一个索引。 将 refresh_interval 设置为 -1,将 number_of_replicas 设置为 0,以便更快地重新索引。
    2. 使用 reindex API 将文档从远程索引拉到新的 7.7.1 索引:

      POST _reindex
      {
        "source": {
          "remote": {
            "host": "http://oldhost:9200",
            "username": "user",
            "password": "pass"
          },
          "index": "source",
          "query": {
            "match": {
              "test": "data"
            }
          }
        },
        "dest": {
          "index": "dest"
        }
      }

      如果你是通过将 wait_for_completion 设置为 false 在后台运行重新索引作业,则重新索引请求将返回一个 task_id ,你可以使用 task API 来监视重新索引作业的进度:GET _tasks/TASK_ID

    3. 当重新索引作业完成时,将 refresh_intervalnumber_of_replicas 设置为所需的值(默认设置为 30s1)。
    4. 一旦重新索引完成,新索引的状态为 green,你就可以删除旧索引。