管理 Valkey 和 Redis 的預留記憶體 OSS - Amazon ElastiCache

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

管理 Valkey 和 Redis 的預留記憶體 OSS

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

您需要多少預留記憶體?

如果您在 2.8.22 OSS之前執行 Redis 版本,則保留比執行 Redis 2.8.22 OSS 或更新版本更多的備份和容錯移轉記憶體。此要求是由於 ElastiCache (Redis OSS) 實作備份程序的不同方式所致。經驗法則是為 2.8.22 之前的版本保留節點類型maxmemory值的一半OSS,為 Redis 2.8.22版及更新OSS版本保留四分之一。

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

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

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

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

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

截至 2017 年 3 月 16 日,Amazon ElastiCache 提供兩個互斥參數來管理您的 Valkey 或 Redis OSS記憶體,reserved-memory以及 reserved-memory-percent。這些參數都不是 Valkey 或 Redis OSS分佈的一部分。

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

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

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

讀取兩個 Valkey 或 Redis OSS記憶體管理參數後,您可能偏好使用非預設或非預設值的參數。若是如此,您可以變更為另一個預留記憶體管理參數。

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

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

reserved-memory 參數

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

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

參數reserved-memory為特定 ElastiCache參數,且不屬於一般 Redis OSS分佈。

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

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

    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. 計算要保留給 Valkey 或 Redis OSS額外負荷的記憶體位元組數。您可以在 Redis OSS節點類型特定參數中,找到您節點類型的 maxmemory 值。

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

    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

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

參數reserved-memory-percent為特定參數,且 ElastiCache 不屬於一般 Redis OSS分佈。

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

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

若要使用 reserved-memory-percent 來管理 ElastiCache (Redis OSS) 叢集上的記憶體,請執行下列其中一項操作:

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

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

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

    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%)。如需詳細資訊,請參閱修改 ElastiCache 參數群組

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

    下列CLI範例會修改 Redis OSS叢集my-redis-cluster,以立即redis28-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-grp,以立即redis28-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 不會同時存在。每個參數群組一律只有一個參數,但絕不能兩者都有。您可以透過修改參數群組,來變更參數群組用於預留記憶體管理的參數。此參數群組必須是自訂參數群組,因為您無法修改預設參數群組。如需詳細資訊,請參閱建立 ElastiCache 參數群組

若要指定 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 參數進行預留記憶體管理。如需詳細資訊,請參閱修改 ElastiCache 參數群組

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。如需詳細資訊,請參閱修改 ElastiCache 參數群組

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