中的資料分層 ElastiCache - Amazon ElastiCache

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

中的資料分層 ElastiCache

ElastiCache 包含複寫群組並使用 r6gd 系列中節點類型的 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)。資料分層與 中支援的所有 Valkey 或 Redis OSS命令和資料結構相容 ElastiCache。不需要任何用戶端變更就能使用此功能。

最佳實務

建議遵循下列最佳實務:

  • 資料分層非常適合定期存取其整體資料集高達 20% 的工作負載,以及可在存取 上的資料時容忍額外延遲的應用程式SSD。

  • 在資料分層節點上使用可用SSD容量時,我們建議值大小大於金鑰大小。當項目在 DRAM和 之間移動時SSD,金鑰一律會保留在記憶體中,而且只有值會移至 SSD 層。

限制

資料分層具有下列限制:

  • 只能在屬於複寫群組一部分的叢集上使用資料分層。

  • 使用的節點類型必須來自 r6gd 系列,該系列在下列區域可用:us-east-2us-east-1us-west-2us-west-1eu-west-1eu-central-1eu-north-1eu-west-3ap-northeast-1ap-southeast-1ap-southeast-2ap-south-1ca-central-1sa-east-1

  • 您必須使用 Valkey 7.2 或更新版本的引擎,或 Redis 6.2 OSS 或更新版本的引擎。

  • 無法將 r6gd 叢集的備份還原到另一個叢集,除非該叢集也使用 r6gd。

  • 無法將備份匯出到 Amazon S3 以用於資料分層叢集。 

  • 在 r6gd 節點類型上執行的叢集不支援線上遷移。

  • 不支援從資料分層叢集 (例如,使用 r6gd 節點類型的叢集) 擴展到未使用資料分層的叢集 (例如,使用 r6g 節點類型的叢集)。如需詳細資訊,請參閱擴展 ElastiCache

  • 針對 Valkey 7.2 版及更新版本,以及 Redis 7.0.7 版及更新OSS版本,使用資料分層的叢集支援自動擴展。如需詳細資訊,請參閱 Auto Scaling Valkey 和 Redis OSS叢集

  • 資料分層僅支援 volatile-lruallkeys-lruvolatile-lfuallkeys-lfunoeviction 最大記憶體政策。

  • Valkey 7.2 版和更新版本以及 Redis 7.0.7 版和更新OSS版本支援無痕儲存。如需詳細資訊,請參閱同步與備份的實作方式

  • 大於 128 MiB 的項目不會移至 SSD。

定價

R6gd 節點的總容量是 R6g 節點 (記憶體 + SSD) 的 4.8 倍,相較於 R6g 節點 (僅限記憶體),可協助您在以最大使用率執行時節省超過 60%。如需詳細資訊,請參閱ElastiCache 定價

監控

ElastiCache 提供專為監控使用資料分層之效能叢集而設計的指標。若要監控 中項目DRAM相較於 的比率SSD,您可以使用 Valkey 和 Redis CurrItems 的指標。 OSS您可以計算百分比為: (CurrItems 使用維度: Tier = Memory * 100) / (CurrItems 沒有維度篩選條件)

如果設定的清除政策允許,則當記憶體中的項目百分比低於 5% 時, ElastiCache 將開始清除項目。在設定了省略政策的節點上,寫入操作將收到記憶體不足錯誤。

當記憶體中的項目百分比低於 5% 時,仍建議您考慮擴展叢集模式啟用叢集或擴展叢集模式停用叢集。如需擴展的詳細資訊,請參閱 在 Valkey 或 Redis 中擴展叢集 OSS(已啟用叢集模式)。如需使用資料分層之 Valkey 或 Redis OSS叢集指標的詳細資訊,請參閱 Valkey 和 Redis 的指標 OSS

使用資料分層

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

如需有關建立叢集的詳細資訊,請參閱 為 Valkey 或 Redis 建立叢集 OSS

使用 建立複寫群組時 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 } }

在資料分層啟用的情況下,將資料從備份還原到叢集

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

在資料分層啟用的情況下,將備份還原到新叢集 (主控台)
  1. 登入 AWS Management Console 並在 https://console.aws.amazon.com/elasticache/開啟 ElastiCache 主控台。

  2. 從導覽窗格,選擇 Backups (備份)

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

  4. 選擇 Restore (還原)。

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

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

    2. 啟用叢集模式 (橫向擴展) – 為 Valkey 或 Redis OSS(啟用叢集模式) 叢集選擇此選項。

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

    4. 碎片數量 – 選擇您希望在新叢集 (API/CLI: 節點群組) 中的碎片數量。

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

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

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

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

    9. 選擇 VPC- 選擇要在VPC其中建立此叢集的 。

    10. 參數群組 – 選擇參數群組,為您選取的節點類型保留足夠的記憶體,以用於 Valkey 或 Redis OSS額外負荷。

  6. 當您滿意設定後,請選擇 Create (建立)

如需有關建立叢集的詳細資訊,請參閱 為 Valkey 或 Redis 建立叢集 OSS

使用 建立複寫群組時 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 } }