管理預留記憶體 - Amazon ElastiCache (雷迪斯 OSS)

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

管理預留記憶體

預留記憶體是為非資料使用預留的記憶體。執行備份或容錯移轉時,Redis OSS 會使用可用的記憶體,將叢集的資料寫入 .rdb 檔案時,將寫入作業記錄到叢集。如果您沒有足夠的記憶體可供所有寫入使用,此程序會失敗。接下來,您可以找到管理 Redis OSS 之保留記憶體 ElastiCache 的選項以及如何套用這些選項的資訊。

您需要多少預留記憶體?

如果您在 2.8.22 之前執行 Redis OSS 版本,請保留比執行 Redis OSS 2.8.22 或更新版本更多的記憶體以供備份和容錯移轉使用。這項要求是因 ElastiCache 為 Redis OSS 實作備份程序的方式不同。經驗法則是為 2.8.22 之前的版本保留 Redis OSS 開銷的節點類型maxmemory值的一半,而 Redis OSS 版本 2.8.22 及更新版本則為四分之一。

由於 ElastiCache 實作備份和複寫程序的方式不同,經驗法則是使用reserved-memory-percent參數保留節點類型maxmemory值的 25%。這是預設值,建議在大多數情況下使用。

當高載微型和小型執行個體類型在接近maxmemory限制的範圍內運作時,可能會遇到交換使用情況。為了在備份、複寫和高流量期間提高這些執行個體類型的操作可靠性,建議在小型執行個體類型上將reserved-memory-percent參數值提高到 30%,微型執行個體類型最多增加 50%。

對於具有資料分層的 ElastiCache 叢集上需要大量寫入的工作負載,我們建議reserved-memory-percent將節點的可用記憶體最多增加 50%。

如需詳細資訊,請參閱下列內容:

用於管理預留記憶體的參數

自 2017 年 3 月 16 日起,Amazon ElastiCache (Redis OSS) 提供兩個互斥的參數來管理 Redis OSS 記憶體,以及。reserved-memory reserved-memory-percent這些參數都不是 Redis OSS 發行版的一部分。

視您成為 ElastiCache 客戶的時間而定,其中一個或其他參數是預設的記憶體管理參數。當您建立新的 Redis OSS 叢集或複寫群組並使用預設參數群組時,會套用此參數。

  • 對於 2017 年 3 月 16 日之前開始使用的客戶 — 當您使用預設參數群組建立 Redis OSS 叢集或複寫群組時,記憶體管理參數為。reserved-memory這個情況下會保留零 (0) 位元組的記憶體。

  • 對於 2017 年 3 月 16 日或之後開始使用的客戶 — 當您使用預設參數群組建立 Redis OSS 叢集或複寫群組時,記憶體管理參數為。reserved-memory-percent在這種情況下,會保留節點 maxmemory 值的 25% 用於非資料目的。

在閱讀了兩個 Redis OSS 記憶體管理參數之後,您可能更喜歡使用不是預設值或非預設值的參數。若是如此,您可以變更為另一個預留記憶體管理參數。

若要變更該參數的值,您可以建立自訂參數群組並進行修改,以使用您偏好的記憶體管理參數和值。然後,每當您建立新 Redis OSS 叢集或複寫群組時,都可以使用自訂參數群組。若是現有的叢集或複寫群組,您可以進行修改來使用您的自訂參數群組。

如需詳細資訊,請參閱下列內容:

reserved-memory 參數

在 2017 年 3 月 16 日之前,所有 Redis ElastiCache 的 OSS 保留記憶體管理都是使用參數完成的。reserved-memoryreserved-memory 的預設值為 0。此預設值不會保留 Redis OSS 額外負荷的記憶體,並允許 Redis OSS 使用節點的所有記憶體與資料。

您必須建立自訂參數群組,才能變更 reserved-memory,以便有足夠的記憶體可供備份和容錯移轉使用。在此自訂參數群組中,您reserved-memory將設定為適合叢集和叢集節點類型上執行之 Redis OSS 版本的值。如需更多資訊,請參閱您需要多少預留記憶體?

ElastiCache 適用於 Redis 的 OSS 參數reserved-memory是 ElastiCache針對 Redis 的 OSS 特定的,而不是 Redis OSS 發行版的一部分。

下列程序顯示如何使用reserved-memory來管理 Redis OSS 叢集上的記憶體。

使用 reserved-memory 來保留記憶體
  1. 建立自訂參數群組,指定與您所執行引擎版本相符的參數群組系列,例如指定redis2.8 參數群組系列。如需詳細資訊,請參閱 建立參數群組

    aws elasticache create-cache-parameter-group \ --cache-parameter-group-name redis6x-m3xl \ --description "Redis OSS 2.8.x for m3.xlarge node type" \ --cache-parameter-group-family redis6.x
  2. 計算要保留多少位元組的記憶體以供 Redis OSS 額外負荷使用。您可以在 Redis 的 OSS 節點類型的特定參數中,找到您節點類型的 maxmemory 值。

  3. 修改自訂參數群組,將參數 reserved-memory 設為您在上一個步驟中計算得到的位元組數。下列 AWS CLI 範例假設您執行的是 2.8.22 之前的 Redis OSS 版本,且需要保留一半的節點。maxmemory如需詳細資訊,請參閱 修改參數群組

    aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis28-m3xl \ --parameter-name-values "ParameterName=reserved-memory, ParameterValue=7130316800"

    您所使用的每個節點類型都需要個別的自訂參數群組,因為每個節點類型都有不同的 maxmemory 值。因此,每個節點類型都需要不同的 reserved-memory 值。

  4. 修改 Redis OSS 叢集或複寫群組以使用您的自訂參數群組。

    下列 CLI 範例會修改叢集 my-redis-cluster,以立即開始使用自訂參數群組 redis28-m3xl。如需詳細資訊,請參閱 修改 ElastiCache 叢集

    aws elasticache modify-cache-cluster \ --cache-cluster-id my-redis-cluster \ --cache-parameter-group-name redis28-m3xl \ --apply-immediately

    下列 CLI 範例會修改複寫群組 my-redis-repl-grp,以立即開始使用自訂參數群組 redis28-m3xl。如需更多詳細資訊,修改複寫群組

    aws elasticache modify-replication-group \ --replication-group-id my-redis-repl-grp \ --cache-parameter-group-name redis28-m3xl \ --apply-immediately

該 reserved-memory-percent 參數

2017 年 3 月 16 日,Amazon ElastiCache 推出了該參數,reserved-memory-percent並使其可用於所有版本的 ElastiCache (Redis OSS)。reserved-memory-percent 旨在簡化您所有叢集上的預留記憶體管理工作。其做法是讓您針對每個參數群組系列 (例如 redis2.8),各使用一個參數群組來管理叢集的預留記憶體,而不論節點類型為何。reserved-memory-percent 的預設值為 25 (25%)。

ElastiCache 適用於 Redis 的 OSS 參數reserved-memory-percent是特定於 ElastiCache (Redis 的 OSS),並且不是 Redis 的 OSS 發行版的一部分。

如果您的叢集使用 r6gd 系列的節點類型,且您的記憶體使用量達到 75%,則會自動觸發資料分層。如需詳細資訊,請參閱 資料分層

若要使用保留記憶體 reserved-memory-percent

若要用reserved-memory-percent來管理適用 ElastiCache 於 Redis OSS 叢集的記憶體,請執行下列其中一個動作:

  • 如果您正在執行 Redis OSS 2.8.22 或更新版本,請將預設參數群組指派給叢集。預設值 25% 應當足夠。如果為較舊的版本,請依照以下說明的步驟變更該值。

  • 如果您在 2.8.22 之前執行 Redis OSS 版本,您可能需要保留比reserved-memory-percent預設值 25% 更多的記憶體。若要完成此操作,請遵循下列程序:

若要變更百分比值 reserved-memory-percent
  1. 建立自訂參數群組,指定與您所執行引擎版本相符的參數群組系列,例如指定redis2.8 參數群組系列。必須有一個自訂參數群組,因為您無法修改預設參數群組。如需詳細資訊,請參閱 建立參數群組

    aws elasticache create-cache-parameter-group \ --cache-parameter-group-name redis28-50 \ --description "Redis OSS 2.8.x 50% reserved" \ --cache-parameter-group-family redis2.8

    由於 reserved-memory-percent 是以節點 maxmemory 的百分比為單位來預留記憶體,因此您不需要每個節點類型都有一個自訂參數群組。

  2. 修改自訂參數群組,將 reserved-memory-percent 設為 50 (50%)。如需詳細資訊,請參閱 修改參數群組

    aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis28-50 \ --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue=50"
  3. 針對執行 Redis OSS 版本早於 2.8.22 的任何 Redis OSS 叢集或複寫群組使用此自訂參數群組。

    下列 CLI 範例會修改 Redis OSS 叢集,使其立my-redis-clusterredis28-50開始使用自訂參數群組。如需詳細資訊,請參閱 修改 ElastiCache 叢集

    aws elasticache modify-cache-cluster \ --cache-cluster-id my-redis-cluster \ --cache-parameter-group-name redis28-50 \ --apply-immediately

    下列 CLI 範例會修改 Redis OSS 複寫群組,使其立my-redis-repl-grpredis28-50開始使用自訂參數群組。如需詳細資訊,請參閱 修改複寫群組

    aws elasticache modify-replication-group \ --replication-group-id my-redis-repl-grp \ --cache-parameter-group-name redis28-50 \ --apply-immediately

指定您的預留記憶體管理參數

如果您是 2017 年 3 月 16 日的目前 ElastiCache 客戶,則預設保留記憶體管理參數為reserved-memory零 (0) 位元組的保留記憶體。如果您在 2017 年 3 月 16 日之後成為 ElastiCache 客戶,預設的保留記憶體管理參數會保留 25% 的節點記憶體。reserved-memory-percent無論您何時建立 ElastiCache (Redis OSS) 叢集或複寫群組,都是如此。不過,您可以使用 AWS CLI 或 ElastiCache API 變更保留的記憶體管理參數。

參數 reserved-memoryreserved-memory-percent 不會同時存在。每個參數群組一律只有一個參數,但絕不能兩者都有。您可以透過修改參數群組,來變更參數群組用於預留記憶體管理的參數。此參數群組必須是自訂參數群組,因為您無法修改預設參數群組。如需詳細資訊,請參閱 建立參數群組

若要指定 reserved-memory-percent

若要使用 reserved-memory-percent 做為您的預留記憶體管理參數,請使用 modify-cache-parameter-group 命令修改自訂參數群組。使用 parameter-name-values 參數來指定 reserved-memory-percent 和其值。

下列 CLI 範例會修改自訂參數群組 redis32-cluster-on,以使用 reserved-memory-percent 來管理預留記憶體。您必須指派一個值給 ParameterValue,參數群組才能使用 ParameterName 參數進行預留記憶體管理。如需詳細資訊,請參閱 修改參數群組

aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis32-cluster-on \ --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue=25"
指定 reserved-memory

若要使用 reserved-memory 做為您的預留記憶體管理參數,請使用 modify-cache-parameter-group 命令修改自訂參數群組。使用 parameter-name-values 參數來指定 reserved-memory 和其值。

下列 CLI 範例會修改自訂參數群組 redis32-m3xl,以使用 reserved-memory 來管理預留記憶體。您必須指派一個值給 ParameterValue,參數群組才能使用 ParameterName 參數進行預留記憶體管理。由於引擎版本是 2.8.22 以後的版本,因此我們會將值設為 3565158400,這是 cache.m3.xlarge 的 25% maxmemory。如需更多詳細資訊,請參閱 修改參數群組

aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis32-m3xl \ --parameter-name-values "ParameterName=reserved-memory, ParameterValue=3565158400"