iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
自我挑戰組

AWS架構應用系列 第 9

Elastic Load Balancing (ELB) - Day09

Elastic Load Balancing (ELB) - Day09

目前我們已經將兩台 Web 伺服器放在兩個不同的可用區,如何讓使用者可以將這兩台或是更多台的 Web 伺服器是為是一台 Web 伺服器,所以我們需要在 Web 伺服器前放置一個負載均衡器,如圖一所示,今天要介绍的是 Amazon 的負載均衡器 - Elastic Load Balancing (ELB)。

具有 ELB 的應用程式架構
圖一、具有 ELB 的應用程式架構

負載均衡器的目的是自動將傳入的應用程式流量,分配到多個目標,例如 Amazon Elastic Compute Cloud (EC2) 實例、容器或 Internet 協定 (IP) 地址。而 Amazon 將 ELB 分成三種不同類型

Application Load Balancer (ALB)

  • 應用程式級別(第 7 層)
  • 支援基於內容的路由和在容器中運行的應用程式
  • 支援兩種行業標準協議(WebSocket 和 HTTP/2)
  • 能夠瞭解有關目標實例和容器運行狀況的其他資訊。

Network Load Balancer (NLB)

  • 每秒處理數以千萬計的請求,同時以超低延遲保持高輸送量。
  • 適合實現傳輸控制協議 (TCP) 流量負載均衡,且能夠在每秒處理數百萬請求的同時保持超低延遲。
  • 在連接級別運行(第 4 層)

Classic Load Balancer (CLB)

  • 可跨多個 Amazon EC2 實例提供基本的負載均衡
  • 在應用程式級別和連接級別運行
  • 非常適合內置於 Amazon EC2-Classic 網路的應用程式

安裝應用程式

合理來說,當加裝為 ELB 後, ELB 應該要在兩台WEB伺服器之間自動進行切換,為了要觀察這個行為,我們需要一個應用程式來觀察目前執行的主機是哪一台, Amazon EC2 實例有內建一個網址(http://169.254.169.254/latest/meta-data),使用者可以針對這個網址來查詢這個 EC2 實例的相關設定資料,如實例 ID 、實例可用區等等,我們就可以透過這個方法來得知目前執行的 EC2 實例是哪一台。

使用 PuTTy 登入兩台 EC2 實例,執行相同指令,用來查詢這個 EC2 實例所在的可用區,可以發現兩台 EC2 實例所呈現的結果不同,見圖二

curl http://169.254.169.254/latest/meta-data/placement/availability-zone

 EC2 實例所在的可用區
圖二、查詢 EC2 實例所在的可用區

將以上內容寫成 php 程式碼,置於 EC2 實例首頁,首先先使用 Putty 登入 EC2 實例,接著安裝 web 伺服器與 php ,並啟動 web 伺服器

# install web server and php
sudo yum -y install httpd php  
# start web server
sudo systemctl  start httpd

接著撰寫首頁,可以選擇自己孰悉的 Linux 編輯器,如 vim 或是 nano

sudo vim /var/www/html/index.php

 設定 EC2 的首頁
圖三、設定 EC2 的首頁

index.php 首頁內容

<center>
<table class='table table-bordered'>
<tr><th>Meta-Data</th><th>Value</th></tr>
<?php
  #The URL root is the AWS meta data service URL where metadata
  # requests regarding the running instance can be made
  $urlRoot="http://169.254.169.254/latest/meta-data/";

  # Get the instance ID from meta-data and print to the screen
  echo "<tr><td>InstanceId</td><td><i>" . file_get_contents($urlRoot . 'instance-id') . "</i></td><tr>";

  # Availability Zone
  echo "<tr><td>Availability Zone</td><td><i>" . file_get_contents($urlRoot . 'placement/availability-zone') . "</i></td><tr>";
?>
</table>
</center>

接著就可以透過瀏覽器看到結果,不同的網址,所呈現的可用區跟實例ID是不同的

 檢查 EC2 的首頁畫面
圖四、檢查 EC2 的首頁畫面

設定 ELB

進入 EC2 主控台,在左手選單下方選擇負載平衡器,並在右邊按下Create Load Balancer

新增負載平衡器
圖五、新增負載平衡器

我們選擇 Application Load Balancer (ALB)

選擇Application Load Balancer
圖六、選擇Application Load Balancer

接下來可以發現需要六個步驟

  1. Configure Load Balancer: 建議先看一下圖一,可以發現負載平衡器會跨越兩個可用區,因為唯有如此才能完成高可用性的設定,所以除了設定名字外,記得選擇 VPC (PS:一個區域可以有多個 VPC )以及可用區

Name : ithomeALB
Availability Zones
VPC : vpc-0bb7004b67556d0da (172.16.0.0/16) | ithomeVPC
Availability Zones
ap-southeast-1a: subnet-0f1df807467b642f6 (ithome public subnet 1)
ap-southeast-1b: subnet-06f56dccb2a9cfcf0 (ithome public subnet 2)

設定負載平衡器的涵蓋範圍
圖七、設定負載平衡器的涵蓋範圍

  1. Configure Security Settings: 沒有設定
  2. Configure Security Groups: 設定安全組,選擇先前設定的安全組,跟原來的 EC2 實例一樣

Assign a security group: Select an existing security group
_ithome_web_SG _

設定負載平衡器安全組
圖八、設定負載平衡器安全組

  1. Configure Routing: 設定要將收到的流量轉給哪個對象,因為 AWS 會將這些對象設定成一個目標群,所以我們先指定一個目標群,到後面再來設定這個目標群的內容

Target group : New target group
Name : ithomeTargetGroup

指定負載平衡器目標群
圖九、指定負載平衡器目標群

  1. Register Targets: 指定目標群的內容,將先前設定的兩個 EC2 實例指定到上面新建立的目標群

指定負載平衡器目標群內容
圖九、指定負載平衡器目標群內容

  1. Review

完成設定後,記得在回到負載平衡器得主畫面,這時候就可以看到剛剛建立的負載平衡器,這時候就可以直接複製 DNS Name 的欄位,當作是網址,直接讀取網頁(圖十),但請注意,要等一段時間,因為 DNS 註冊需要一段時間,所以可能要等五分鐘後,DNS的TTL到期後會再去抓取的時候,這時候網頁才會正常(圖十一)

負載平衡器的內容
圖十、負載平衡器的內容

![觀察負載平衡器所對應到的主機]](https://ithelp.ithome.com.tw/upload/images/20200909/2012951072wJ7xBS2D.jpg)
圖十一、觀察負載平衡器所對應到的主機


上一篇
Amazon Elastic Compute Cloud (EC2) - Day08
下一篇
Amazon Relational Database Service (Amazon RDS) - Day10
系列文
AWS架構應用24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言