跨集群复制 Amazon OpenSearch Service - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

跨集群复制 Amazon OpenSearch Service

Amazon OpenSearch Service 中的跨集群复制可让您将用户索引、映射和元数据从一个 OpenSearch Service 域复制到另一个。使用跨集群复制有助于确保在发生中断时进行灾难恢复,并允许您跨地理位置较远的数据中心复制数据以减少延迟。您需要为在域之间传输的数据支付标准的 Amazon 数据传输费用

跨集群复制遵循主动-被动复制模型,其中本地索引或关注者索引(复制数据的位置)从远程索引或领导者索引中提取数据。领导者索引是指数据源,或者要从中复制数据的索引。关注者索引是指数据目标,或者要将数据复制到 的索引。

跨集群复制可在运行 Elasticsearch 7.10 或 OpenSearch 1.1 或更高版本的域上使用。

注意

本文档从 Amazon OpenSearch Service 的角度介绍了如何设置跨集群复制。这包括使用 Amazon Web Services Management Console 来设置跨集群连接,自主管理型 OpenSearch 集群不支持此功能。有关完整文档,包括设置参考和全面的 API 参考,请参阅 OpenSearch 文档中的 Cross-cluster replication

限制

跨集群复制具有以下限制:

  • 您无法在 Amazon OpenSearch Service 域和自托管 OpenSearch 和 Elasticsearch 集群之间复制数据。

  • 您无法将索引从一个关注者域复制到另一个关注者域。如果要将索引复制到多个关注者域,则只能从单个领导者域中进行复制。

  • 一个域可以通过入站和出站连接的组合连接到最多 20 个其他域。

  • 最初设置跨集群连接时,领导者域的版本必须与关注者域相同或更高。

  • 不能使用 Amazon CloudFormation 连接域。

  • 不能在 M3 和可突增(T2 和 T3)实例上使用跨集群复制。

  • 您不能在 UltraWarm 索引或冷索引之间复制数据。这两个索引都必须位于热存储中。

  • 删除领导者域的索引时,不会自动删除关注者域中对应的索引。

先决条件

在设置跨集群复制之前,请确保域满足以下要求:

权限要求

为了开始复制,必须包括对远程(领导者)域的 es:ESCrossClusterGet 权限。我们建议对远程域采取以下 IAM policy。此策略还允许您执行其他操作,例如编制文档索引和执行标准搜索:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/leader-domain/*" }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/leader-domain" } ] }

请确保对 /leader-domain,而不是 /leader-domain/* 应用了 es:ESCrossClusterGet 权限。

为了让非管理员用户执行复制活动,还需要将他们映射到适当的权限。大多数权限对应于特定的 REST API 操作。例如,indices:admin/plugins/replication/index/_resume 权限可让您恢复索引的复制。有关权限的完整列表,请参阅 OpenSearch 文档中的复制权限

注意

开始复制和创建复制规则的命令是特殊情况。由于这些命令在领导者和关注者域上调用后台进程,因此您必须在请求中传递 leader_cluster_rolefollower_cluster_role。OpenSearch Service 将在所有后端复制任务中使用这些角色。有关映射和使用这些角色的信息,请参阅 OpenSearch 文档中的映射领导者和关注者集群角色

设置跨集群连接

要将索引从一个域复制到另一个域,您需要在域之间建立跨集群连接。连接域最简单的方法是通过域控制面板的 Connections(连接)选项卡。还可使用配置 APIAmazon CLI。由于跨集群复制遵循“拉取”模型,因此您可从关注者域启动连接。

注意

如果您之前连接两个域来执行跨集群搜索,则无法使用同一连接进行复制。连接在控制台中将标记为 SEARCH_ONLY。为了在以前连接的两个域之间执行复制,您必须先删除该连接,然后再重新创建它。完成此操作后,该连接可用于跨集群搜索和跨集群复制。

设置连接
  1. 在 Amazon OpenSearch Service 控制台中,选择关注者域,转到 Connections(连接)选项卡,然后选择 Request(请求)

  2. 对于 Connection alias(连接别名),输入您的连接的名称。

  3. 选择连接您的 Amazon Web Services 账户 和区域中的域还是其他账户或区域中的域。

    • 要连接到您的 Amazon Web Services 账户 和区域中的域,请选择该域,然后选择 Request(请求)

    • 要连接到另一个 Amazon Web Services 账户 或区域中的域,请指定远程域的 ARN,然后选择 Request(请求)

OpenSearch Service 会验证连接请求。如果域不兼容,则连接失败。如果验证成功,它将发送到目标域进行批准。目标域批准请求后,您可以开始复制。

跨集群复制支持双向复制。这意味着您可以创建从 A 域到 B 域的出站连接,以及从 B 域到 A 域的另一个出站连接。然后,您可以设置复制,使 A 域遵循 B 域中的索引,使 B 域遵循 A 域中的索引。

开始复制

建立跨集群连接后,您可以开始复制数据。首先,在领导者域中创建要复制的索引:

PUT leader-01

要复制该索引,请将以下命令发送到关注者域:

PUT _plugins/_replication/follower-01/_start { "leader_alias": "connection-alias", "leader_index": "leader-01", "use_roles":{ "leader_cluster_role": "all_access", "follower_cluster_role": "all_access" } }

您可以在域控制面板的连接选项卡上找到连接别名。

为简单起见,本例假设管理员正在发出请求并对 leader_cluster_rolefollower_cluster_role 使用 all_access。但是,在生产环境中,我们建议您在领导者和关注者索引上创建复制用户,并相应地进行映射。用户名必须完全相同。有关这些角色以及如何进行映射的信息,请参阅 OpenSearch 文档中的映射领导者和关注者集群角色

确认复制

要确认复制正在进行,请获取复制状态:

GET _plugins/_replication/follower-01/_status { "status" : "SYNCING", "reason" : "User initiated", "leader_alias" : "connection-alias", "leader_index" : "leader-01", "follower_index" : "follower-01", "syncing_details" : { "leader_checkpoint" : -5, "follower_checkpoint" : -5, "seq_no" : 0 } }

领导者和关注者检查点值以负整数开始,反映您拥有的分片数量(-1 表示一个分片,-5 表示 5 个分片,依此类推)。随着每次进行更改,这些值会递增为正整数。如果值相同,则意味着索引已完全同步。您可以使用这些检查点值来度量域之间的复制延迟。

要进一步验证复制,请将文档添加到领导者索引:

PUT leader-01/_doc/1 { "Doctor Sleep":"Stephen King" }

然后确认其在关注者索引上显示:

GET follower-01/_search { ... "max_score" : 1.0, "hits" : [ { "_index" : "follower-01", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "Doctor Sleep" : "Stephen King" } } ] } }

暂停和恢复复制

如果需要修复问题或减少领导域的负载,可以暂时暂停复制。将此请求发送到关注者域。确保包含空的请求体:

POST _plugins/_replication/follower-01/_pause {}

然后获取状态以确保复制已暂停:

GET _plugins/_replication/follower-01/_status { "status" : "PAUSED", "reason" : "User initiated", "leader_alias" : "connection-alias", "leader_index" : "leader-01", "follower_index" : "follower-01" }

完成更改后,恢复复制。将此请求发送到关注者域。确保包含空的请求体:

POST _plugins/_replication/follower-01/_resume {}

无法在复制暂停超过 12 个小时后恢复复制。您必须停止复制,删除从索引,然后重新启动主项的复制。

停止复制

完全停止复制后,关注者索引会取消关注领导者并成为标准索引。停止复制后,您无法重新启动复制。

停止从关注者域进行复制。确保包含空的请求体:

POST _plugins/_replication/follower-01/_stop {}

自动关注

您可以针对单个领导域定义一组复制规则,这些规则会自动复制匹配指定模式的索引。如果领导域上的索引符合任何一种模式(例如,books*)时,系统将在关注者域上创建匹配的关注者索引。OpenSearch Service 会复制符合该模式的所有现有索引,以及您创建的新索引。它不会复制关注者域中已存在的索引。

要复制所有索引(系统创建的索引以及关注者域中已存在的索引除外),请使用通配符(*)模式。

创建复制规则

在关注者域上创建复制规则并指定跨集群连接的名称:

POST _plugins/_replication/_autofollow { "leader_alias" : "connection-alias", "name": "rule-name", "pattern": "books*", "use_roles":{ "leader_cluster_role": "all_access", "follower_cluster_role": "all_access" } }

您可以在域控制面板的连接选项卡上找到连接别名。

为简单起见,本例假设管理员正在发出请求并使用 all_access 作为领导者和关注者域角色。但是,在生产环境中,我们建议您在领导者和关注者索引上创建复制用户,并相应地进行映射。用户名必须完全相同。有关这些角色以及如何进行映射的信息,请参阅 OpenSearch 文档中的映射领导者和关注者集群角色

要检索域中现有复制规则的列表,请使用自动关注统计数据 API 操作

要测试规则,请创建一个与领导者域模式匹配的索引:

PUT books-are-fun

然后检查其副本是否出现在关注者域中:

GET _cat/indices health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open books-are-fun ldfHO78xYYdxRMULuiTvSQ 1 1 0 0 208b 208b

删除复制规则

删除复制规则后,OpenSearch Service 会停止复制匹配该模式的索引,但继续现有复制活动,直到您停止复制这些索引。

从关注者域中删除复制规则:

DELETE _plugins/_replication/_autofollow { "leader_alias" : "connection-alias", "name": "rule-name" }

升级已连接的域

要升级具有跨集群连接的两个域的引擎版本,请先升级关注者域,然后再升级领导者域。不要删除两者之间的连接,否则复制会暂停,您将无法恢复。