本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
跨可用區域平衡 Amazon ECS 服務
從 2025 年 9 月 5 日開始,Amazon ECS 會針對符合此功能資格的所有服務啟用可用區域重新平衡。當可用區域分散是第一個任務置放策略,或沒有置放策略時,服務即符合資格。
為了協助您的應用程式達到高可用性,建議您將多任務服務設定為跨多個可用區域執行。對於將第一個置放策略指定為可用區域分散的服務, AWS 會盡最大努力跨可用區域平均分配服務任務。
不過,有時某個可用區域中執行的任務數量可能與其他可用區域中的任務不同,例如在可用區域中斷之後。若要解決此任務不平衡,您可以啟用可用區域重新平衡功能。
透過可用區域重新平衡,Amazon ECS 會持續監控每個服務在可用區域之間的任務分佈。當 Amazon ECS 偵測到不均勻的任務分佈時,會自動採取行動以重新平衡跨可用區域的工作負載。這包括在可用區域中啟動具有最少任務的新任務,以及終止過載可用區域中的任務。
此重新分佈可確保單一可用區域不會成為故障點,有助於維持容器化應用程式的整體可用性。自動化重新平衡程序不需要手動介入,可加速事件發生後的復原時間。
以下是可用區域重新平衡程序的概觀:
-
Amazon ECS 會在服務達到穩定狀態後開始監控服務,並查看每個可用區域中執行的任務數量。
-
Amazon ECS 偵測到每個可用區域中執行的任務數量不平衡時,會執行下列操作:
-
傳送服務事件,指出可用區域重新平衡正在啟動。
-
在可用區域中以最少數量的執行中任務啟動任務
-
以最大數量的執行中任務停止可用區域中的任務。
-
排程器會等待新啟動的任務變成
HEALTHY
,RUNNING
然後在過度擴展的可用區域中停止任務。 -
傳送具有可用區域重新平衡結果的服務事件。
-
Amazon ECS 如何偵測不均勻的任務分佈
Amazon ECS 會將服務所需的任務計數除以設定的可用區域數量,藉此判斷每個可用區域中執行的任務數量不平衡。如果所需的任務計數未平均分配,Amazon ECS 會將剩餘的任務平均分配到設定的可用區域。每個可用區域必須至少有一個任務。
例如,假設 Amazon ECS 服務所需計數為針對兩個可用區域設定的兩個任務。在此案例中,所需的任務計數會平均分配。平衡分佈為每個可用區域一個任務。如果可用區域 1 中有兩項任務,而可用區域 2 中有零項任務,Amazon ECS 會在可用區域 1 中停止任務之前,透過在可用區域 2 中啟動任務來啟動重新平衡。
現在,請考慮 Amazon ECS 服務,其所需計數為針對兩個可用區域設定的三個任務。在此案例中,所需的任務計數不會平均分割。平衡分佈會是可用區域 1 中的一個任務,以及可用區域 2 中的兩個任務,因為每個可用區域至少有一個任務,剩餘的任務會放置在可用區域 2 中。
請考慮 Amazon ECS 服務,其所需計數為針對三個可用區域設定的五個任務。在此案例中,所需的任務計數不會平均分割。平衡分佈是可用區域 1 中的一個任務,以及可用區域 2 和 3 中的兩個任務。在考慮每個可用區域各有一個任務之後,其餘兩個任務會平均分散到可用區域。
設定可用區域重新平衡的考量事項
當您想要設定可用區域重新平衡時,請考慮下列事項:
可用區域重新平衡支援 Fargate 和 EC2 啟動類型。對於 Fargate,Amazon ECS 會自動在可用可用區域中重新分配任務,以維持平衡。對於 EC2 啟動類型,Amazon ECS 會盡力重新平衡現有容器執行個體的任務,並遵循您定義的置放策略和限制條件。不過,Amazon ECS 無法在未充分利用的可用區域中啟動新的執行個體,做為重新平衡程序的一部分,將重新平衡限制在現有的容器執行個體。
-
可用區域重新平衡適用於下列組態:
-
使用
Replica
策略的服務 -
指定可用區域的服務會分散為第一個任務置放策略,或不指定置放策略。
-
-
您無法將可用區域重新平衡與符合下列任一條件的服務搭配使用:
-
使用
Daemon
策略 -
使用
EXTERNAL
啟動類型 (ECS Anywhere) -
使用 100% 的值
maximumPercent
-
使用 Classic Load Balancer
-
使用
attribute:ecs.availability-zone
做為任務置放限制條件
-
使用可用區域重新平衡的置放策略和置放限制
置放策略會決定 Amazon ECS 如何選取容器執行個體和可用區域來終止任務置放。任務置放限制是判斷任務是否允許在特定容器執行個體上執行的規則。
對於 EC2 啟動類型,您可以使用置放策略和置放限制,以及可用區域重新平衡。不過,為了讓可用區域重新平衡正常運作,可用區域分散置放策略必須是第一個指定的策略。
可用區域重新平衡與各種置放策略組合相容。例如,您可以建立先跨可用區域平均分配任務的策略,然後 bin 會根據每個可用區域內的記憶體來封裝任務。在此情況下,可用區域重新平衡會運作,因為會先指定可用區域分散策略。
請務必注意,如果置放策略陣列中的第一個策略不是可用區域分散元件,則可用區域重新平衡將無法運作。此要求可確保任務分佈的主要重點是維持跨可用區域的平衡,這對高可用性至關重要。
如需任務置放策略和限制條件的詳細資訊,請參閱 Amazon ECS 如何在容器執行個體上放置任務。
任務放置策略和限制條件不支援使用 Fargate 啟動類型的任務。Fargate 將盡力將任務分散至可存取的可用區域。如果容量提供者同時包含 Fargate 和 Fargate Spot,則每個容量提供者的分散行為均各自獨立。
下列範例策略會將任務平均分配到各個可用區域,然後 bin 會根據每個可用區域內的記憶體來封裝任務。可用區域重新平衡與 服務相容,因為spread
策略優先。
"placementStrategy": [ { "field": "attribute:ecs.availability-zone", "type": "spread" }, { "field": "memory", "type": "binpack" } ]
開啟可用區域重新平衡
您需要為新的和現有的服務啟用可用區域重新平衡。
您可以使用主控台 AWS CLI、APIs 和 來啟用和停用可用區域重新平衡 AWS CloudFormation。
的預設行為在建立和更新請求之間AvailabilityZoneRebalancing
有所不同:
-
對於建立服務請求,當沒有為 指定值時
AvailabilityZoneRebalancing
,Amazon ECS 會將該值預設為ENABLED
。 -
對於更新服務請求,如果未指定 的值
AvailabilityZoneRebalancing
,Amazon ECS 會預設為現有服務AvailabilityZoneRebalancing
的值。如果服務從未設定AvailabilityZoneRebalancing
值,Amazon ECS 會將此視為DISABLED
。
服務類型 | API | 主控台 | CLI |
---|---|---|---|
現有 | UpdateService | 更新 Amazon ECS 服務 | update-service |
新增 | CreateService | 建立 Amazon ECS 滾動更新部署 | create-service |
下列範例顯示如何在建立新服務時啟用服務重新平衡:
aws ecs create-service \ --cluster my-cluster \ --service-name my-service \ --task-definition my-task-definition:1 \ --desired-count 6 \ --availability-zone-rebalancing ENABLED
對服務重新平衡進行故障診斷
如果您在服務重新平衡時遇到問題,請考慮下列疑難排解步驟:
- 重新平衡不會啟動
-
請驗證:
-
您的服務已啟用服務重新平衡
-
您的服務使用支援的組態 (請參閱 設定可用區域重新平衡的考量事項)
-
您的服務已達到穩定狀態
-
- 重新平衡期間的任務置放失敗
-
如果您看到
SERVICE_TASK_PLACEMENT_FAILURE
事件:-
對於 EC2 啟動類型:檢查目標可用區域中是否有可用的容器執行個體
-
對於 Fargate 啟動類型:檢查是否存在資源限制或服務配額限制任務置放
-
檢閱您的任務置放限制條件,以確保它們不會阻止適當的任務分發
-
- 重新平衡意外停止
-
如果您看到
SERVICE_REBALANCING_STOPPED
事件:-
檢查是否有可能封鎖操作的任務保護
-
尋找可能中斷重新平衡的並行服務部署
-
檢閱服務事件,以取得重新平衡停止原因的其他資訊
-
服務重新平衡的最佳實務
請遵循這些最佳實務,以充分利用服務重新平衡:
-
監控重新平衡操作 - 設定 CloudWatch 警示來監控與重新平衡相關的服務事件,以快速識別任何問題。
-
考慮效能影響 - 請注意,重新平衡操作可能會在舊任務停止之前啟動新任務時暫時增加資源用量。
-
策略性地使用任務保護 - 如果您有在重新平衡期間不應終止的關鍵任務,請考慮使用任務保護。
-
規劃 EC2 容量 - 針對 EC2 啟動類型,請確定您在所有可用區域中有足夠的容器執行個體,以支援有效的重新平衡。
-
測試重新平衡行為 - 在生產環境中依賴重新平衡之前,請先測試服務在非生產環境中重新平衡操作期間的行為。