本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon OpenSearch 服务的跨集群复制
通过 Amazon S  OpenSearch  ervice 中的跨集群复制,您可以将用户索引、映射和元数据从一个 OpenSearch 服务域复制到另一个服务域。使用跨集群复制有助于确保在发生中断时进行灾难恢复,并允许您跨地理位置较远的数据中心复制数据以减少延迟。您需要为域间传输 Amazon 的数据支付标准数据传输费用
跨集群复制遵循主动-被动复制模型,其中本地索引或关注者索引(复制数据的位置)从远程索引或领导者索引中提取数据。领导者索引是指数据源,或者要从中复制数据的索引。关注者索引是指数据目标,或者要将数据复制到 的索引。
跨集群复制适用于运行 Elasticsearch 7.10 或 1.1 或 OpenSearch 更高版本的域名。
注意
本文档介绍如何从 Amazon  OpenSearch  服务的角度设置跨集群复制。这包括使用 Amazon Web Services Management Console 来设置跨集群连接,这在自我管理 OpenSearch 的集群上是不可能的。有关完整文档,包括设置参考和全面的 API 参考,请参阅 OpenSearch 文档中的跨集群复制
限制
跨集群复制具有以下限制:
- 
                您无法在亚马逊 OpenSearch 服务域和自管集群 OpenSearch 或 Elasticsearch 集群之间复制数据。 
- 
                您无法将索引从一个关注者域复制到另一个关注者域。如果要将索引复制到多个关注者域,则只能从单个领导者域中进行复制。 
- 
                一个域可以通过入站和出站连接的组合连接到最多 20 个其他域。 
- 
                最初设置跨集群连接时,领导者域的版本必须与关注者域相同或更高。 
- 
                您不能使用 Amazon CloudFormation 来连接域名。 
- 
                不能在 M3 和可突增(T2 和 T3)实例上使用跨集群复制。 
- 
                您不能在 UltraWarm 或冷索引之间复制数据。这两个索引都必须位于热存储中。 
- 
                删除领导者域的索引时,不会自动删除关注者域中对应的索引。 
先决条件
在设置跨集群复制之前,请确保域满足以下要求:
权限要求
为了开始复制,必须包括对远程(领导者)域的 es:ESCrossClusterGet 权限。我们建议对远程域采取以下 IAM policy。此策略还允许您执行其他操作,例如编制文档索引和执行标准搜索:
请确保对 /leader-domain,而不是 /leader-domain/* 应用了 es:ESCrossClusterGet 权限。
为了让非管理员用户执行复制活动,还需要将他们映射到适当的权限。大多数权限对应于特定的 REST API 操作indices:admin/plugins/replication/index/_resume 权限可让您恢复索引的复制。有关权限的完整列表,请参阅 OpenSearch 文档中的复制权限
注意
开始复制和创建复制规则的命令是特殊情况。由于它们在领导域和关注者域上调用后台进程,因此您必须在请求follower_cluster_role中传递leader_cluster_role和。  OpenSearch 服务在所有后端复制任务中都使用这些角色。有关映射和使用这些角色的信息,请参阅 OpenSearch文档中的映射领导者和关注者集群角色
设置跨集群连接
要将索引从一个域复制到另一个域,您需要在域之间建立跨集群连接。连接域最简单的方法是通过域控制面板的 Connections(连接)选项卡。还可使用配置 API 或 Amazon CLI。由于跨集群复制遵循“拉取”模型,因此您可从关注者域启动连接。
注意
如果您之前连接两个域来执行跨集群搜索,则无法使用同一连接进行复制。连接在控制台中将标记为 SEARCH_ONLY。为了在以前连接的两个域之间执行复制,您必须先删除该连接,然后再重新创建它。完成此操作后,该连接可用于跨集群搜索和跨集群复制。
设置连接
- 
                在 Amazon Ser OpenSearch vice 控制台中,选择关注者域,前往 “连接” 选项卡,然后选择 “请求”。 
- 
                对于 Connection alias(连接别名),输入您的连接的名称。 
- 
                在连接您 Amazon Web Services 账户 和地区的域名之间进行选择,也可以选择连接到其他账户或地区的域名。 - 
                        要连接到您 Amazon Web Services 账户 和地区的域名,请选择该域并选择请求。 
- 
                        要连接到其他域 Amazon Web Services 账户 或区域中的域,请指定远程域的 ARN,然后选择请求。 
 
- 
                        
OpenSearch 服务验证连接请求。如果域不兼容,则连接失败。如果验证成功,它将发送到目标域进行批准。目标域批准请求后,您可以开始复制。
跨集群复制支持双向复制。这意味着您可以创建从 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_role 和 follower_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删除复制规则
当您删除复制规则时,S OpenSearch ervice 会停止复制与该模式匹配的新索引,但会继续现有的复制活动,直到您停止复制这些索引。
从关注者域中删除复制规则:
DELETE _plugins/_replication/_autofollow
{
   "leader_alias" : "connection-alias",
   "name": "rule-name"
}升级已连接的域
要升级具有跨集群连接的两个域的引擎版本,请先升级关注者域,然后再升级领导者域。不要删除两者之间的连接,否则复制会暂停,您将无法恢复。