

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

# Amazon OpenSearch Service 的多層儲存
<a name="multi-tier-storage"></a>

Amazon OpenSearch Service 的多層儲存是一種智慧型資料管理解決方案，可透過管理不同儲存層的資料來最佳化效能和成本。此架構可讓組織將經常存取的資料保留在高效能熱儲存中，同時將較不經常存取的資料移至更具成本效益的暖儲存，從而有效率地平衡效能和成本之間的權衡。

Amazon OpenSearch Service 為熱/暖儲存層提供兩種架構選項：
+ **OpenSearch 多層儲存架構 **
  + 結合 Amazon S3 與本機執行個體儲存體
  + 採用 OpenSearch Optimized Instances 技術
  + 支援暖層中的寫入操作
  + 支援在熱層和暖層之間無縫遷移資料
  + 適用於 OpenSearch 3.3 及更高版本
  + 不支援冷方案
+ **UltraWarm 型架構**
  + 結合 Amazon S3 與本機執行個體儲存體
  + 採用 UltraWarm 執行個體
  + 針對唯讀暖層工作負載進行最佳化
  + 適用於 Elasticsearch 6.8 版及更新版本，以及所有 OpenSearch 版本
  + 支援冷方案

**注意**  
 本文件僅著重於多層架構。如需 Ultrawarm 儲存架構，請參閱 [Ultrawarm](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ultrawarm.html) 和 [Cold Storage](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/cold-storage.html) 

## 多層儲存架構
<a name="multi-tier"></a>

**Topics**
+ [主要優點](#multi-tier-benefits)
+ [先決條件](#multi-tier-prerequisites)
+ [限制](#multi-tier-limitations)
+ [須知事項](#things-to-note)
+ [建立多層網域](#multi-tier-creating)
+ [管理層遷移](#multi-tier-managing)
+ [安全組態](#multi-tier-security)
+ [最佳實務](#multi-tier-best-practices)
+ [監控指標](#multi-tier-metrics)

### 主要優點
<a name="multi-tier-benefits"></a>
+ **可寫入暖：**支援暖索引的寫入操作
+ **無縫遷移：**跨儲存層無縫移動資料
+ **成本最佳化：**將非作用中的資料移至經濟實惠的暖儲存，以降低儲存成本
+ **效能增強：**維持熱層中經常存取資料的高效能
+ **彈性資料管理：**選擇最符合您工作負載需求的架構
+ **自動化管理：**跨儲存層簡化資料生命週期管理

### 先決條件
<a name="multi-tier-prerequisites"></a>
+ **引擎版本：**OpenSearch **3.3 或更新版本**
+ **執行個體系列：**
  + 熱節點：OR1, OR2, OM2或 OI2
  + 暖節點：OI2
+ **安全性：**Node-to-node加密、靜態加密、HTTPS 強制執行

### 限制
<a name="multi-tier-limitations"></a>
+ 適用於所有具有 OpenSearch 最佳化執行個體且尚未啟用 Ultrawarm 的網域
+ 不支援冷方案

### 須知事項
<a name="things-to-note"></a>
+ 熱遷移至暖遷移不會觸發 mult-tier 架構中的強制合併。如有需要，使用者仍然可以使用索引管理政策協調強制合併。
+ 除了編製索引之外，暖節點現在也會執行背景合併操作 （類似熱）。
+ 暖索引的所有搜尋請求都會路由至主要碎片，而複本只會在主要碎片關閉時提供讀取。
+ 此架構也支援暖索引的自動化快照
+ 只有熱索引才支援跨叢集複寫
+ Shrink、Split 和 Clone 等索引 APIs 不適用於暖索引。

### 建立多層網域
<a name="multi-tier-creating"></a>

#### 步驟 1：建立網域
<a name="multi-tier-step1"></a>

```
aws opensearch create-domain \
      --domain-name my-domain \
      --engine-version OpenSearch_3.3 \
      --cluster-config InstanceCount=3,InstanceType=or2.large.search,DedicatedMasterEnabled=true,DedicatedMasterType=m6g.large.search,DedicatedMasterCount=3,WarmEnabled=true,WarmCount=3,WarmType=oi2.2xlarge.search \
      --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=11 \
      --node-to-node-encryption-options Enabled=true \
      --encryption-at-rest-options Enabled=true \
      --domain-endpoint-options EnforceHTTPS=true,TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07 \
      --advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"user_name","MasterUserPassword":"your_pass"}}' \
      --access-policies '{"Version": "2012-10-17",		 	 	  "Statement":[{"Effect":"Allow","Principal":"*","Action":"es:*","Resource":"*"}]}' \
      --region us-east-1
```

#### 步驟 2：驗證暖節點
<a name="multi-tier-step2"></a>

```
aws opensearch describe-domain-nodes --domain-name my-domain --region us-east-1
```

回應範例 （摘錄）：

```
{
      "NodeType": "Warm",
      "InstanceType": "oi2.large.search",
      "NodeStatus": "Active"
    }
```

### 管理層遷移
<a name="multi-tier-managing"></a>

多層網域支援：
+ 新的分層 APIs可簡化體驗
+ 舊版 UltraWarm APIs以實現相容性

#### 新的分層 APIs
<a name="multi-tier-new-apis"></a>

**將索引遷移至暖機：**

```
curl -XPOST 'https://localhost:9200/index-name/_tier/warm'
```

回應：

```
{"acknowledged": true}
```

**將索引遷移至熱索引：**

```
curl -XPOST 'https://localhost:9200/index-name/_tier/hot'
```

回應：

```
{"acknowledged": true}
```

**檢查分層狀態：**

```
curl -XGET 'https://localhost:9200/index-name/_tier'
```

回應範例：

```
{
      "tiering_status": {
         "index": "index-name",
         "state": "RUNNING_SHARD_RELOCATION",
         "source": "HOT",
         "target": "WARM",
         "start_time": 1745836500563,
         "shard_level_status": {
           "running": 0,
           "total": 100,
           "pending": 100,
           "succeeded": 0
         }
      }
    }
```

**詳細碎片檢視：**

```
curl 'https://localhost:9200/index1/_tier?detailed=true'
```

**列出所有進行中的遷移 （文字）：**

```
curl 'https://localhost:9200/_tier/all'
```

**列出所有進行中的遷移 (JSON)：**

```
curl 'https://localhost:9200/_tier/all?format=json'
```

**依目標層篩選：**

```
curl 'https://localhost:9200/_tier/all?target=_warm'
```

#### 舊版 UltraWarm APIs以實現相容性
<a name="multi-tier-legacy-apis"></a>

**遷移至暖機：**

```
curl -XPOST localhost:9200/_ultrawarm/migration/index2/_warm
```

**遷移至熱：**

```
curl -XPOST localhost:9200/_ultrawarm/migration/index2/_hot
```

**檢查狀態：**

```
curl -XGET localhost:9200/_ultrawarm/migration/index2/_status
```

### 安全組態
<a name="multi-tier-security"></a>

如果您在預先存在的 Amazon OpenSearch Service 網域上啟用多層儲存，則可能不會在網域上定義`storage_tiering_manager`角色。非系統管理員使用者必須映射至此角色，以便在使用精細存取控制的網域上管理暖索引。若要手動建立 `storage_tiering_manager` 角色，請執行以下步驟：

1. 在 OpenSearch Dashboards 中，移至 **Security** (安全性)，然後選擇 **Permissions** (許可)。

1. 選擇 **Create action group** (建立動作群組) 並設定下列群組：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/multi-tier-storage.html)

1. 選擇 **Roles** (角色)，然後選擇 **Create role** (建立角色)。

1. 將角色命名為 `storage_tiering_manager`。

1. 對於 **Cluster permissions** (叢集許可)，選取 `storage_tiering_cluster` 和 `cluster_monitor`。

1. 對於 **Index** (索引)，輸入 `*`。

1. 針對**索引許可**，選取 `storage_tiering_index_read``storage_tiering_index_write`和 `indices_monitor`。

1. 選擇**建立**。

1. 建立角色之後，請將其映射到將管理多層索引的任何使用者或後端角色。

### 最佳實務
<a name="multi-tier-best-practices"></a>

當您在 Amazon OpenSearch Service 網域中實作多層儲存時，請考慮下列最佳實務：
+ 定期檢閱您的資料存取模式，以最佳化層配置
+ 監控效能指標，以確保有效率的資源使用率
+ 使用新的分層 APIs 來精細控制資料遷移

### 監控指標
<a name="multi-tier-metrics"></a>

多層儲存網域提供額外的指標來監控暖層效能。這些指標包括現有的 UltraWarm 指標和 OpenSearch Optimized Instances 架構特有的新指標：

#### 新指標
<a name="multi-tier-new-metrics"></a>


| 指標名稱 | 節點層級統計資料 | 叢集層級統計資料 | 精細程度 | 
| --- | --- | --- | --- | 
| WarmIndexingLatency | 平均數 | 平均數 | 1 分鐘 | 
| WarmIndexingRate | 平均數 | 平均值、最大值、總和 | 1 分鐘 | 
| WarmThreadpoolIndexingQueue | 上限 | 總和、最大值、平均值 | 1 分鐘 | 
| WarmThreadpoolIndexingRejected | 上限 | 總和 | 1 分鐘 | 
| WarmThreadpoolIndexingThreads | 上限 | 總和，平均 | 1 分鐘 | 