管理預留記憶體 - Amazon ElastiCache 的雷迪斯

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

管理預留記憶體

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

您需要多少預留記憶體?

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

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

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

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

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

截至 2017 年 3 月 16 日,Amazon ElastiCache 適用於 Redis 提供兩個互斥的參數來管理 Redis 記憶體,reserved-memory以及。reserved-memory-percent這兩個參數都不屬於 Redis 發行版本。

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

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

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

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

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

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

reserved-memory 參數

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

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

對 ElastiCache 於 Redis 的參數reserved-memory是特定 ElastiCache於 Redis 的,並且不是 Redis 發行版的一部分。

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

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

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

  3. 修改自訂參數群組,將參數 reserved-memory 設為您在上一個步驟中計算得到的位元組數。下面的 AWS CLI 示例假設您正在運行 2.8.22 之前的 Redis 版本,並且需要保留節點的一半。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 叢集或複寫群組,以使用您的自訂參數群組。

    下列 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 的所有版本。reserved-memory-percent 旨在簡化您所有叢集上的預留記憶體管理工作。其做法是讓您針對每個參數群組系列 (例如 redis2.8),各使用一個參數群組來管理叢集的預留記憶體,而不論節點類型為何。reserved-memory-percent 的預設值為 25 (25%)。

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

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

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

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

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

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

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

    aws elasticache create-cache-parameter-group \ --cache-parameter-group-name redis28-50 \ --description "Redis 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. 針對執行 2.8.22 以前 Redis 版本的任何 Redis 叢集或複寫群組,使用此自訂參數群組。

    下列 CLI 範例會修改 Redis 叢集 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 複寫群組 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 for Redis 叢集或複寫群組,都是如此。不過,您可以使用 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"