Application Load Balancer 的目標群組 - Elastic Load Balancing

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

Application Load Balancer 的目標群組

目標群組使用您指定的通訊協定和連接埠號碼將請求路由到單獨已註冊的目標,例如 EC2 執行個體。您可以向多個目標群組註冊任一目標。您可以針對每個目標群組設定運作狀態檢查。凡已註冊至負載平衡器的接聽程式規則中指定之目標群組的所有目標,系統將對其執行運作狀態檢查。

每個目標群組會用來將請求轉送到一個或多個註冊的目標。在建立每個接聽程式規則時,您會指定目標群組和條件。規則的條件符合時,會將流量轉送到對應的目標群組。您可以針對不同類型的請求,建立不同的目標群組。例如,針對一般請求建立一個目標群組,然後再針對應用程式微型服務的請求,建立其他的目標群組。每個目標群組只能搭配一個負載平衡器使用。如需詳細資訊,請參閱 Application Load Balancer 元件

您可以針對每個目標群組,指定負載平衡器的運作狀態檢查設定。除非您在建立目標群組時覆寫這些設定,或是在之後修改設定,否則每個目標群組都會使用預設的運作狀態檢查設定。當您在接聽程式的規則中指定目標群組後,負載平衡器會針對自己已啟用可用區域中的目標群組,持續地監控透過該目標群組註冊的所有目標,以了解目標的運作狀態。負載平衡器會將請求路由至運作狀態良好的已註冊目標。

路由組態

根據預設,負載平衡器會使用您在建立目標群組時所指定的通訊協定和埠號,來將請求路由至其目標。或者,您可以在使用目標群組來登錄目標時,覆寫用來將流量轉傳到目標的連接埠。

目標群組支援下列的通訊協定和連接埠:

  • Protocols (通訊協定):HTTP、HTTPS

  • Ports (連接埠):1-65535

如果已將目標群組設定為使用 HTTPS 通訊協定或使用 HTTPS 運作狀態檢查,則與目標的 TLS 連線會使用來自 ELBSecurityPolicy-2016-08 政策的安全設定。負載平衡器會使用您在目標上安裝的憑證,與目標建立 TLS 連線。負載平衡器不會驗證這些憑證。因此,您可以使用自我簽署的憑證或已過期的憑證。由於負載平衡器及其目標位於虛擬私有雲 (VPC) 中,因此負載平衡器和目標之間的流量會在封包層級進行驗證,因此即使目標上的憑證無效,也不會受到 man-in-the-middle 攻擊或詐騙的風險。離開的流量 AWS 將不會有這些相同的保護措施,並且可能需要額外的步驟來進一步保護流量。

Target type (目標類型)

建立目標群組時,您會指定其目標類型,這會決定您對此目標群組註冊目標時指定的目標類型。目標群組建立之後,您就無法更改其目標類型。

下列是可能的目標類型:

instance

以執行個體 ID 來指定目標。

ip

目標為 IP 地址。

lambda

目標是 Lambda 函數。

如果目標類型是 ip,您可以從下列其中一個 CIDR 區塊指定 IP 地址:

  • 目標群組 VPC 的子網路

  • 10.0.0.0/8 (RFC 1918)

  • 100.64.0.0/10 (RFC 6598)

  • 172.16.0.0/12 (RFC 1918)

  • 192.168.0.0/16 (RFC 1918)

重要

您無法指定可公開路由傳送的 IP 地址。

所有支援的 CIDR 區塊都可讓您將下列目標註冊至目標群組:

  • 與負載平衡器 VPC (相同區域或不同區域) 對等之 VPC 中的執行個體。

  • AWS 可透過 IP 位址和連接埠 (例如資料庫) 定址的資源。

  • AWS 透過 AWS Direct Connect Site-to-Site VPN 連線連結至的內部部署資源。

注意

對於在 Local Zone 內部署的 Application Load Balancer,ip 目標必須位於相同的 Local Zone,才能接收流量。

如需詳細資訊,請參閱什麼是 L AWS ocal Zones?

如果使用執行個體 ID 來指定目標,會利用在執行個體的主要網路界面中,所指定的主要私有 IP 地址,來將流量轉送到執行個體。如果使用 IP 地址來指定目標,您可以利用來自一個或多個網路界面的任何私有 IP 地址,將流量轉送到執行個體。這可讓執行個體上的多個應用程式,使用相同的連接埠。每個網路界面都可以有自己的安全群組。

如果目標群組的目標類型是 lambda,則可以註冊單一 Lambda 函數。當負載平衡器收到 Lambda 函數的請求時,它會呼叫 Lambda 函數。如需詳細資訊,請參閱 Lambda 函數作為目標

您可以將 Amazon Elastic Container Service (Amazon ECS) 設定為 Application Load Balancer 的目標。如需詳細資訊,請參閱 Amazon 彈性容器服務使用者指南中的建立應用 Application Load Balancer 器 AWS Fargate

IP 地址類型

建立新目標群組時,您可以選取目標群組的 IP 地址類型。這會控制用來與目標通訊並檢查目標運作狀態的 IP 版本。

Application Load Balancer 支援 IPv4 和 IPv6 目標群組。預設的選取為 IPv4。

考量事項
  • 目標群組中的所有 IP 地址都必須具有相同的 IP 地址類型。例如,您無法在 IPv6 目標群組註冊 IPv4 目標。

  • IPv6 目標群組只能與 dualstack 負載平衡器搭配使用。

  • IPv6 目標群組支援 IP 和執行個體類型目標。

通訊協定版本

根據預設,Application Load Balancer 會使用 HTTP/1.1 將請求傳送至目標。您可以使用通訊協定版本,使用 HTTP/2 或 gRPC 將請求傳送至目標。

下表摘要說明請求通訊協定與目標群組通訊協定版本組合的結果。

請求通訊協定 通訊協定版本 結果
HTTP/1.1 HTTP/1.1 Success (成功)
HTTP/2 HTTP/1.1 Success (成功)
gRPC HTTP/1.1 錯誤
HTTP/1.1 HTTP/2 錯誤
HTTP/2 HTTP/2 Success (成功)
gRPC HTTP/2 如果目標支援 gRPC,則成功
HTTP/1.1 gRPC 錯誤
HTTP/2 gRPC 如果是 POST 請求,則成功
gRPC gRPC Success (成功)
gRPC 通訊協定版本的考量事項
  • 唯一支援的接聽程式通訊協定是 HTTPS。

  • 接聽程式規則唯一支援的動作類型為 forward

  • 支援的目標類型僅為 instanceip

  • 負載平衡器會剖析 gRPC 請求,並根據套件、服務和方法將 gRPC 呼叫路由至適當的目標群組。

  • 負載平衡器支援一元、用戶端串流、伺服器端串流和雙向串流。

  • 必須以 /package.service/method 格式提供自訂運作狀態檢查方法。

  • 必須指定在檢查是否有來自目標的成功回應時要使用的 gRPC 狀態程式碼。

  • 無法將 Lambda 函數用作目標。

HTTP/2 通訊協定版本的考量事項
  • 唯一支援的接聽程式通訊協定是 HTTPS。

  • 接聽程式規則唯一支援的動作類型為 forward

  • 支援的目標類型僅為 instanceip

  • 負載平衡器支援從用戶端進行串流。負載平衡器不支援串流至目標。

已登記的目標

您的負載平衡器可做為用戶端的單一聯絡窗口,並將傳入的流量分配到各個運作狀態良好的已登錄目標。您可以利用一個或多個群組來登錄每個目標。

如果對應用程式的需求增加,您可以利用一個或多個目標群組來登錄額外的目標,來應付需求。當註冊程序完成且目標通過第一個初始健全狀況檢查 (不論設定的臨界值為何),負載平衡器會立即開始將流量路由到新註冊的目標。

如果對您應用程式的需求減少,或者您需要為目標提供服務,可以從目標群組取消目標的登錄。取消目標的登錄,會將該目標從目標群組中移除,但不會影響到目標。取消目標的註冊之後,負載平衡器就會立即停止將請求路由到目標。目標會進入 draining 狀態,直到處理中的請求已完成。當您準備讓目標再繼續接收請求時,可以將目標註冊到目標群組。

如果是根據執行個體 ID 來註冊目標,您可以使用負載平衡器搭配 Auto Scaling 群組。在將目標群組連接到 Auto Scaling 群組之後,自動擴展會在該群組啟動這些目標時,將目標註冊到目標群組。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling User Guide 中的 Attaching a load balancer to your Auto Scaling group

限制
  • 您無法在相同的 VPC 中註冊另一個 Application Load Balancer 的​ IP 地址。如果另一個 Application Load Balancer 位於與負載平衡器 VPC 對等的 VPC 中,您可以註冊其 IP 地址。

  • 如果執行個體位於與負載平衡器 VPC (相同區域或不同區域) 對等的 VPC 中,則您無法依執行個體 ID 註冊執行個體。您可以依照 IP 地址來註冊這些執行個體。

目標群組屬性

如果目標群組類型為 instanceip,則支援以下目標群組屬性:

deregistration_delay.timeout_seconds

取消註冊目標之前,Elastic Load Balancing 要等待的時間量。範圍介於 0–3600 秒之間。預設值為 300 秒。

load_balancing.algorithm.type

負載平衡演算法判斷路由請求時,負載平衡器如何選取目標。值為round_robinleast_outstanding_requests、或weighted_random。預設值為 round_robin

load_balancing.algorithm.anomaly_mitigation

僅當load_balancing.algorithm.type是時可用weighted_random。指出是否已啟用異常緩和措施。此值為 onoff。預設值為 off

load_balancing.cross_zone.enabled

表示是否已啟用跨區域負載平衡。此值為 truefalseuse_load_balancer_configuration。預設值為 use_load_balancer_configuration

slow_start.duration_seconds

時間期間 (秒),在此期間負載平衡器會將新註冊的目標流量的線性增加共用傳送至目標群組。此範圍介於 30–900 秒之間 (15 分鐘)。預設值為 0 秒 (已停用)。

stickiness.enabled

指出是否已啟用黏性工作階段。此值為 truefalse。預設值為 false

stickiness.app_cookie.cookie_name

應用程式 Cookie 名稱。應用程式 Cookie 名稱不能有下列字首:AWSALBAWSALBAPPAWSALBTG;它們預留供負載平衡器使用。

stickiness.app_cookie.duration_seconds

應用程式型 Cookie 過期期間 (秒)。在此期間之後,便會將 Cookie 視為過時。最小值為 1 秒,最大值為 7 天 (604800 秒)。預設值為 1 天 (86400 秒)。

stickiness.lb_cookie.duration_seconds

持續時間型 Cookie 過期期間 (秒)。在此期間之後,便會將 Cookie 視為過時。最小值為 1 秒,最大值為 7 天 (604800 秒)。預設值為 1 天 (86400 秒)。

stickiness.type

黏性的類型。可能的值為 lb_cookieapp_cookie

target_group_health.dns_failover.minimum_healthy_targets.count

運作狀態必須良好的目標數量下限。如果運作狀態良好的目標數量低於此值,請在 DNS 中將區域標記為運作狀態不佳,以便只將流量路由至運作狀態良好的區域。目標可能的值為 off,或介於 1 到數目上限的整數。當 off 時,會停用 DNS 故障,代表每個目標群組會獨立貢獻 DNS 備援。預設為 1。

target_group_health.dns_failover.minimum_healthy_targets.percentage

運作狀態必須良好的目標百分比下限。如果運作狀態良好的目標百分比低於此值,請在 DNS 中將區域標記為運作狀態不佳,以便只將流量路由至運作狀態良好的區域。可能的值為 off,或是介於 1 到目標數量上限的整數。off 時,會停用 DNS 備援,這表示每個目標群組會獨立貢獻 DNS 備援。預設為 1。

target_group_health.unhealthy_state_routing.minimum_healthy_targets.count

運作狀態必須良好的目標最低數量。如果運作狀態良好的目標數量低於此值,請將流量傳送至所有目標,包括運作狀態不佳的目標。範圍介於 1 到目標最高數量。預設為 1。

target_group_health.unhealthy_state_routing.minimum_healthy_targets.percentage

運作狀態必須良好的目標最低百分比。如果運作狀態良好的目標百分比低於此值,請將流量傳送至所有目標,包括運作狀態不佳的目標。可能的值為 off,或介於 1 到 100 之間的整數。預設值為 off

如果目標群組類型為 lambda,則支援以下目標群組屬性:

lambda.multi_value_headers.enabled

指出負載平衡器與 Lambda 函數之間的請求和回應標頭交換是否包含值或字串的陣列。可能的值為 truefalse。預設值為 false。如需詳細資訊,請參閱 多值標頭

路由算法

路由演算法是負載平衡器在判斷哪些目標將接收要求時所使用的方法。依預設,會使用循環配置資源路由演算法,在目標群組層級路由要求。根據您的應用程序的需求,也可以使用最不突出的請求加權隨機路由算法。一個目標群組一次只能有一個使用中的路由演算法,但可以視需要更新路由演算法。

如果您啟用黏滯工作階段,則選取的路由演算法會用於初始目標選取。來自相同用戶端的未來要求將會轉送至相同的目標,而略過選取的路由演算法。

循环赛
  • 循環配置資源路由演算法會依序將要求平均路由至目標群組中正常狀態的目標。

  • 當收到的要求複雜度相似、註冊的目標在處理能力上相似,或者您需要在目標之間平均分配要求時,通常會使用此演算法。

最少未完成的請求
  • 未完成的要求路由演算法會將要求路由傳送至進行中要求數目最少的目標。

  • 當收到的請求的複雜性不同,註冊的目標處理能力不同時,通常使用此算法。

  • 當支援 HTTP/2 的負載平衡器使用僅支援 HTTP/1.1 的目標時,它會將要求轉換成多個 HTTP/1.1 要求。在此配置中,最不處理的請求算法將每個 HTTP/2 請求視為多個請求。

  • 使用時 WebSockets,會使用最不未處理的要求演算法選取目標。選取之後,負載平衡器會建立與目標的連線,並透過此連線傳送所有訊息。

  • 最不未完成的要求路由演算法不能與慢速啟動模式一起使用。

加權隨機
  • 加權隨機路由演算法會以隨機順序在目標群組中的正常狀態目標之間平均路由傳送要求。

  • 此演算法支援自動目標權重 (ATW) 異常緩和措施。

  • 加權隨機路由演算法不能與慢啟動模式一起使用。

修改目標群組的路由演算法

您可以隨時修改目標群組的路由演算法。

若要使用新主控台修改路由演算法
  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 Load Balancing (負載平衡) 中,選擇 Target Groups (目標群組)

  3. 選擇目標群組的名稱,以開啟其詳細資訊頁面。

  4. 在目標群組詳細資訊頁面的屬性標籤上,選擇編輯

  5. 在 [編輯目標群組屬性] 頁面的 [流量設定] 區段的 [負載平衡演算法] 下,選擇 [循環配置資源]、[最少未處理的要求] 或 [加權隨機]。

  6. 選擇儲存變更

若要使用修改路由演算法 AWS CLI

使用 modify-target-group-attributes 命令搭配 load_balancing.algorithm.type 屬性。

自動目標權重 (ATW)

自動目標權重 (ATW) 會持續監控執行應用程式的目標,偵測顯著的效能偏差 (稱為異常)。ATW 可透過即時資料異常偵測,動態調整路由至目標的流量量。

自動目標權重 (ATW) 會自動對帳戶中的每個 Application Load Balancer 執行異常偵測。當識別出異常目標時,ATW 可以通過減少路由的流量(稱為異常緩解)來自動嘗試穩定它們。ATW 持續最佳化流量分佈,以最大化每個目標的成功率,同時將目標群組失敗率降至最低。

考量:
  • 異常偵測目前會監控來自目標的 HTTP 5xx 回應碼,以及目標的連線失敗。異常偵測始終處於開啟狀態且無法關閉。

  • 使用 Lambda 做為目標時,不支援 ATW。

異常偵測

ATW 異常偵測會監控行為與其目標群組中其他目標顯示明顯偏差的任何目標。這些偏差 (稱為異常) 是透過比較一個目標的誤差百分比與目標群組中其他目標的誤差百分比來決定的。這些錯誤可以是連接錯誤和 HTTP 錯誤代碼。報告明顯高於同儕的目標會被視為異常狀況。

異常偵測需要目標群組中至少三個健康狀況良好的目標。將目標註冊到目標群組時,必須先通過健全狀況檢查才能開始接收流量。一旦目標接收目標,ATW 就會開始監視目標並持續發佈異常結果。對於沒有異常的目標,異常結果為。normal對於具有異常的目標,異常結果為。anomalous

ATW 異常偵測獨立於目標群組健康狀態檢查。目標可以通過所有目標群組健康狀態檢查,但由於錯誤率提高,仍會標示為異常狀況。異常的目標不會影響其目標群組健康狀態檢查狀態。

異常偵測狀態

ATW 會持續發佈它在目標上執行的異常偵測的狀態。您可以隨時使用 AWS Management Console 或檢視目前狀態 AWS CLI。

使用主控台檢視異常偵測狀態
  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 Load Balancing (負載平衡) 中,選擇 Target Groups (目標群組)

  3. 選擇目標群組的名稱,以開啟其詳細資訊頁面。

  4. 在目標群組詳細資訊頁面上,選擇目標頁籤。

  5. 在「已註冊的目標」表格中,您可以在「異常偵測結果」欄中檢視每個目標異常狀態。

    如果未偵測到異常,則結果為normal

    如果偵測到異常,結果為anomalous

若要檢視異常偵測結果,請使用 AWS CLI

使用描述-目標健康指令,並將屬性值設定為Include.member.NAnomalyDetection

异常缓解

重要

只有在使用加權隨機路由演算法時,才能使用 ATW 的異常緩解功能。

ATW 異常緩解功能會自動將流量路由遠離異常目標,讓他們有機會進行復原。

緩解期間:
  • ATW 會定期調整路由到異常目標的流量。目前,該週期是每五秒鐘一次。

  • ATW 將路由到異常目標的流量減少到執行異常緩解所需的最小量。

  • 不再被偵測為異常的目標,將逐漸有更多流量路由到達目標群組中其他正常目標的同位檢查為止。

開啟 ATW 異常緩解

您可以隨時開啟異常緩解功能。

使用主控台開啟異常緩解
  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 Load Balancing (負載平衡) 中,選擇 Target Groups (目標群組)

  3. 選擇目標群組的名稱,以開啟其詳細資訊頁面。

  4. 在目標群組詳細資訊頁面的屬性標籤上,選擇編輯

  5. 在 [編輯目標群組屬性] 頁面的 [流量設定] 區段的 [負載平衡演算法] 下,確定已選取 [加權隨機]。

    附註:一開始選取加權隨機演算法時,預設會開啟異常偵測。

  6. 在「異常緩解」下,確保已選取「開啟異常緩和措施」。

  7. 選擇儲存變更

若要使用開啟異常緩解 AWS CLI

使用 modify-target-group-attributes 命令搭配 load_balancing.algorithm.anomaly_mitigation 屬性。

異常緩解狀態

每當 ATW 對目標執行緩和措施時,您都可以隨時使用 AWS Management Console 或 AWS CLI來檢視目前的狀態。

使用主控台檢視異常緩解狀態
  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 Load Balancing (負載平衡) 中,選擇 Target Groups (目標群組)

  3. 選擇目標群組的名稱,以開啟其詳細資訊頁面。

  4. 在目標群組詳細資訊頁面上,選擇目標頁籤。

  5. 在 [已註冊的目標] 表格中,您可以在 [有效的緩和措施] 欄中檢視每個目標異常緩和措施狀態。

    如果緩解未在進行中,則狀態為yes

    如果緩解正在進行中,則狀態為no

若要檢視異常緩解狀態,請使用 AWS CLI

使用描述-目標健康指令,並將屬性值設定為Include.member.NAnomalyDetection

取消登記的延遲

Elastic Load Balancing 會停止將請求傳送給正在取消註冊的目標。在預設情況下,Elastic Load Balancing 需要等待 300 秒,才能完成取消註冊程序,這有助於至目標的傳輸中請求完成。若要變更 Elastic Load Balancing 等待的時間,請更新取消註冊延遲時間值。

取消註冊中的目標,其初始狀態為 draining。經過取消註冊延遲之後,取消註冊程序會完成,並且目標的狀態為 unused。如果目標是 Auto Scaling 群組的一部分,可加以終止和取代。

如果取消註冊的目標沒有傳輸中的請求,也沒有作用中連線,Elastic Load Balancing 會立即完成取消註冊程序,而不會等候取消註冊延遲時間結束。不過,即使目標取消註冊完成,目標的狀態仍會顯示為 draining,直到取消註冊延遲逾時結束。逾時結束後,目標會轉變為 unused 狀態。

如果取消註冊目標在取消註冊延遲經過之前終止連線,用戶端會收到 500 層級的錯誤回應。

使用主控台來更新取消登錄的延遲值
  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 Load Balancing (負載平衡) 中,選擇 Target Groups (目標群組)

  3. 選擇目標群組的名稱,以開啟其詳細資訊頁面。

  4. 群組詳細資訊索引標籤的屬性區段中,選擇編輯

  5. 編輯屬性頁面上,視需要變更取消註冊延遲時間的值。

  6. 選擇儲存變更

若要使用更新取消註冊延遲值 AWS CLI

使用 modify-target-group-attributes 命令搭配 deregistration_delay.timeout_seconds 屬性。

慢速啟動模式

在預設情況下,在向目標群組註冊目標並通過初始運作狀態檢查之後,目標隨即會開始接收其請求的完整共用。使用慢速啟動模式可讓目標在負載平衡器向它們傳送請求的完整共用之前,有時間進行暖機。

啟用目標群組的慢啟動後,當目標群組被視為運作狀態良好時,其目標會進入慢速啟動模式。慢速啟動模式的目標,會在設定的慢啟動超過持續的時間或目標變得狀態不良時,結束慢速啟動模式。負載平衡器會線性增加可以在慢速啟動模式中傳送到目標的請求數量。在運作狀態良好的目標退出慢速啟動模式之後,負載平衡器可以將完整份額的請求傳送給它。

考量事項
  • 啟用目標群組的慢啟動時,運作狀態良好的已註冊目標不會進入慢速啟動模式。

  • 為空白目標群組啟用慢速啟動,然後使用單一註冊操作註冊目標時,這些目標不會進入慢速啟動模式。只有在至少一個運作狀態良好的目標不處於慢速啟動模式時,新註冊的目標才會進入慢速啟動模式。

  • 如果您將處於慢速啟動模式的目標取消註冊,該目標會退出慢速啟動模式。如果您再次註冊相同的目標,當目標群組視為運作狀態良好時,它會進入慢速啟動模式。

  • 如果處於慢速啟動模式的目標變得運作狀態不佳,目標就會結束慢速啟動模式。當目標狀況良好時,它會再次進入慢速啟動模式。

  • 使用最不未處理的要求加權隨機路由演算法時,您無法啟用慢速啟動模式。

使用主控台更新慢速啟動持續期間值
  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 Load Balancing (負載平衡) 中,選擇 Target Groups (目標群組)

  3. 選擇目標群組的名稱,以開啟其詳細資訊頁面。

  4. 群組詳細資訊索引標籤的屬性區段中,選擇編輯

  5. 編輯屬性頁面上,視需要變更慢速啟動持續時間的值。若要停用慢速啟動模式,請將持續期間設定為 0。

  6. 選擇儲存變更

若要使用更新慢速啟動持續時間值 AWS CLI

使用 modify-target-group-attributes 命令搭配 slow_start.duration_seconds 屬性。