為 Classic Load Balancer 設定黏性工作階段 - Elastic Load Balancing

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

為 Classic Load Balancer 設定黏性工作階段

Classic Load Balancer 預設會以最小的負載,將每個請求獨立路由至已註冊的執行個體。不過,您可以使用黏性工作階段功能 (也稱為工作階段親和性),它能讓負載平衡器將使用者的工作階段繫結到特定執行個體。這樣能確保該工作階段期間所有的使用者請求都能傳送到相同的執行個體。

管理黏性工作階段的金鑰是決定您的負載平衡器應該持續將使用者請求路由到同一個執行個體的時間。如果您的應用程式有其自己的工作階段 Cookie,則您可以設定 Elastic Load Balancing,因此工作階段 Cookie 遵循應用程式的工作階段 Cookie 指定的持續時間。如果您的應用程式沒有自己的工作階段 Cookie,則您可用指定自己的黏性持續時間來設定 Elastic Load Balancing,以建立工作階段 Cookie。

Elastic Load Balancing 會建立名為 的 Cookie AWSELB,用於將工作階段映射至執行個體。

要求
  • HTTP/HTTPS 負載平衡器。

  • 在各個可用區域內啟動至少一個正常運作的執行個體。

相容性
  • Cookie RFC 路徑屬性的 可允許底線。不過,Elastic Load Balancing URI 會將底線字元編碼為 ,%5F因為某些瀏覽器,例如 Internet Explorer 7,預期底線會URI編碼為 %5F。由於可能影響目前運作中的瀏覽器,Elastic Load Balancing URI 會持續編碼底線字元。例如,如果 Cookie 有屬性 path=/my_path,Elastic Load Balancing 會變更轉發請求至 path=/my%5Fpath 的屬性。

  • 您無法設定 secure 旗標或 HttpOnly 旗標在您的持續時間為基礎的工作階段黏著 Cookie。不過,這些 Cookie 不包含機密資料。請注意,如果您在應用程式控制的工作階段黏性 Cookie 上設定secure旗標或HttpOnly旗標,也會在 AWSELB Cookie 上設定。

  • 如果您有一個在 Set-Cookie 欄位在應用程式 Cookie 結尾的分號,則負載平衡器忽略 Cookie。

持續時間為基礎的工作階段黏著

負載平衡器使用特殊 Cookie AWSELB來追蹤每個請求給每個接聽程式的執行個體。當負載平衡器收到請求時,首先會檢查此 Cookie 是否存在於請求中。若是,此請求會傳送至 Cookie 中指定的執行個體。若 Cookie 不存在,則負載平衡器會根據現有負載平衡演算法選擇執行個體。回應會插入 Cookie,藉此將後續來自相同使用者的請求繫結至該執行個體。黏性政策設定可定義 Cookie 過期時間,用來建立每個 Cookie 有效期。負載平衡器在使用之前,不會重新整理 Cookie 的過期時間也不會檢查 Cookie 是否過期。在 Cookie 過期之後,工作階段不再有黏性。用戶端應該從其 Cookie 存放在到期移除 Cookie。

透過 CORS(跨來源資源共用) 請求,某些瀏覽器需要SameSite=None; Secure啟用黏性。在此情況下,Elastic Load Balancing 會建立第二個黏性 Cookie AWSELBCORS,其中包含與原始黏性 Cookie 相同的資訊,以及此SameSite屬性。用戶端會同時收到這兩個 Cookie。

如果執行個體發生失敗或變成運作狀態不佳,負載平衡器停止路由請求到該執行個體,並根據現有的負載平衡演算法選擇新的運作狀態良好的執行個體。如果沒有 Cookie,而且工作階段不再有黏性,該請求路由到新的執行個體。

如果用戶端切換到具備不同的後端連接埠的接聽程式,黏著性遺失。

若要使用主控台的負載平衡器啟用持續時間為基礎的黏性工作階段
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格的 Load Balancing (負載平衡器),選擇 Load Balancer (負載平衡器)

  3. 選擇負載平衡器的名稱來開啟其詳細資訊頁面。

  4. 接聽程式索引標籤中,選擇管理接聽程式

  5. 管理接聽程式頁面上找到要更新的接聽程式,然後選擇 Cookie 黏性下方的編輯

  6. 編輯 Cookie 黏性設定快顯視窗上,選取依負載平衡器產生

  7. (選用) 對於過期期間,輸入 Cookie 過期期間 (以秒為單位)。如果您不指定過期時段,黏性工作階段持續在瀏覽器工作階段。

  8. 選擇儲存變更以關閉快顯視窗。

  9. 選擇儲存變更以返回負載平衡器詳細資訊頁面。

若要 AWS CLI的負載平衡器啟用持續時間為基礎的黏性工作階段
  1. 使用下列 create-lb-cookie-stickiness-policy 命令來建立負載平衡器產生的 Cookie 黏性政策,其 Cookie 過期期間為 60 秒:

    aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60
  2. 使用下列 set-load-balancer-policies-of-listener 命令,為指定的負載平衡器啟用工作階段黏性:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-duration-cookie-policy
    注意

    set-load-balancer-policies-of-listener 命令會取代目前的政策與指定的負載平衡器連接埠相關聯。每當您使用此命令,指定 --policy-names 選項列出所有政策以啟用。

  3. (選用) 使用下列describe-load-balancers命令來驗證政策是否已啟用:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    回應包含下列資訊,其中說明為指定的連接埠上的接聽程式啟用政策:

    { "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-duration-cookie-policy", "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... ], ... "Policies": { "LBCookieStickinessPolicies": [ { "PolicyName": "my-duration-cookie-policy", "CookieExpirationPeriod": 60 } ], "AppCookieStickinessPolicies": [], "OtherPolicies": [ "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... } ] }

應用程式控制工作階段黏著

負載平衡器使用特殊的 Cookie,將工作階段與處理初始請求的執行個體相關聯,但遵循指定在政策組態中應用程式 Cookie 的生命週期。如果應用程式回應包含新應用程式 Cookie,負載平衡器只會插入新的黏性 Cookie。負載平衡器黏性 Cookie 不會隨著每個請求更新。如果應用程式 Cookie 明確移除或過期,工作階段會停止其黏性直到發出新的應用程式 Cookie。

下列由後端執行個體設定的屬性會傳送至 Cookie 中的用戶端:pathportdomainsecurehttponlydiscardmax-ageexpiresversioncommentcommenturlsamesite

如果執行個體發生失敗或變成運作狀態不佳,負載平衡器停止路由請求到該執行個體,並根據現有的負載平衡演算法選擇新的運作狀態良好的執行個體。負載平衡器會將工作階段視為「卡住」到運作狀態良好的執行個體,並持續路由請求到即使失敗的執行個體恢復到該執行個體。

使用主控台來啟用應用程式控制工作階段黏著
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格的 Load Balancing (負載平衡器),選擇 Load Balancer (負載平衡器)

  3. 選擇負載平衡器的名稱來開啟其詳細資訊頁面。

  4. 接聽程式索引標籤中,選擇管理接聽程式

  5. 管理接聽程式頁面上找到要更新的接聽程式,然後選擇 Cookie 黏性下方的編輯

  6. 選取由應用程式產生

  7. Cookie Name (Cookie 名稱),輸入您的應用程式名稱。

  8. 選擇 Save changes (儲存變更)。

使用 啟用應用程式控制的工作階段黏性 AWS CLI
  1. 使用下列 create-app-cookie-stickiness-policy 命令來建立應用程式產生的 Cookie 黏性政策:

    aws elb create-app-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-app-cookie-policy --cookie-name my-app-cookie
  2. 使用下列 set-load-balancer-policies-of-listener 命令來啟用負載平衡器的工作階段黏性:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-app-cookie-policy
    注意

    set-load-balancer-policies-of-listener 命令會取代目前的政策與指定的負載平衡器連接埠相關聯。每當您使用此命令,指定 --policy-names 選項列出所有政策以啟用。

  3. (選用) 使用下列describe-load-balancers命令來驗證是否已啟用黏性政策:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer
  4. 回應包含下列資訊,其中說明為指定的連接埠上的接聽程式啟用政策:

    { "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-app-cookie-policy", "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "TCP", "InstanceProtocol": "TCP" }, "PolicyNames": [] } ], ... "Policies": { "LBCookieStickinessPolicies": [], "AppCookieStickinessPolicies": [ { "PolicyName": "my-app-cookie-policy", "CookieName": "my-app-cookie" } ], "OtherPolicies": [ "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... } ] }