使用远程重新索引迁移 Amazon Elasticsearch Service 索引 - Amazon Elasticsearch Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用远程重新索引迁移 Amazon Elasticsearch Service 索引

远程重新索引允许您将索引从远程 Amazon Elasticsearch Service (Amazon ES) 集群复制到本地集群。您可以从任何 Amazon ES 域或自行管理的 Elasticsearch 集群中迁移索引。

远程重新索引要求本地域上的 Elasticsearch 6.7 或更高版本。远程域必须低于本地域或相同的主要版本。在同一主要版本中,远程域可以是任何次要版本。例如,支持从 7.10.x 到 7.9 的远程重新索引,但不支持 7.x 到 6.x。

完整的文档reindex操作(包括详细步骤和支持的选项)可在Open Distro 用于 Elasticsearch 文档

Prerequisites

远程重新索引具有以下要求:

  • 远程域必须可以从本地域访问。对于驻留在某个 VPC 中的远程域,本地域必须具有访问该 VPC 的权限。此过程因网络配置而异,但可能涉及连接到 VPN 或托管网络或使用代理服务器。要了解更多信息,请参阅VPC 支持

  • 请求必须像任何其他 REST 请求一样,由远程域授权。如果远程域启用了细粒度访问控制,则您必须具有在本地域上执行重新索引并读取远程域上的索引的权限。有关更多安全注意事项,请参阅精细访问控制

  • 我们建议您在开始重新索引过程之前,在本地域上使用所需设置创建索引。

重新索引亚马逊 ES 域之间的数据

最基本的情况是,远程索引与您的本地域位于同一个区域,具有可公开访问的终端节点,并且您已签署了 IAM 凭证。

在远程域中指定要从中重新索引的源索引和要重新索引的本地域上的目标索引:

POST <local-domain-endpoint>/_reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443" }, "index": "remote_index" }, "dest": { "index": "local_index" } }

您必须在远程域终端节点的末尾添加 443 以进行验证检查。

要验证索引是否复制到本地域,请执行以下操作:

GET <local-domain-endpoint>/local_index/_search

如果远程索引位于与本地域不同的区域中,请传入其区域名称,例如在此示例请求中:

POST <local-domain-endpoint>/_reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "region": "eu-west-1" }, "index": "test_index" }, "dest": { "index": "local_index" } }

在孤立地区的情况下,如 Amazon GovCloud (US) 或中国地区,则终端节点可能无法访问,因为您的 IAM 用户在这些地区无法识别。

如果使用基本授权保护远程域,请指定用户名和密码:

POST <local-domain-endpoint>/_reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "username": "username", "password": "password" }, "index": "remote_index" }, "dest": { "index": "local_index" } }

重新索引 VPC 中的 Amazon ES 域之间的数据

每个 Amazon ES 域都由其自己的内部 VPC 基础设施组成。当您在现有虚拟私有云 (VPC) 中创建新的 Amazon ES 域时,将为 Amazon ES VPC 中的每个数据节点创建弹性网络接口 (ENI)。由于远程重新索引操作是从本地 Amazon ES 域执行的,因此在其自己的私有 VPC 中执行的,因此您无法访问远程 Amazon ES 域的 VPC。相反,您需要一个可公开访问的反向代理。

要在两个 VPC 域之间使用远程重新索引,即使域位于同一个 VPC 中,也需要一个代理服务器。在远程群集前面创建具有可公开访问的终端节点的代理,并在重新索引主体中传递代理终端节点。代理域必须具有由公有证书颁发机构 (CA) 签名的证书。不支持自签名或私有 CA 签名证书。

重新索引非亚马逊 ES 域之间的数据

如果远程索引托管在 Amazon ES 之外(如在自我管理的 EC2 实例中),请指定external参数为true

POST <local-domain-endpoint>/_reindex { "source": { "remote": { "host": "https://remote_endpoint:443", "username": "username", "password": "password", "external": true }, "index": "remote_index" }, "dest": { "index": "local_index" } }

在这种情况下,只支持使用用户名和密码的基本授权。远程域必须具有由公共 CA 签名的证书。不支持自签名或私有 CA 签名证书。

重新索引大型数据集

远程重新索引将滚动请求发送到具有以下默认值的远程域:

  • 5 分钟的搜索上下文

  • 套接字超时 30 秒

  • 1,000 个 Batch 大小

我们建议调整这些参数以适应您的数据。对于大型文档,请考虑较小的批处理大小和/或更长的超时。有关更多信息,请参阅 。滚动搜索

POST <local-domain-endpoint>/_reindex?pretty=true&scroll=10h&wait_for_completion=false { "source": { "remote": { "host": "https://remote_endpoint:443", "socket_timeout": "60m" }, "size": 100, "index": "remote_index" }, "dest": { "index": "local_index" } }

我们还建议将以下设置添加到本地索引以获得更好的性能:

PUT local_index { "settings": { "refresh_interval": -1, "number_of_replicas": 0 } }

重新索引过程完成后,您可以设置所需的副本计数并删除刷新间隔设置。

要仅重新索引通过查询选择的文档子集,请执行以下操作:

POST <local-domain-endpoint>/_reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443" }, "index": "remote_index", "query": { "match": { "field_name": "text" } } }, "dest": { "index": "local_index" } }

远程重新索引不支持切片,因此您无法并行对同一请求执行多个滚动操作。

远程重新索引设置

除标准重新索引选项之外,Amazon ES 还支持以下选项:

选项 有效值 描述 必需
外部 Boolean 如果远程域不是 Amazon ES 域,请指定为true
区域 字符串 如果远程域位于不同的区域,请指定该区域的名称。