目前我們已經將兩台 Web 伺服器放在兩個不同的可用區,如何讓使用者可以將這兩台或是更多台的 Web 伺服器是為是一台 Web 伺服器,所以我們需要在 Web 伺服器前放置一個負載均衡器,如圖一所示,今天要介绍的是 Amazon 的負載均衡器 - Elastic Load Balancing (ELB)。
圖一、具有 ELB 的應用程式架構
負載均衡器的目的是自動將傳入的應用程式流量,分配到多個目標,例如 Amazon Elastic Compute Cloud (EC2) 實例、容器或 Internet 協定 (IP) 地址。而 Amazon 將 ELB 分成三種不同類型
合理來說,當加裝為 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 實例所在的可用區
將以上內容寫成 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 的首頁
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 主控台,在左手選單下方選擇負載平衡器,並在右邊按下Create Load Balancer
圖五、新增負載平衡器
我們選擇 Application Load Balancer (ALB)
圖六、選擇Application Load Balancer
接下來可以發現需要六個步驟
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)
圖七、設定負載平衡器的涵蓋範圍
Assign a security group: Select an existing security group
_ithome_web_SG _
圖八、設定負載平衡器安全組
Target group : New target group
Name : ithomeTargetGroup
圖九、指定負載平衡器目標群
圖九、指定負載平衡器目標群內容
完成設定後,記得在回到負載平衡器得主畫面,這時候就可以看到剛剛建立的負載平衡器,這時候就可以直接複製 DNS Name 的欄位,當作是網址,直接讀取網頁(圖十),但請注意,要等一段時間,因為 DNS 註冊需要一段時間,所以可能要等五分鐘後,DNS的TTL到期後會再去抓取的時候,這時候網頁才會正常(圖十一)
圖十、負載平衡器的內容
![觀察負載平衡器所對應到的主機]](https://ithelp.ithome.com.tw/upload/images/20200909/2012951072wJ7xBS2D.jpg)
圖十一、觀察負載平衡器所對應到的主機