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

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

使用远程重新索引迁移 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 的远程重新索引。

注意

本文档介绍如何在 Amazon OpenSearch Service 域之间重新创建数据索引。有关 reindex 操作的完整文档,包括详细步骤和支持的选项,请参阅 OpenSearch 文档中的 Reindex document

先决条件

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

  • 远程域必须可从本地域访问。对于驻留在某个 VPC 中的远程域,本地域必须具有访问该 VPC 的权限。此流程因网络配置而异,但可能涉及连接到 VPN 或托管网络或使用本机 VPC 端点连接。要了解更多信息,请参阅 在 a 中启动您的亚马逊 OpenSearch 服务域名 VPC

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

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

  • 如果您的域为数据节点使用 T2 或 T3 实例类型,则无法使用远程重新索引。

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

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

在远程域中,指定要从中重新索引的远程索引和要重新索引的本地索引:

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

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

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

GET local_index/_search

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

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

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

如果使用基本身份验证来保护远程域,请指定用户名和密码:

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

当远程域位于 VPC 时,在 OpenSearch Service 域之间重新索引数据

每个 OpenSearch Service 域都由其自己内部的虚拟私有云 (VPC) 基础设施组成。在现有 OpenSearch Service VPC 中创建新域时,将为 VPC 中的每个数据节点创建一个弹性网络接口。

由于远程重新索引操作是从远程 OpenSearch Service 域执行的,因此在其自身的私有 VPC 中,您需要一种方式来访问本地域的 VPC。您可以通过 Amazon PrivateLink 使用内置的 VPC 端点连接功能建立连接,也可以配置代理来实现此目的。

如果本地域使用 OpenSearch 版本 1.0 或更高版本,则可以使用控制台或 Amazon CLI 创建 Amazon PrivateLink 连接。Amazon PrivateLink 连接允许本地 VPC 中的资源私密地连接到具有相同 Amazon Web Services 区域 的远程 VPC 中的资源。

您可以通过控制台使用远程重新索引,在共享 VPC 端点连接的两个域之间复制索引。

  1. 导航到 Amazon OpenSearch Service 控制台,地址为 https://console.amazonaws.cn/aos/

  2. 在左侧导航窗格中,选择 Domains(域)。

  3. 选择本地域,或您希望将数据复制到的域。随即打开域详细信息页面。选择常规信息下方的连接选项卡,然后选择请求

  4. 请求连接页面上,选择 VPC 端点连接为连接模式,然后输入其他相关详细信息。这些详细信息包括远程域,即您希望从中复制数据的域。然后选择请求

  5. 导航到远程域的详细信息页面,选择连接选项卡,找到入站连接表。选中刚刚从中创建连接的域(本地域)名称旁边的复选框。选择 Approve(批准)。

  6. 导航回本地域,选择 Connections(连接)选项卡,找到 Outbound connections(出站连接)表。两个域之间的连接处于活动状态后,表中的 Endpoint(端点)列中将出现一个端点。复制端点。

  7. 打开本地域的控制面板,在左侧导航栏中选择 Dev Tools(开发人员工具)。要确认本地域中尚不存在远程域索引,请运行以下 GET 请求。将远程域索引名替换为您自己的索引名。

    GET remote-domain-index-name/_search { "query":{ "match_all":{} } }

    在输出中,您将看到指示“未找到索引”的错误。

  8. 在 GET 请求下方,创建一个 POST 请求并使用您的端点作为远程主机,如下所示。

    POST _reindex { "source":{ "remote":{ "host":"connection-endpoint", "username":"username", "password":"password" }, "index":"remote-domain-index-name" }, "dest":{ "index":"local-domain-index-name" } }

    运行此请求。

  9. 再次运行 GET 请求。现在,输出中会显示“存在本地索引”。您可以查询此索引,以验证 OpenSearch 是否从远程索引复制了所有数据。

您可以通过 API 使用远程重新索引,在共享 VPC 端点连接的两个域之间复制索引。

  1. 使用 CreateOutboundConnection API 操作请求从本地域到远程域的新连接。

    POST https://es.region.amazonaws.com/2021-01-01/opensearch/cc/outboundConnection { "ConnectionAlias": "remote-reindex-example", "ConnectionMode": "VPC_ENDPOINT", "LocalDomainInfo": { "AWSDomainInformation": { "DomainName": "local-domain-name", "OwnerId": "aws-account-id", "Region": "region" } }, "RemoteDomainInfo": { "AWSDomainInformation": { "DomainName": "remote-domain-name", "OwnerId": "aws-account-id", "Region": "region" } } }

    您会在回复中收到一个 ConnectionId。保存此 ID,以便在下一步中使用。

  2. 使用带有您的连接 ID 的 AcceptInboundConnection API 操作,批准来自本地域的请求。

    PUT https://es.region.amazonaws.com/2021-01-01/opensearch/cc/inboundConnection/ConnectionId/accept
  3. 使用 DescribeOutboundConnections API 操作,检索远程域的端点。

    { "Connections": [ { "ConnectionAlias": "remote-reindex-example", "ConnectionId": "connection-id", "ConnectionMode": "VPC_ENDPOINT", "ConnectionProperties": { "Endpoint": "connection-endpoint" }, ... } ] }

    保存连接端点以在步骤 5 中使用。

  4. 要确认本地域中尚不存在远程域索引,请运行以下 GET 请求。将远程域索引名替换为您自己的索引名。

    GET local-domain-endpoint/remote-domain-index-name/_search { "query":{ "match_all":{} } }

    在输出中,您将看到指示“未找到索引”的错误。

  5. 创建一个 POST 请求并使用您的端点作为远程主机,如下所示。

    POST local-domain-endpoint/_reindex { "source":{ "remote":{ "host":"connection-endpoint", "username":"username", "password":"password" }, "index":"remote-domain-index-name" }, "dest":{ "index":"local-domain-index-name" } }

    运行此请求。

  6. 再次运行 GET 请求。现在,输出中会显示“存在本地索引”。您可以查询此索引,以验证 OpenSearch 是否从远程索引复制了所有数据。

如果远程域托管在 VPC 内并且您不想使用 VPN 端点连接功能,则必须使用可公开访问的端点配置代理。在这种情况下,OpenSearch Service 需要一个公有端点,因为它无法将流量发送到您的 VPC。

当您在 VPC 模式下运行域时,将在您的 VPC 中放置一个或多个端点。但是,这些端点仅适用于进入 VPC 内域的流量,而不允许进入 VPC 本身的流量。

远程重新索引命令是从本地域运行的,因此原始流量无法使用这些端点访问远程域。这就是此用例中需要代理的原因。代理域必须具有由公共证书颁发机构 (CA) 签名的证书。不支持自签名或私有 CA 签名证书。

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

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

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

在这种情况下,仅支持使用用户名和密码的基本身份验证。远程域必须具有可公开访问的端点(即便它与本地 OpenSearch Service 域处于同一 VPC 中)和由公有 CA 签名的证书。不支持自签名或私有 CA 签名证书。

重新索引大型数据集

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

  • 5 分钟的搜索上下文

  • 套接字超时 30 秒

  • 1,000 的批处理大小

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

POST _reindex?pretty=true&scroll=10h&wait_for_completion=false { "source": { "remote": { "host": "https://remote-domain-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 _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443" }, "index": "remote_index", "query": { "match": { "field_name": "text" } } }, "dest": { "index": "local_index" } }

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

远程重新索引设置

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

Options 有效值 描述 必填
外部 布尔值 如果远程域不是 OpenSearch Service 域,或者如果您正在两个 VPC 域之间重新索引,请指定为 true
region String 如果远程域位于不同的区域中,请指定该区域名称。