

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon OpenSearch Service 的跨叢集複寫
<a name="replication"></a>

透過 Amazon OpenSearch Service 中的跨叢集複寫，您可以將使用者索引、映射和中繼資料從一個 OpenSearch Service 網域複寫到另一個網域。使用跨叢集複寫有助於確保災難復原是否會中斷，並可讓您跨遠距資料中心複寫資料，以減少延遲。您需要為網域之間傳輸的資料支付[標準 AWS 資料傳輸費用](https://aws.amazon.com/opensearch-service/pricing/)。

跨叢集複寫遵循主動-被動複寫模型，其中*本機*或*跟隨者*索引會從*遠端*或*領導*索引提取資料。領導索引是指資料來源，或是您要從中複寫資料的索引。跟隨者索引是指資料的目標，或是您想要複寫資料的索引。

跨叢集複寫適用於執行 Elasticsearch 7.10 或 OpenSearch 1.1 或更高版本的網域。

**注意**  
本文件說明如何從 Amazon OpenSearch Service 的角度設定跨叢集複寫。這包括使用 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>

跨叢集複寫有下列限制：
+ 您無法在 Amazon OpenSearch Service 網域或自我管理的 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 或 OpenSearch 1.1 或更高版本
+ 已啟用[精細存取控制](fgac.md)
+ 已啟用[節點對節點加密](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 政策。此政策也可讓您執行其他操作，例如編製文件索引和執行標準搜尋：

------
#### [ 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)。

**注意**  
開始複寫和建立複寫規則的命令屬於特殊情況。因為這兩者會叫用領導和追蹤網域上的背景處理程序，所以您必須在請求中傳遞 `leader_cluster_role` 和 `follower_cluster_role`。OpenSearch Service 在所有後端複寫任務中會使用這些角色。如需有關對應和使用這些角色的詳細資訊，請參閱 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 OpenSearch Service 主控台中，選取追蹤網域，前往 **Connections** (連線) 索引標籤，然後選擇 **Request** (請求)。

1. 對於 **Connection alias** (連線別名)，輸入連線的名稱。

1. 選擇連線到您 AWS 帳戶 和 區域中的網域，或另一個帳戶或區域中的網域。
   + 若要連線到 AWS 帳戶 和 區域中的網域，請選取網域，然後選擇**請求**。
   + 若要連線到另一個 AWS 帳戶 或區域中的網域，請指定遠端網域的 ARN，然後選擇**請求**。

OpenSearch Service 會驗證連線請求。如果網域不相容，連線會失敗。如果驗證成功，則會將請求傳送至目的地網域進行核准。當目的地網域核准請求時，您就可以開始複寫。

跨叢集複寫支援雙向複寫。這表示您可以建立從網域 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"
   }
}
```

您可以在網域儀表板的 **Connections** (連線) 索引標籤上找到連線別名。

為了簡單起見，此範例假設管理員發出請求，並針對 `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 代表五個碎片，依此類推)。這些值會隨著您所做的每項變更而遞增為正整數。如果值是相同的，表示索引已完全同步。您可以使用這些檢查點的值來測量跨網域的複寫延遲。

若要進一步驗證複寫，請將文件新增至領導索引：

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

您可以在網域儀表板的 **Connections** (連線) 索引標籤上找到連線別名。

為了簡單起見，此範例假設管理員發出請求，並使用 `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>

當您刪除複寫規則時，OpenSearch Service 會停止複寫與模式相符的*新*索引，但會繼續現有的複寫活動，直到您[停止複寫](#replication-stop)這些索引為止。

從追蹤網域刪除複寫規則：

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

## 升級連線的網域
<a name="replication-upgrade"></a>

若要升級具有跨叢集連線之兩個網域的引擎版本，請先升級追隨網域，然後再升級領導網域。請勿刪除它們之間的連線，否則複寫會暫停，您將無法繼續。