

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

# ElastiCache 中的資料分層
<a name="data-tiering"></a>

組成複寫群組並使用 r6gd 系列節點類型的 ElastiCache for Valkey 或 Redis OSS 叢集，其資料會在記憶體和本機 SSD （固態硬碟） 儲存體之間分層。資料分層除了將資料存放在記憶體之外，還在每個叢集節點中使用低成本的固態硬碟 (SSDs)，為 Valkey 或 Redis OSS 工作負載提供了新的價格效能選項。非常適合定期存取高達 20% 的整體資料集的工作負載，以及在存取 SSD 資料時可容忍額外延遲的應用程式。

在具有資料分層的 ElastiCache 叢集上，ElastiCache 會監控其存放的每個項目的上次存取時間。當可用記憶體 (DRAM) 完全耗盡時，ElastiCache 會使用最近使用的 (LRU) 演算法，自動將不常存取的項目從記憶體移至 SSD。當隨後存取 SSD 上的資料時，ElastiCache 會在處理請求之前自動並以異步的方式將其移回記憶體。如果您的工作負載只會定期存取其資料的子集，則資料分層是以符合成本效益的方式擴展容量的最佳方式。

請注意，使用資料分層時，金鑰本身一律會保留在記憶體中，而 LRU 則會控制記憶體與磁碟上值的位置。一般而言，建議在使用資料分層時，金鑰大小小於您值的大小。

資料分層專為盡量降低對應用程式工作負載的效能影響所設計。例如，假設 500 個位元組的字串值，與請求在記憶體中的資料相比，可以預期請求存放在 SSD 上的資料時會有額外 300 微秒的延遲。

使用最大的資料分層節點大小 (cache.r6gd.16xlarge)，可以在單一 500 個節點的叢集中存放高達 1 PB (使用 1 個僅供讀取複本時為 500 TB)。資料分層與 ElastiCache 中支援的所有 Valkey 或 Redis OSS 命令和資料結構相容。不需要任何用戶端變更就能使用此功能。

**Topics**
+ [最佳實務](#data-tiering-best-practices)
+ [限制](#data-tiering-prerequisites)
+ [定價](#data-tiering-pricing)
+ [監控](#data-tiering-monitoring)
+ [使用資料分層](#data-tiering-enabling)
+ [在資料分層啟用的情況下，將資料從備份還原到叢集](#data-tiering-enabling-snapshots)

## 最佳實務
<a name="data-tiering-best-practices"></a>

建議遵循下列最佳實務：
+ 資料分層非常適合定期存取高達 20% 的整體資料集的工作負載，以及在存取 SSD 資料時可容忍額外延遲的應用程式。
+ 使用資料分層節點上可用的 SSD 容量時，建議值的大小大於金鑰大小。項目在 DRAM 和 SSD 之間移動時，金鑰將一律保留在記憶體中，而且只有值會移至 SSD 層。

## 限制
<a name="data-tiering-prerequisites"></a>

資料分層具有下列限制：
+ 只能在屬於複寫群組一部分的叢集上使用資料分層。
+ 您使用的節點類型必須來自 r6gd 系列。
+ 您必須使用 Valkey 7.2 或更新版本的引擎，或 Redis OSS 6.2 或更新版本的引擎。
+ 無法將 r6gd 叢集的備份還原到另一個叢集，除非該叢集也使用 r6gd。
+ 無法將備份匯出到 Amazon S3 以用於資料分層叢集。　
+ 在 r6gd 節點類型上執行的叢集不支援線上遷移。
+ 不支援在啟用資料分層和停用資料分層的叢集之間擴展。若要將資料從已停用資料分層的 ElastiCache 叢集遷移至已啟用資料分層的叢集，您可以將備份還原至已啟用資料分層的新叢集。如需詳細資訊，請參閱[擴展 ElastiCache](Scaling.md)。
+ 針對 Valkey 7.2 版和更新版本以及 Redis OSS 7.0.7 版和更新版本使用資料分層的叢集支援自動擴展。如需詳細資訊，請參閱[Auto Scaling Valkey 和 Redis OSS 叢集](AutoScaling.md)
+ 資料分層僅支援 `volatile-lru`、`allkeys-lru`、`volatile-lfu`、`allkeys-lfu` 和 `noeviction` 最大記憶體政策。
+ Valkey 7.2 版和更新版本以及 Redis OSS 7.0.7 版和更新版本支援無痕儲存。如需詳細資訊，請參閱[同步與備份的實作方式](Replication.Redis.Versions.md)。
+ 大於 128 MiB 的項目不會移至固態硬碟。
+ 從 Valley 8.1 及更新版本開始，金鑰 \+ 值大小小於 40 個位元組的項目將不會移至 SSD。

## 定價
<a name="data-tiering-pricing"></a>

與 R6g 節點 (僅記憶體) 相比，R6gd 節點的總容量 (記憶體 \+ SSD) 多出 4.8 倍，而且在以最大使用率執行時，可協助您節省 60% 以上的成本。如需詳細資訊，請參閱 [Amazon ElastiCache 定價](https://aws.amazon.com/elasticache/pricing/)。

## 監控
<a name="data-tiering-monitoring"></a>

ElastiCache 提供專門設計來監控使用資料分層之效能叢集的指標。若要監控 DRAM 中項目相較於 SSD 的比率，您可以在 [Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)中使用 `CurrItems` 指標。您可以按照以下方式計算百分比：*(有維度的 CurrItems：分層 = 記憶體 \* 100) / (沒有維度篩選條件的 CurrItems)*。

 如果設定的移出政策允許，則 ElastiCache 會在剩餘可用記憶體 (DRAM) 不到 5% 時開始移出項目。在設定了移出政策的節點上，寫入操作將收到記憶體不足錯誤。

 當剩餘可用記憶體 (DRAM) 的不到 5% 時，仍建議您考慮向外擴展啟用叢集模式的叢集，或向外擴展停用叢集模式的叢集。如需擴展的詳細資訊，請參閱[擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)。如需使用資料分層之 Valkey 或 Redis OSS 叢集指標的詳細資訊，請參閱 [Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)。

## 使用資料分層
<a name="data-tiering-enabling"></a>

### 使用 使用資料分層 AWS 管理主控台
<a name="data-tiering-enabling-console"></a>

在建立叢集做為複寫群組的一部分時，可以從 r6gd 系列中選取節點類型來使用資料分層，例如*cache.r6gd.xlarge*。選取該節點類型會自動啟用資料分層。

如需有關建立叢集的詳細資訊，請參閱 [為 Valkey 或 Redis OSS 建立叢集](Clusters.Create.md)。

### 使用 啟用資料分層 AWS CLI
<a name="data-tiering-enabling-cli"></a>

使用 建立複寫群組時 AWS CLI，您可以從 r6gd 系列選取節點類型，例如 *cache.r6gd.xlarge，*並設定 `--data-tiering-enabled` 參數，以使用資料分層。

從 r6gd 系列中選取節點類型時，無法選擇退出資料分層。如果您設定 `--no-data-tiering-enabled` 參數，操作將會失敗。

針對 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
   --replication-group-id redis-dt-cluster \
   --replication-group-description "Redis OSS cluster with data tiering" \
   --num-node-groups 1 \
   --replicas-per-node-group 1 \
   --cache-node-type cache.r6gd.xlarge \
   --engine redis \   
   --cache-subnet-group-name default \
   --automatic-failover-enabled \
   --data-tiering-enabled
```

針對 Windows：

```
aws elasticache create-replication-group ^
   --replication-group-id redis-dt-cluster ^
   --replication-group-description "Redis OSS cluster with data tiering" ^
   --num-node-groups 1 ^
   --replicas-per-node-group 1 ^
   --cache-node-type cache.r6gd.xlarge ^
   --engine redis ^   
   --cache-subnet-group-name default ^
   --automatic-failover-enabled ^
   --data-tiering-enabled
```

執行此操作之後，將會看到類似如下的回應：

```
{
    "ReplicationGroup": {
        "ReplicationGroupId": "redis-dt-cluster",
        "Description": "Redis OSS cluster with data tiering",
        "Status": "creating",           
        "PendingModifiedValues": {},
        "MemberClusters": [
            "redis-dt-cluster"
        ],
        "AutomaticFailover": "enabled",
        "DataTiering": "enabled",
        "SnapshotRetentionLimit": 0,
        "SnapshotWindow": "06:00-07:00",
        "ClusterEnabled": false,
        "CacheNodeType": "cache.r6gd.xlarge",       
        "TransitEncryptionEnabled": false,
        "AtRestEncryptionEnabled": false
    }
}
```

## 在資料分層啟用的情況下，將資料從備份還原到叢集
<a name="data-tiering-enabling-snapshots"></a>

在資料分層啟用的情況下，可以使用 (主控台)、(AWS CLI) 或 (ElastiCache API) 將備份還原到新的叢集。當使用 r6gd 系列中的節點類型建立叢集時，會啟用資料分層。

### 在資料分層啟用的情況下，將資料從備份還原到叢集 (主控台)
<a name="data-tiering-enabling-snapshots-console"></a>

**在資料分層啟用的情況下，將備份還原到新叢集 (主控台)**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 從導覽窗格，選擇 **Backups (備份)**。

1. 在備份清單中，選擇您要從中還原之備份名稱左側的方塊。

1. 選擇 **Restore** (還原)。

1. 完成 **Restore Cluster (還原叢集)** 對話方塊。務必完成所有**必填**欄位，以及您想要變更預設值的任何其他欄位。

   1. **Cluster ID (叢集 ID** - 必要。新叢集的名稱。

   1. **啟用叢集模式 （向外擴展）** – 針對 Valkey 或 Redis OSS （啟用叢集模式） 叢集選擇此選項。

   1. **節點類型** – 指定 **cache.r6gd.xlarge** 或任何其他 r6gd 系列中的節點類型。

   1. **Number of Shards (碎片數)** - 選擇您要讓新叢集具備的碎片 (API/CLI：節點群組) 數。

   1. **Replicas per Shard (每個碎片的複本數)** - 選擇您要讓每個碎片具備的僅供讀取複本節點數。

   1. **Slots and keyspaces (位置和 Keyspace)** - 選擇您要如何將索引鍵分佈到不同的碎片中。如果您選擇指定金鑰分佈，請指定每個碎片的金鑰範圍，以完成資料表。

   1. **Availability zone(s) (可用區域)** - 指定您要如何選取叢集的可用區域。

   1. **Port (連接埠)** - 只有在您希望新叢集使用不同的連接埠時，才變更此選項。

   1. **Choose a VPC (選擇 VPC)** - 選擇要在其中建立此叢集的 VPC。

   1. **參數群組** – 選擇參數群組，為您選取的節點類型保留足夠的記憶體供 Valkey 或 Redis OSS 額外負荷使用。

1. 當您滿意設定後，請選擇 **Create (建立)**。

如需有關建立叢集的詳細資訊，請參閱 [為 Valkey 或 Redis OSS 建立叢集](Clusters.Create.md)。

### 在資料分層啟用的情況下，將資料從備份還原到叢集 (AWS CLI)
<a name="data-tiering-enabling-snapshots-cli"></a>

使用 建立複寫群組時 AWS CLI，預設會使用資料分層，方法是從 r6gd 系列選取節點類型，例如 *cache.r6gd.xlarge* 和設定 `--data-tiering-enabled` 參數。

從 r6gd 系列中選取節點類型時，無法選擇退出資料分層。如果您設定 `--no-data-tiering-enabled` 參數，操作將會失敗。

針對 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
   --replication-group-id redis-dt-cluster \
   --replication-group-description "Redis OSS cluster with data tiering" \
   --num-node-groups 1 \
   --replicas-per-node-group 1 \
   --cache-node-type cache.r6gd.xlarge \
   --engine redis \   
   --cache-subnet-group-name default \
   --automatic-failover-enabled \
   --data-tiering-enabled \
   --snapshot-name {{my-snapshot}}
```

針對 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group ^
   --replication-group-id redis-dt-cluster ^
   --replication-group-description "Redis OSS cluster with data tiering" ^
   --num-node-groups 1 ^
   --replicas-per-node-group 1 ^
   --cache-node-type cache.r6gd.xlarge ^
   --engine redis ^   
   --cache-subnet-group-name default ^
   --automatic-failover-enabled ^
   --data-tiering-enabled ^
   --snapshot-name {{my-snapshot}}
```

執行此操作之後，將會看到類似如下的回應：

```
{
    "ReplicationGroup": {
        "ReplicationGroupId": "redis-dt-cluster",
        "Description": "Redis OSS cluster with data tiering",
        "Status": "creating",           
        "PendingModifiedValues": {},
        "MemberClusters": [
            "redis-dt-cluster"
        ],
        "AutomaticFailover": "enabled",
        "DataTiering": "enabled",
        "SnapshotRetentionLimit": 0,
        "SnapshotWindow": "06:00-07:00",
        "ClusterEnabled": false,
        "CacheNodeType": "cache.r6gd.xlarge",        
        "TransitEncryptionEnabled": false,
        "AtRestEncryptionEnabled": false
    }
}
```