

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

# Auto Scaling Valkey 和 Redis OSS 叢集
<a name="AutoScaling"></a>

## 先決條件
<a name="AutoScaling-Prerequisites"></a>

ElastiCache Auto Scaling 僅限於下列項目：
+ 執行 Valkey 7.2 以上版本或執行 Redis OSS 6.0 以上版本的 Valkey 或 Redis OSS （啟用叢集模式） 叢集
+ 執行 Valkey 7.2 以上版本或執行 Redis OSS 7.0.7 以上版本的資料分層 （啟用叢集模式） 叢集 
+ 執行個體大小 - Large、XLarge、2XLarge
+ 執行個體類型系列 - R7g、R6g、R6gd、R5、M7g、M6g、M5、C7gn
+ 全域資料存放區、Outpost 或本機區域中執行的叢集不支援 ElastiCache 中的 Auto Scaling。

## 使用 ElastiCache Auto Scaling 搭配 Valkey 或 Redis OSS 自動管理容量
<a name="AutoScaling-Managing"></a>

使用 Valkey 或 Redis OSS 進行 ElastiCache 自動擴展是自動增加或減少 ElastiCache 服務中所需碎片或複本的能力。ElastiCache 利用 Application Auto Scaling 服務來提供此功能。如需詳細資訊，請參閱 [Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html)。若要使用自動調整規模功能，您可以定義和套用規模調整政策，這類政策會使用 CloudWatch 指標和您指派的目標值。ElastiCache 自動擴展使用 政策來增加或減少執行個體數量，以回應實際工作負載。

您可以使用 根據預先定義的指標AWS 管理主控台來套用擴展政策。`predefined metric` 是在列舉中定義，如此您就可以在程式碼中依名稱指定指標，或是在AWS 管理主控台中使用指標。使用AWS 管理主控台時無法選擇自訂指標。或者，您可以使用AWS CLI或 Application Auto Scaling API，根據預先定義的或自訂指標來套用擴展政策。

ElastiCache for Valkey 和 Redis OSS 支援下列維度的擴展：
+ **碎片** - 自動新增/移除叢集中的碎片，類似於手動線上重新分片。在此情況下，ElastiCache 自動擴展會代表您觸發擴展。
+ **複本** - 自動新增/移除叢集中的複本，類似於手動增加/減少複本作業。適用於 Valkey 和 Redis OSS 的 ElastiCache 自動擴展會在叢集中的所有碎片中均勻地新增/移除複本。

ElastiCache for Valkey 和 Redis OSS 支援下列類型的自動擴展政策：
+ [目標追蹤擴展政策](AutoScaling-Scaling-Policies-Target.md) - 根據特定指標的目標值，增加或減少服務執行的碎片/複本數。這與您運用電熱器維持家中溫度的方式很類似。您只需選取溫度，電熱器會自行執行其餘操作。
+ [ 應用程式的排程擴展。 ](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html)– ElastiCache for Valkey 和 Redis OSS 自動擴展可增加或減少服務根據日期和時間執行的碎片/複本數量。

![\[ElastiCache for Valkey 和 Redis OSS 的自動擴展影像\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/Auto-scaling.png)


下列步驟摘要說明 ElastiCache for Valkey 和 Redis OSS 自動擴展程序，如上圖所示：

1. 您可以為複寫群組建立 ElastiCache 自動擴展政策。

1. ElastiCache 自動擴展會代表您建立一對 CloudWatch 警示。每對指標皆代表指標的上限與下限。當叢集的實際使用率持續一段時間偏離您的目標使用率時，就會觸發這些 CloudWatch 警示。您可以在主控台中檢視警示。

1. 如果設定的指標值在特定時間長度內超過您的目標使用率 （或低於目標），CloudWatch 會觸發警示，叫用自動擴展來評估您的擴展政策。

1. ElastiCache 自動擴展會發出修改請求來調整叢集容量。

1. ElastiCache 會處理修改請求，動態增加 （或減少） 叢集碎片/複本容量，使其接近您的目標使用率。

 若要了解 ElastiCache Auto Scaling 的運作方式，假設您有名為 的叢集`UsersCluster`。針對 `UsersCluster` 監控 CloudWatch 指標，可判斷叢集在流量達到峰值時需要的最大碎片數，以及流量達到最低點時叢集需要的最小碎片數。您也可以為 `UsersCluster` 叢集決定 CPU 使用率的目標值。ElastiCache Auto Scaling 使用其目標追蹤演算法，以確保 的佈建碎片`UsersCluster`會視需要調整，讓使用率保持在或接近目標值。

**注意**  
規模調整程序可能需要大量時間，且需要額外的叢集資源用於重新平衡碎片。ElastiCache Auto Scaling 只有在實際工作負載持續幾分鐘保持升高 （或降低） 時，才會修改資源設定。自動擴展目標追蹤演算法會長期嘗試將目標使用率保持在或接近您選擇的值。

## Auto Scaling 所需的 IAM 許可
<a name="AutoScaling-IAM-permissions"></a>

ElastiCache for Valkey 和 Redis OSS Auto Scaling 可透過結合 ElastiCache、CloudWatch 和 Application Auto Scaling APIs 來實現。使用 ElastiCache 建立和更新叢集、使用 CloudWatch 建立警示，以及使用 Application Auto Scaling 建立擴展政策。除了建立和更新叢集的標準 IAM 許可之外，存取 ElastiCache Auto Scaling 設定的 IAM 使用者必須具有支援動態擴展之服務的適當許可。在此最新的政策中，我們新增了對 Memcached 垂直擴展的支援，以及 動作 `elasticache:ModifyCacheCluster`。IAM 使用者必須具備使用以下範例政策中各項動作的許可：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:*",
                "elasticache:DescribeReplicationGroups",
                "elasticache:ModifyReplicationGroupShardConfiguration",
                "elasticache:IncreaseReplicaCount",
                "elasticache:DecreaseReplicaCount",
                "elasticache:DescribeCacheClusters",
                "elasticache:DescribeCacheParameters",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DisableAlarmActions",
                "cloudwatch:EnableAlarmActions",
                "iam:CreateServiceLinkedRole",
                "sns:CreateTopic",
                "sns:Subscribe",
                "sns:Get*",
                "sns:List*"
            ],
            "Resource": "arn:aws:iam::123456789012:role/autoscaling-roles-for-cluster"
        }
    ]
}
```

------

## 服務連結角色
<a name="AutoScaling-SLR"></a>

ElastiCache for Valkey 和 Redis OSS 自動擴展服務也需要描述叢集和 CloudWatch 警示的許可，以及代表您修改 ElastiCache 目標容量的許可。如果您為叢集啟用 Auto Scaling，它會建立名為 的服務連結角色`AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG`。此服務連結角色會授予 ElastiCache 自動擴展許可，以描述政策的警示、監控機群目前的容量，以及修改機群的容量。服務連結角色是 ElastiCache 自動擴展的預設角色。如需詳細資訊，請參閱《Application Auto Scaling 使用者指南》中的 [ ElastiCache for Redis OSS 自動擴展的服務連結角色](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

## Auto Scaling 最佳實務
<a name="AutoScaling-best-practices"></a>

註冊 Auto Scaling 前，我們建議以下事項：

1. **只使用一個追蹤指標** – 識別您的叢集是否有 CPU 或資料密集型工作負載，並使用對應的預先定義指標來定義規模調整政策。
   + 引擎 CPU：`ElastiCachePrimaryEngineCPUUtilization` (碎片維度) 或 `ElastiCacheReplicaEngineCPUUtilization` (複本維度)
   + 資料庫使用量：`ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage` 此擴展政策在叢集上將 maxmemory-policy 設為 noeviction 時效果最佳。

   建議您避免在叢集上的每個維度使用多個政策。如果任何目標追蹤政策已準備好向外擴展，ElastiCache for Valkey 和 Redis OSS Auto 擴展將向外擴展可擴展目標，但只有在所有目標追蹤政策 （啟用向內擴展部分） 都準備好向內擴展時，才會向內擴展。如果多個政策指示可擴展的目標在同一時間進行水平擴展或縮減，則會根據針對水平擴展和縮減提供最大容量的政策進行擴展。

1. **用於目標追蹤的自訂指標** – 使用自訂指標進行目標追蹤時需小心謹慎，因為 Auto Scaling 最適合用於根據為策略所選指標的根據為策略所選指標的變更，依比例擴展/縮減規模。如果這些指標未與用於政策建立的擴展操作比例地變化，則可能會導致持續的橫向擴展或縮減操作，這可能會影響可用性或成本。

    對於資料分層叢集 (r6gd 系列執行個體類型)，請避免使用記憶體指標進行擴展。

1. **排程規模調整** - 如果您發現工作負載具確定性 (會在特定時間達到高/低負載)，建議您使用排程規模調整功能，根據需求設定目標容量。目標追蹤可在需要更多資源時橫向擴展，並在需要較少資源時縮減，最適合用於讓非確定性工作負載和叢集以所需的目標指標運作。

1. **停用縮減** - 針對目標追蹤自動調整規模的功能最適合用於工作負載逐漸增加/減少的叢集，因為指標的峰值/低谷可能會觸發連續的橫向擴展/縮減振盪。若要避免這種振盪，可以從停用縮減功能開始，您之後可以隨時根據需求手動縮減。

1. **測試您的應用程式** - 建議您使用預估的最小/最大工作負載來測試應用程式，以確定叢集所需的絕對碎片/複本數下限與上限，同時建立規模調整政策以避免可用性問題。自動調整規模可以橫向擴展至為目標設定的最大值，也可縮減至最小值。

1. **定義目標值** - 您可以針對四週期間的叢集使用率分析對應 CloudWatch 指標，以判斷目標閾值。如果您仍不確定要選擇哪個值，建議從支援的最小預先定義指標值開始。

1. 針對目標追蹤的自動調整規模功能最適合用於在碎片/複本維度間均勻分配工作負載的叢集。不均勻分配可能會導致：
   + 由於幾個熱碎片/複本上出現工作負載峰值/低谷，因此在沒有需要時進行擴展。
   + 即使具有熱碎片/複本，但由於整體平均接近目標，因此有需要時不進行縮放。

**注意**  
橫向擴展叢集時，ElastiCache 會自動將載入其中一個現有節點 (隨機選取) 的函數複製到新節點。如果您的叢集具有 Valkey 或 Redis OSS 7.0 或更新版本，且您的應用程式使用 [函數](https://valkey.io/topics/functions-intro/)，建議您將所有函數載入所有碎片，然後再向外擴展，讓您的叢集不會在不同的碎片上最終產生不同的函數。

註冊 Auto Scaling 後，請注意以下事項：
+ 支援自動調整規模的組態具有限制，因此建議您不要變更已針對自動調整規模註冊之複寫群組的組態。範例如下：
  + 手動將執行個體類型修改為不支援的類型。
  + 為複寫群組與全域資料存放區建立關聯。
  + 變更 `ReservedMemoryPercent` 參數。
  + 手動將碎片/複本增加/減少至超出政策建立期間設定的容量上限/下限。