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

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

远程重新索引允许您将索引从一个 Amazon OpenSearch Service 集群复制到另一个集群。您可以从任何 OpenSearch Service 域或自托管 OpenSearch 和 Elasticsearch 集群迁移索引。

远程重新索引要求目标域上的 OpenSearch 1.0 或更高版本或 Elasticsearch 6.7 或更高版本。源域的主要版本必须低于目标域或与其相同。Elasticsearch 版本被视为低于 OpenSearch 版本,这意味着您可以将数据从 Elasticsearch 域重新索引到 OpenSearch 域。在同一主要版本中,源域可以是任何次要版本。例如,支持从 Elasticsearch 7.10.x 到 7.9 的远程重新索引,但不支持从 OpenSearch 1.0 到 Elasticsearch 7.10.x 的远程重新索引。

OpenSearch 文档中提供了 reindex 操作的完整文档,包括详细步骤和支持的选项。

先决条件

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

  • 源域必须可从目标域访问。对于驻留在某个 VPC 中的源域,目标域必须具有访问该 VPC 的权限。此过程因网络配置而异,但可能涉及连接到 VPN 或托管网络或使用代理服务器。要了解更多信息,请参阅“在 VPC 中启动您的 Amazon OpenSearch Service 域”。

  • 请求必须如任何其他 REST 请求一样由源域授权。如果源域启用了精细访问控制,则您必须具有对目标域执行重新索引并读取源域上的索引的权限。有关更多安全注意事项,请参阅 在 Amazon OpenSearch Service 中进行精细访问控制

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

在 OpenSearch Service 域之间重新索引数据

最基本的情况是,源索引与具有可公开访问终端节点的目标域位于同一 Amazon Web Services 区域,并且您已签署了 IAM 凭证。

在目标域中,指定要从中重新索引的源索引和要重新索引的目标索引:

POST _reindex { "source": { "remote": { "host": "https://source-domain-endpoint:443" }, "index": "source_index" }, "dest": { "index": "target_index" } }

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

要验证索引是否已复制到目标域,请将此请求发送到目标域:

GET target_index/_search

如果源索引位于与目标域不同的区域中,请传入其区域名称,例如在此示例请求中:

POST _reindex { "source": { "remote": { "host": "https://source-domain-endpoint:443", "region": "eu-west-1" }, "index": "source_index" }, "dest": { "index": "target_index" } }

在 Amazon GovCloud (US) 或中国区域等单独区域中,由于您的 IAM 用户在这些地区无法识别,可能无法访问终端节点。

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

POST _reindex { "source": { "remote": { "host": "https://source-domain-endpoint:443", "username": "username", "password": "password" }, "index": "source_index" }, "dest": { "index": "target_index" } }

如果源域托管在 VPC 内并且没有 VPN 级连接,请使用可公开访问的终端节点配置代理。代理域必须具有由公共证书颁发机构 (CA) 签名的证书。不支持自签名或私有 CA 签名证书。

在 VPC 中的 OpenSearch Service 域之间重新索引数据

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

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

要在两个 VPC 域之间使用远程重新索引,请将 external 参数设置为 true

在非 OpenSearch Service 域之间重新索引数据

如果源索引托管在 OpenSearch Service 之外(如在自我管理的 EC2 实例中),请将 external 参数设置为 true

POST _reindex { "source": { "remote": { "host": "https://source-domain-endpoint:443", "username": "username", "password": "password", "external": true }, "index": "source_index" }, "dest": { "index": "target_index" } }

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

重新索引大型数据集

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

  • 5 分钟的搜索上下文

  • 套接字超时 30 秒

  • 1,000 的批处理大小

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

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

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

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

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

要通过查询仅重新索引选择的文档子集,请将此请求发送到目标域:

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

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

远程重新索引设置

除标准重新索引选项之外,OpenSearter Searter Service 还支持以下选项:

选项 有效值 描述 必填
外部 Boolean 如果源域不是 OpenSearch Service 域,或者如果您正在两个 VPC 域之间重新索引,请指定为 true
区域 字符串 如果源域位于不同的区域中,请指定该区域名称。