ELB
定義:
Elastic load balancer是AWS提供一種自伸縮高可用的均衡負載器. 基本上ELB做了2件事情:
- 可以將網(wǎng)絡請求按照一定算法分發(fā)給特定EC2 instance集群屈呕。
- 對于集群中的instance進行health check,在轉發(fā)請求的僅會把請求分發(fā)給健康的instance從而保證高可用性。
分類:
按照ELB的服務對象可以分為:
- internet-facing (public) ELB
- 主要用于VPC邊界之外的用戶訪問的負載均衡
- 創(chuàng)建ELB的同時會生成一個廣域網(wǎng)可訪問的DNS名
- internal (private) ELB
- 主要用戶VPC內(nèi)的instance相互訪問的負載均衡
- 創(chuàng)建ELB的同時會生成一個VPC內(nèi)有效的DNS名
按照ELB的類型分可以分為:
- Classic ELB
- 7/4層均衡負載
- 僅支持輪詢均衡負載算法
- 支持Classic網(wǎng)絡和VPC網(wǎng)絡
- 不支持Webstocket長鏈接
- Application ELB
- 7層均衡負載
- 支持輪君負載算法,端口轉發(fā)算法余佛,路徑轉發(fā)算法
- 僅支持VPC網(wǎng)絡
- 支持Websocket長鏈接
- 支持target group嘹承。將ELB和特征集群解耦
- 強制cross-zone balance, 所以對于Application ELB你必須給他最少2個處于不同AZ的subnet铐望,并且每個AZ只能同時設置一個subnet
概念:
- Listener
ELB通過Listener (協(xié)議+端口號)來監(jiān)聽接受到的請求。當客戶端發(fā)送一個請求到ELB (i.g http:80) ELB如果設定了相應的Listener則會處理這個請求(否則不做響應)栖袋,Listener會維護2個連接, client-to-ELB and ELB-to-server拍顷。注意這兩個連接之間不是以流的形式來傳輸數(shù)據(jù)的,當client在發(fā)送請求的時候塘幅,只有當ELB接收完成了所有來自client端的數(shù)據(jù)才會將數(shù)據(jù)轉發(fā)給server端昔案,而不是像流一樣接收一點傳一點 - Idle Connection timeout
根據(jù)上面說的Listener維護了2個連接,Idle Connection timeout 就是控制這2兩個連接的空閑超時時間的电媳。當任何一個連接在指定時間內(nèi)沒有接受數(shù)據(jù)踏揣,則Listener釋放連接。舉個例子,當client通過ELB向server發(fā)送一個文件上傳的請求的時候匾乓,首先會在client-to-ELB這個連接上傳輸數(shù)據(jù)捞稿,如果數(shù)據(jù)比較大傳輸?shù)臅r間比較長,則可能會導致ELB-to-server這個連接一直空閑拼缝,一旦空閑時間達到了Idle Connection timeout娱局,ELB就會釋放ELB-to-server的連接,從而導致server端會丟失這次client端的請求咧七。 - Connection draining
你可以動態(tài)的從ELB的目標集群去動態(tài)的增加或移除instance, 增加還好說但移除會稍微有些復雜铃辖。當你從ELB de-register一個instance的時候,毫無疑問猪叙,ELB將不會在把新接受到的請求轉發(fā)給這臺instance去處理,但是已經(jīng)接受到的請求呢仁卷?一個完整的請求都包含一個request和一個response穴翩,當你de-register一個instance的時候,如果一個請求已經(jīng)接受但還沒來的及返回response锦积,如果你暴力的直接close掉ELB-to-server的connection芒帕,則這個請求雖然被處理了但client端無法接受到response。所以Connection draining就是用來解決這一問題的丰介,它允許你去設置一個時間背蟆,在這個時間內(nèi),即使你de-register了instance但是還保持連接存在哮幢,知道超過這個時間才close connection. - Sticky session
ELB使用最基本的輪詢均衡負載算法带膀,這塊會有一個問題。一個客戶的2個請求會被分配到不同的機器上橙垢,這會導致session丟失垛叨。例如:你的登陸請求被ELB分配給了機器A, 機器A在session中保存了你的登陸信息,但是你請求其他頁面的請求被ELB分配給了機器B而機器B的session中沒有你的登陸信息柜某,則會跳轉登陸頁面讓你再次登陸嗽元。Sticky session可以保證相同客戶的請求始終被分配到一臺固定的server直到session過期或者cookie被清空敛纲。 - Cross zone balance
當你的ELB對應多個處于不同AZ的subnet的時候,請求會被隨機的分配到不同的AZ的instance去處理
CloudWatch
定義
CloudWatch是用于對各種AWS資源進行監(jiān)控的一個服務剂癌。CloudWatch由下面幾個組件組成
Metric
Metric是對于AWS資源被監(jiān)控的一個維度(如EC2 instance的CPU使用率, ELB單位時間接收request的數(shù)量).
- Metric是資源級別的(具體到一個EC2 instance, 一個ASG淤翔,一個ELB)-
Alarm
Alarm有 3種狀態(tài)- ALARM - 告警
- OK - 正常態(tài)
- INSUFFICIENT - 采樣數(shù)據(jù)不足
Alarm由3個部分組成
- 一個Metric
- 一個Rule,定義獲取Metric data的間隔時間(period), 采樣數(shù)量(periods)和閥值(i.e: CPU>=50%)
- 一個Action, 當alarm被觸發(fā)的時候要采取的動作
- Notification
- ASG actions
- EC2 actions
Event
CloudWatch還提供事件系統(tǒng)佩谷,當一些服務的狀態(tài)發(fā)生變化會拋出事件旁壮,然后允許你去定義相應的動作。感覺和Alarm非常相似琳要,但總結來說有如下不同
Alarm | Event |
---|---|
資源級別的寡具,你僅能給某個資源創(chuàng)建Alarm | 服務級別你可以給一類資源創(chuàng)建Event |
有詳細的采樣配置和閥值 | 針對于籠統(tǒng)的狀態(tài)變化 |
Alarm觸發(fā)的action都是AWS預定義的 | Event支持Lambda, 對于事件的處理更加靈活 |
- Log