本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用远程重新索引迁移亚马逊Serv OpenSearch ice 索引
远程重新索引允许您将索引从一个 Amazon Serv OpenSearch ice 集群复制到另一个集群。您可以从任何Serv OpenSearch ice 域或自托管集群 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 的远程重新索引。
文档中提供reindex
操作的完整文档,包括详细步骤和支持的OpenSearch选项。
主题
先决条件
远程重新索引具有以下要求:
-
源域必须可从目标域访问。对于驻留在某个 VPC 中的源域,目标域必须具有访问该 VPC 的权限。此过程因网络配置而异,但可能涉及连接到 VPN 或托管网络或使用本地 VPC 端点连接。要了解更多信息,请参阅 在 VPC 中启动您的 Amazon OpenSearch Service 域。
-
请求必须如任何其他 REST 请求一样由源域授权。如果源域启用了精细访问控制,则您必须具有对目标域执行重新索引并读取源域上的索引的权限。有关更多安全注意事项,请参阅 在 Amazon Serv OpenSearch ice 中进行精细访问控制。
-
我们建议您在开始重新索引过程之前,在目标域中使用所需设置创建索引。
在 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
" } }
当源位于 VPC 中时,在 OpenSearch 服务域之间重新索引数据
每个S OpenSearch ervice 域都由其自己内部虚拟私有云 (VPC) 基础设施组成。在现有Serv OpenSearch ice VPC 中创建新域时,将为 VPC 中的每个数据节点创建弹性网络接口 (ENI)。由于远程重新索引操作是从目标Serv OpenSearch ice 域执行的,因此在其自己的私有 VPC 中,您需要一种访问源域的 VPC 的方法。您可以使用内置 VPC 终端节点连接功能通过建立连接,也可以通过Amazon PrivateLink配置代理来实现此目的。
您可以使用控制台或 API 创建 VPC 终端节点连接。Amazon CLI此选项将创建 PrivateLink 允许本地 VPC 中的资源私密地连接到远程 VPC 中的资源。
您可以在控制台上使用远程重新索引,在共享 VPC 终端节点连接的两个域之间复制索引。
-
导航至亚马逊 OpenSearch 服务控制台,网址为https://console.amazonaws.cn/aos/
。 -
在左侧导航窗格中,选择 Domains(域)。
-
选择本地域,即您希望将数据复制到的域。随即打开域详细信息页面。选择常规信息下方的 Connections(连接)选项卡,然后选择 Request(请求)。
-
在 Request connection(请求连接)页面上,选择 VPC Endpoint Connection(VPC 端点连接)为连接模式,然后输入其他相关详细信息,包括远程域,即您要从中复制数据的域。然后选择 Request(请求)。
-
导航到远程域的详细信息页面,选择 Connections(连接)选项卡,找到 Inbound connections(入站连接)表。选中刚刚从中创建连接的域(本地域)名称旁边的复选框。选择 Approve(批准)。
-
导航回本地域,选择 Connections(连接)选项卡,找到 Outbound connections(出站连接)表。两个域之间的连接处于活动状态后,表中的 Endpoint(端点)列中将出现一个端点。复制端点。
-
打开本地域的控制面板,在左侧导航栏中选择 Dev Tools(开发人员工具)。要确认本地域上尚不存在远程域索引,请运行以下 GET 请求,
remote-domain-index-name
替换为您自己的索引名称。GET
remote-domain-index-name
/_search { "query":{ "match_all":{} } }在输出中,您将看到指示“未找到索引”的错误。
-
在 GET 请求下方,创建一个 POST 请求并使用您的端点作为远程主机,如下所示。
POST _reindex { "source":{ "remote":{ "host":"
endpoint
", "username":"username
", "password":"password
" }, "index":"remote-domain-index-name
" }, "dest":{ "index":"local-domain-index-name
" } }运行此请求。
-
再次运行 GET 请求。现在,输出中会显示“存在本地索引”。您现在可以查询此索引,以验证是否从远程索引 OpenSearch 复制了所有数据。
您可以将远程重新索引与 API 结合使用,在共享 avPC 端点连接的两个域之间复制索引。
-
使用 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
中收到 a。保存此 ID 以在下一步中使用。 -
使用带有您的连接 ID AcceptInboundConnection
的 API 来批准来自本地域的请求。 PUT https://es.
region
.amazonaws.com/2021-01-01/opensearch/cc/inboundConnection/ConnectionId
/accept -
使用 DescribeOutboundConnections
API 检索远程域的终端节点。 { "Connections": [ { "ConnectionAlias": "remote-reindex-example", "ConnectionId": "
connection-id
", "ConnectionMode": "VPC_ENDPOINT", "ConnectionProperties": { "Endpoint": "connection-endpoint
" }, ... } ] }保存要在步骤 5 中使用的
连接端点
。 -
要确认本地域上尚不存在远程域索引,请运行以下 GET 请求,
remote-domain-index-name
替换为您自己的索引名称。GET
local-domain-endpoint
/remote-domain-index-name
/_search { "query":{ "match_all":{} } }在输出中,您将看到指示“未找到索引”的错误。
-
创建一个 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
" } }运行此请求。
-
再次运行 GET 请求。现在,输出中会显示“存在本地索引”。您现在可以查询此索引,以验证是否从远程索引 OpenSearch 复制了所有数据。
如果源域托管在 VPC 内并且您不想使用 VPC PN 终端节点连接功能,您必须使用可公开访问的终端节点配置代理。在这种情况下, OpenSearch 服务需要公共终端节点,因为它无法向您的 VPC 发送流量。
当您在 VPC 模式下运行域时,将在您的 VPC 中放置一个或多个终端节点,但这些终端节点仅用于流入 VPC 内域的流量,不允许流量进入 VPC 本身。远程 reindex 命令从目标域运行,因此源流量无法使用这些终端节点访问源域。这就是为什么在这个用例中需要代理的原因。代理域必须具有由公共证书颁发机构 (CA) 签名的证书。不支持自签名或私有 CA 签名证书。
在非 ServOpenSearch ice 域之间重新索引数据
如果源索引托管在 Service 之外(如在自我管理的 EC2 实例中),请将 externaexternal
l 参数设置为true
: OpenSearch
POST _reindex { "source": { "remote": { "host": "https://
source-domain-endpoint
:443", "username": "username", "password": "password", "external": true }, "index": "source_index
" }, "dest": { "index": "target_index
" } }
在这种情况下,只支持使用用户名和密码的基本授权。源域必须具有可公开访问的端点(即便它与目标Serv OpenSearch ice 域处于同一 VPC 中)和由公共 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
" } }
远程重新索引不支持切片,因此您不能并行对同一请求执行多个滚动操作。
远程重新索引设置
除标准重新索引选项之外,Serv OpenSearch ice 还支持以下选项:
选项 | 有效值 | 描述 | 必填 |
---|---|---|---|
外部 | 布尔值 | 如果源域不是Serv OpenSearch ice 域,或者如果您正在两个 VPC 域之间重新索引,请指定为true 。 |
否 |
区域 | 字符串 | 如果源域位于不同的区域中,请指定该区域名称。 | 否 |