本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
管理預留記憶體
預留記憶體是為非資料使用預留的記憶體。執行備份或容錯移轉時,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 來保留記憶體
-
建立自訂參數群組,指定與您所執行引擎版本相符的參數群組系列,例如指定
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-familyredis6.x
-
計算要為 Redis 額外負荷保留的記憶體位元組數。您可以在 Redis 節點類型專用參數中,找到您節點類型的
maxmemory
值。 -
修改自訂參數群組,將參數
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
值。 -
修改您的 Redis 叢集或複寫群組,以使用您的自訂參數群組。
下列 CLI 範例會修改叢集
my-redis-cluster
,以立即開始使用自訂參數群組redis28-m3xl
。如需詳細資訊,請參閱 修改 ElastiCache 叢集。aws elasticache modify-cache-cluster \ --cache-cluster-id
my-redis-cluster
\ --cache-parameter-group-nameredis28-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-nameredis28-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
-
建立自訂參數群組,指定與您所執行引擎版本相符的參數群組系列,例如指定
redis2.8
參數群組系列。必須有一個自訂參數群組,因為您無法修改預設參數群組。如需詳細資訊,請參閱 建立參數群組。aws elasticache create-cache-parameter-group \ --cache-parameter-group-name
redis28-50
\ --description "Redis 2.8.x 50% reserved
" \ --cache-parameter-group-familyredis2.8
由於
reserved-memory-percent
是以節點maxmemory
的百分比為單位來預留記憶體,因此您不需要每個節點類型都有一個自訂參數群組。 -
修改自訂參數群組,將
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
" -
針對執行 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-nameredis28-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-nameredis28-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-memory
和 reserved-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
"