本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
跨可用區域平衡 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" } ]
開啟可用區域重新平衡
您需要為新的和現有的服務啟用可用區域重新平衡。
您可以使用 主控台、 APIs 或 來啟用和停用可用區域重新平衡 AWS CLI。
服務類型 | API | 主控台 | CLI |
---|---|---|---|
現有 | UpdateService | 更新 Amazon ECS 服務 | update-service |
新增 | CreateService | 使用主控台建立 Amazon ECS 服務 | create-service |