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

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

使用远程重新索引迁移亚马逊 OpenSearch 服务索引

远程重新索引允许您将索引从一个 Amazon S OpenSearch ervice 域复制到另一个域中。您可以从任何 OpenSearch 服务域或自管理集群 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 Ser OpenSearch vice 域之间重新编制数据索引。有关该reindex操作的完整文档,包括详细步骤和支持的选项,请参阅文档中的 Reind ex OpenSearch 文档。

先决条件

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

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

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

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

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

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

最基本的场景是,远程索引与您的本地域 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 服务域之间重新编制数据索引

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

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

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

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

  1. 导航到亚马逊 OpenSearch 服务控制台,网址为https://console.amazonaws.cn/aos/

  2. 在左侧导航窗格中,选择

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

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

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

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

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

    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. 使用 CreateOutboundConnectionAPI 操作请求从本地域到远程域的新连接。

    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 的 AcceptInboundConnectionAPI 操作来批准来自本地域的请求。

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

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

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

  4. 要确认本地域中尚不存在远程域索引,请运行以下 GET 请求。remote-domain-index-name用您自己的索引名称替换。

    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 服务需要公共终端节点,因为它无法将流量发送到您的 VPC。

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

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

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

如果远程索引托管在 OpenSearch 服务之外,例如在自我管理的 EC2 实例中,请trueexternal参数设置为:

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

在这种情况下,仅支持使用用户名和密码进行基本身份验证。远程域必须具有可公开访问的终端节点(即使它与本地 OpenSearch 服务域位于同一 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" } }

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

远程重新索引设置

除了标准的重新索引选项外,S OpenSearch ervice 还支持以下选项:

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