

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

# Amazon OpenSearch 服务的跨集群复制
<a name="replication"></a>

通过 Amazon S OpenSearch ervice 中的跨集群复制，您可以将用户索引、映射和元数据从一个 OpenSearch 服务域复制到另一个服务域。使用跨集群复制有助于确保在发生中断时进行灾难恢复，并允许您跨地理位置较远的数据中心复制数据以减少延迟。您需要为域间[传输 AWS 的数据支付标准数据传输费用](https://aws.amazon.com/opensearch-service/pricing/)。

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

跨集群复制适用于运行 Elasticsearch 7.10 或 1.1 或 OpenSearch 更高版本的域名。

**注意**  
本文档介绍如何从 Amazon OpenSearch 服务的角度设置跨集群复制。这包括使用 AWS 管理控制台 来设置跨集群连接，这在自我管理 OpenSearch 的集群上是不可能的。有关完整文档，包括设置参考和全面的 API 参考，请参阅 OpenSearch 文档中的[跨集群复制](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/index/)。

**Topics**
+ [限制](#replication-limitations)
+ [先决条件](#replication-prereqs)
+ [权限要求](#replication-permissions)
+ [设置跨集群连接](#replication-connect)
+ [开始复制](#replication-start)
+ [确认复制](#replication-confirm)
+ [暂停和恢复复制](#replication-pause-resume)
+ [停止复制](#replication-stop)
+ [自动关注](#replication-autofollow)
+ [升级已连接的域](#replication-upgrade)

## 限制
<a name="replication-limitations"></a>

跨集群复制具有以下限制：
+ 您无法在亚马逊 OpenSearch 服务域和自管集群 OpenSearch 或 Elasticsearch 集群之间复制数据。
+ 您无法将索引从一个关注者域复制到另一个关注者域。如果要将索引复制到多个关注者域，则只能从单个领导者域中进行复制。
+ 一个域可以通过入站和出站连接的组合连接到最多 20 个其他域。
+ 最初设置跨集群连接时，领导者域的版本必须与关注者域相同或更高。
+ 您不能使用 CloudFormation 来连接域名。
+ 不能在 M3 和可突增（T2 和 T3）实例上使用跨集群复制。
+ 您不能在 UltraWarm 或冷索引之间复制数据。这两个索引都必须位于热存储中。
+ 删除领导者域的索引时，不会自动删除关注者域中对应的索引。
+ 在默认和可[选](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)模式之间不支持跨集群复制。两个域名都必须位于默认区域或可选区域。

## 先决条件
<a name="replication-prereqs"></a>

在设置跨集群复制之前，请确保域满足以下要求：
+ Elasticsearch 7.10 或 1.1 或 OpenSearch 更高版本
+ 已启用[精细访问控制](fgac.md)
+ Node-to-node 已启用@@ [加密](ntn.md)
+ 领导者指数必须`index.soft_deletes.enabled`设置为`true`。默认情况下，在 Elasticsearch 7.0 或 OpenSearch 1.0 及更高版本中创建的索引会启用此设置。但是，在 Elasticsearch 6.x 中创建并升级后的索引会保留。`soft_deletes=false`要复制此类索引，必须先对其重新编制索引。

  要检查索引是否启用了软删除，请执行以下操作：

  ```
  GET <index-name>/_settings?include_defaults=true&flat_settings=true&filter_path=*.settings.index.soft_deletes.enabled
  ```

  如果`soft_deletes`是`false`，则在开始复制之前将数据重新索引到新索引。

## 权限要求
<a name="replication-permissions"></a>

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

------
#### [ JSON ]

****  

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

------

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

为了让非管理员用户执行复制活动，还需要将他们映射到适当的权限。大多数权限对应于特定的 [REST API 操作](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/api/)。例如，`indices:admin/plugins/replication/index/_resume` 权限可让您恢复索引的复制。有关权限的完整列表，请参阅 OpenSearch 文档中的[复制权限](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/permissions/#replication-permissions)。

**注意**  
开始复制和创建复制规则的命令是特殊情况。由于它们在领导域和关注者域上调用后台进程，因此您必须在请求`follower_cluster_role`中传递`leader_cluster_role`和。 OpenSearch 服务在所有后端复制任务中都使用这些角色。有关映射和使用这些角色的信息，请参阅 OpenSearch文档中的[映射领导者和关注者集群角色](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/permissions/#map-the-leader-and-follower-cluster-roles)。

## 设置跨集群连接
<a name="replication-connect"></a>

要将索引从一个域复制到另一个域，您需要在域之间建立跨集群连接。连接域最简单的方法是通过域控制面板的 **Connections（连接）**选项卡。还可使用[配置 API](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html) 或 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/opensearch/create-outbound-connection.html)。由于跨集群复制遵循“拉取”模型，因此您可从关注者域启动连接。

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

**设置连接**

1. 在 Amazon Ser OpenSearch vice 控制台中，选择关注者域，前往 “**连接**” 选项卡，然后选择 “**请求**”。

1. 对于**Connection alias（连接别名）**，输入您的连接的名称。

1. 在连接您 AWS 账户 和地区的域名之间进行选择，也可以选择连接到其他账户或地区的域名。
   + 要连接到您 AWS 账户 和地区的域名，请选择该域并选择**请求**。
   + **要连接到其他域 AWS 账户 或区域中的域，请指定远程域的 ARN，然后选择请求。**

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

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

## 开始复制
<a name="replication-start"></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文档[中的映射领导者和关注者集群角色](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/permissions/#map-the-leader-and-follower-cluster-roles)。

## 确认复制
<a name="replication-confirm"></a>

要确认复制正在进行，请获取复制状态：

```
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"
        }
      }
    ]
  }
}
```

## 暂停和恢复复制
<a name="replication-pause-resume"></a>

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

```
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 个小时后恢复复制。您必须停止复制，删除从索引，然后重新启动主项的复制。

## 停止复制
<a name="replication-stop"></a>

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

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

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

## 自动关注
<a name="replication-autofollow"></a>

您可以针对单个领导域定义一组复制规则，这些规则会自动复制匹配指定模式的索引。当领导域上的索引与其中一个模式相匹配时（例如，`books*`），则会在关注者域上创建匹配的关注者索引。 OpenSearch Service 会复制与该模式匹配的所有现有索引以及您创建的新索引。它不会复制关注者域中已存在的索引。

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

### 创建复制规则
<a name="replication-rule-create"></a>

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

```
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文档[中的映射领导者和关注者集群角色](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/permissions/#map-the-leader-and-follower-cluster-roles)。

要检索域中现有复制规则的列表，请使用[自动关注统计数据 API 操作](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/api/#get-auto-follow-stats)。

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

```
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
```

### 删除复制规则
<a name="replication-rule-delete"></a>

当您删除复制规则时，S OpenSearch ervice 会停止复制与该模式匹配*的新*索引，但会继续现有的复制活动，直到您[停止复制](#replication-stop)这些索引。

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

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

## 升级已连接的域
<a name="replication-upgrade"></a>

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