目前我们已经将两台 Web 服务器放在两个不同的可用区,如何让使用者可以将这两台或是更多台的 Web 服务器是为是一台 Web 服务器,所以我们需要在 Web 服务器前放置一个负载均衡器,如图 1 所示,今天要介绍的是 Amazon 的负载均衡器 - Elastic Load Balancing (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 实例所呈现的结果不同,见图 2
curl http://169.254.169.254/latest/meta-data/placement/availability-zone
将以上内容写成 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
index.php 首页内容
Meta-Data Value
InstanceId " . file_get_contents($urlRoot . 'instance-id') . " ";
# Availability Zone
echo " Availability Zone " . file_get_contents($urlRoot . 'placement/availability-zone') . " ";
?>
接着就可以透过浏览器看到结果,不同的网址,所呈现的可用区跟实例ID是不同的
进入 EC2 控制台,在左手选单下方选择负载平衡器,并在右边按下Create Load Balancer
我们选择 Application Load Balancer (ALB)
图 6 、选择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 的字段,当作是网址,直接读取网页(图 11),但请注意,要等一段时间,因为 DNS 注册需要一段时间,所以可能要等五分钟后, DNS 的 TTL 到期后会再去抓取的时候,这时候网页才会正常(图 12)
![观察负载平衡器所对应到的主机]](https://img-blog.csdnimg.cn/img_convert/659487363b66d711327d90a9256f8772.png)
图 12、观察负载平衡器所对应到的主机