Posted in: Aws云上云维
AWS ELB (Elastic Load Balance)
建立 ELB 要注意的功能
- Subnet 一定要指定在 Public Subnet, 不然外面會打不進去.
- 可以跨 AZ, 也建議要有跨 AZ. 但是無法跨 Region.
- 有 internet-facing 和 internal 兩種.
- 可以開啟 Access Log, Debug 用途
- ELB 支援 IPv4 and IPv6 (see FAQ)
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) 說明如下:
1
|
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 能夠陸續完成。
ELB 可否 Cross Region?
不行,但可以透過 Route53 Routing Policy 指定不同的 region 的 ELB, policy 有 Geolocation, Weight, Latency, … 等方式。
Sticky Sessions
同一個 Session 固定使用同一個 instance。通常是 stateful 的設計,或者後端資源無法 share 的狀況。
一些要注意的 FAQ
以下是整理自 FAQ.
- 一個 ELB 可以同時處理多個 Port, 像是 80/443, 同時可以 port mapping 不同 instance 的 port. 像是 443 (ELB) to 80 (EC2).
- ELB 沒有限制連線的上限.
補充一點,如果有瞬間大量的需求,而且時間是可以預期的,那麼可以開 AWS Support ,請 ELB Team 幫忙 Pre-warming ELB. 最好一週前準備。
Reference