Study Notes - Elastic Load Balancer
整理 Elastic Load Balancer 的學習筆記,包含了:
- Classic Load Balancer (L4 + L7), 上一代的 LB ,已經不建議使用。
- Application Load Balancer (L7)
- Network Load Balancer (L4)
內容整理以下:
- 基本概念
- 功能
- 常見問答
基本概念
規劃 ELB 要注意的功能
- 依照用途,分成 L7、L4
- 當 Ingress 給外部使用,要放在 Public Subnet
- 可以跨 AZ, 也建議要有跨 AZ. 但是無法跨 Region.
- 有 internet-facing 和 internal 兩種
- 可以開啟 Access Log, Debug 用途
- CLB, ALB 支援 IPv4 and IPv6
- ALB 在建立時就要指定 IP Address Type
Cross-zone Load Balancing
官方文件 開始的描述如下:
By default, your load balancer distributes incoming requests evenly across its enabled Availability Zones. To ensure that your load balancer distributes incoming requests evenly across all back-end instances, regardless of the Availability Zone that they are in, enable cross-zone load balancing.
意思大概是:
LB 預設值會平均的、且跨越 AZ 來處理 Request。如果打算確保 LB 平均的分散 Request 到所有的 Backend instances,不管那些 instances 是在哪一個 AZ,那麼打開 *Cross-zone Load Balancing*
邏輯上理解 Cross-Zone Enabled/Disabled 的差異:
- Enabled:平均流量的單位是 instance (不管機器在哪個 AZ)
- Disabled:平均流量的單位是 AZ (不管 AZ 裡有多少機器)
Best Practice and 官方建議:
- Enable Cross-Zone Load Balancing
- 保持兩邊的機器數一樣
另外,ELB 的 CloudWatch - Health count,如果 Cross-Zone 是 Disabled,health count 數值只有實際的一半,Enabled 才是 Instance Count。
官方文件 (Elastic Load Balancing Metrics) 說明如下:
The number of healthy instances in each Availability Zone. An instance is considered healthy if it meets the healthy threshold configured for the health checks. If cross-zone load balancing is enabled, the number of healthy instances is calculated across all Availability Zones.
大概意思:每個 AZ 的 healthy instances 數。如果 cross-zone enabled,就會計算所有 AZ 裡的 instance 數
Connection Draining
Drain 翻譯是 “排水” 的意思。如果 ELB 開啟 Connection Draining,那麼以下狀況就會停止送 Request 到 instance:
- 當 instance 剛剛被 de-register 的時候,正在處理中 (in progress) 的 request 都完成了
- instance 變成 unhealthy 狀態, 沒有新的 request 進來. 但是持續中的 request 會繼續完成, 也就是可能會出現 HTTP 4XX or 5XX.
使用情境:
- 通常用在部署的時候,需要暫時把線上的 instance 移除,但可能還有連線存在。通常線上的服務都會打開,建議可以開 180s 左右。
- 用在 auto scale 的時候,也需要此功能,正在處理中的 Request 能夠陸續完成。
Sticky Sessions
同一個 Session 固定使用同一個 instance。通常是 stateful 的設計,或者後端資源無法 share 的狀況。
IPv6 Support
2017 年之後 AWS 的基礎架構服務都支援 IPv6,針對 CLB CNAME 的規則如下:
- name-123456789.region.elb.amazonaws.com
- ipv6.name-123456789.region.elb.amazonaws.com
- dualstack.name-123456789.region.elb.amazonaws.com
在原本 CNAME 前面加入 ipv6.
或者 dualstack
即可。
底下是實際測試 CLB 的紀錄:
1 | ## CLB: ipv6. |
ALB 則需要再建立時,IP address type 選擇 dualstack 才可以支援 IPv6。
常見問答
以下是整理自 FAQ.
- 一個 ELB 可以同時處理多個 Port, 像是 80/443, 同時可以 port mapping 不同 instance 的 port. 像是 443 (ELB) to 80 (EC2).
- ELB 沒有限制連線的上限.
補充一點,如果有瞬間大量的需求,而且時間是可以預期的,那麼可以開 AWS Support ,請 ELB Team 幫忙 Pre-warming ELB. 最好一週前準備。
CLB 重要的 Metrics: SpilloverCount, SurgeQueueLength
- SurgeQueueLength: 指的是 CLB 發現背後的機器已經進入 pending 狀態,這時候收到的 Request 暫時存起來的 Queue 大小,最大為 1024。通常表示機器很忙。
- SpilloverCount: 當 Surge Queue 滿了之後,被丟棄的 Request 數量。
ELB 可否 Cross Region?
不行,但可以透過 Route53 Routing Policy 指定不同的 region 的 ELB, policy 有 Geolocation, Weight, Latency, … 等方式。
延伸閱讀
站內延伸
- Unknown ENI Delete Action in CloudTrial
- How Elastic Load Balancing (ELB) Implement
- Study Notes - EC2 Auto Scaling Group
- AWS Study Roadmap