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

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

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

远程重新索引允许您从一个亚马逊复制索引OpenSearch服务集群到另一个集群。您可以从任何位置迁移索引OpenSearch服务域或自行管理OpenSearch和弹性搜索集群。

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

的完整文档reindex操作,包括详细步骤和支持的选项,可在OpenSearch文档

先决条件

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

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

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

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

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

最基本的情况是,源索引与具有可公开访问终端节点的目标域位于同一 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" } }

在两者之间重新索引数据OpenSearch源位于 VPC 中的服务域

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

因为远程重新索引操作是从目标执行的OpenSearch服务域,因此在其自己的私有 VPC 中,您需要一种访问源域的 VPC 的方法。要做到这一点,您可以使用内置的 VPC 终端节点连接功能通过以下方式建立连接Amazon PrivateLink,或者通过配置代理。

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

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

  1. 导航到亚马逊OpenSearch服务控制台位于https://console.amazonaws.cn/aos/

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

  3. 选择本地域,这是您要将数据复制到的域。随即打开域详细信息页面。选择连接在一般信息下方添加选项卡,然后选择请求

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

  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":"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. 使用AcceptInboundConnection使用您的连接 ID 进行 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 请求。替换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 内且您不想使用 VPC 终端节点连接功能,则必须使用可公开访问的终端节点配置代理。在这种情况下,OpenSearch服务需要公有终端节点,因为它无法向您的 VPC 发送流量。

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

远程 reindex 命令是从目标域运行的,因此源流量无法使用这些端点访问源域。这就是为什么在这个用例中需要代理的原因。代理域必须具有由公共证书颁发机构 (CA) 签名的证书。不支持自签名或私有 CA 签名证书。

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

如果源索引托管在外部OpenSearch服务,就像在自我管理的 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" } }

在这种情况下,只支持使用用户名和密码的基本授权。源域必须具有可公开访问的终端节点(即使它与目标位于同一 VPC 中)OpenSearch服务域)和由公共 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" } }

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

远程重新索引设置

除了标准的重新索引选项外,OpenSearch服务支持以下选项:

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