Load Balancers

當有兩個以上或更多相同服務的 EC2 的 instances 時候,Load Balancer 可以支援分散 Application 的負載能力。當運轉上負荷吃力時,我們可以動態的增加註冊 EC2 instances 進來到 Load Balancer,達到增加更多機器來支撐需要。當不需要使用時候,也可以馬上一一解除。

每一個 Load Balancer 是由一組 DNS 名稱和設定好的目的 ports 對應,導到 Application 該去的地方。這樣在整體 Ports 配製上可以省去很多煩惱,例如在 Amazon Linux 上面運轉的 Tomcat,使用預設值 port 8080 即可,這樣透過 Load Balancer 規劃從 port 80 轉址到 port 8080 即可,這樣使用者在瀏覽器不用輸入特殊 port,我們後端也可以做些 port 運用。

透過 Health Check 設定檢查的參數與頻率,可以監控 EC2 instances 的健康狀況。指定要 Ping Protocol HTTP, TCP、Ping Port 例如 8080、Ping Patch 指定要檢查的目標路徑來檢驗是否該 Instance 健康,值例如是 /index.html、Response Timeout 當超過幾秒鐘就不合格,例如 5 秒鐘、Health Check Interval 檢查時間多久,預設 5 秒鐘、Unhealthy Threshold 當幾個以下開始為不健康、Healthy Threshold 設定當幾個開始健康後,把狀態不健康轉成健康。當以上參考指標讓 Load Balancer 偵測到有問題的 instance,會將它停止分散流量過去。當 Instance 又恢復到健康,才會再分配流量給它。

我準備了至少兩個 Amazon Linux instances,都個別裝上了 Tomcat6 server,預設 8080 port,和要提供相同的簡單 web 服務,另外在 HTML footer 偷偷動手腳,將該 Instance 代號填寫在上面,作為後面觀測所需。檢查所有 Amazon Linux 都準備妥當後,新增一個 Load Balancer,將網址設定 port 80 導到 port 8080。再將我準備好的 Instances 勾選掛進來,最後設定好 Health check 機制後,這個 Load Balancer 即建立完成。

來到 Amazon EC2 的 Load Balancers 管理介面,可以看到 Load Balancer 建立好了,且預設 Amazon 會給予一組電腦做的 DNS name 來做使用,當然是很長一串且是 amazon.com結尾的,如果不喜歡自己要再去另外註冊自己滿意的 DNS,這邊因為是練習階段,所以沒關係直接用。Status 我們可以看到 x of y instances in service 有個概括了解自己服務狀況、Port Configuration 可以看到目前設定上轉到哪個 port 的、Available zone 顯示目前橫跨幾個地區,因為 Instances 有可能會分配到不同區域,以我這邊查到,分別在 ap-southeast-1a, ap-southeast-1b。切換到 Instances 頁面,可以看到目前掛載了幾個 Instance,各個狀態狀況怎麼樣,如果想要移除掉某些 Instance,可以在這邊移除。

最後來看成果時候了,打開瀏覽器,輸入 Load Balancer 提供的 DNS 網址,即可看到我們 Tomcat6 server 上提供的 web page 檢視。檢查 HTML Footer 偷偷塞的代號,可以發現會出現哪一臺 Instance 是由 Load Balancer 隨機決定的。另外遠端 SSH 進入 Amazon Linux 管理,將其中一臺 Tomcat server shutdown,過幾秒鐘我們再返回 Amazon EC2 的 Load Balancers 管理介面,即可發現其中一個 Instance 狀態從 In Service 變成 Out of Service,Healthy 從 Yes 變成 No,這時候沒關係,回到瀏覽器將 Load Balancer 提供的 DNS 網址重新整理,即可看到它會轉到還在健康運轉的 Instance 上面了,HTML Footer 上顯示好的那台代號。

總結來說,Load Balancers 提供了相當不錯的服務,根據需求調整 Instance 供應數目,如果發生 Instance 因為不當原因失去該 Instance 服務,沒關係,整體對外運作還是正常的,達到服務不中斷,只要儘快瞭解再掛載上來,就可以通通回到一陣線上了。

Comments