目录
1. Elastic Load Balancing
1.1 负载均衡器概述
截止现在,AWS支持三种类型的负载均衡器: Classic Load Balancer(已停用)、网络负载均衡器、应用程序负载均衡器和网关负载均衡器。
其中Classic Load Balancer为上一代负载均衡器,它目前只被推荐使用于仍然有实例运行在ec2-classic网络的场景,如果你需要的不是这种场景,那AWS建议使用网络负载均衡器 或 应用程序负载均衡器,因为Classic Load Balancer所提供的功能是可以被网络负载均衡器或应用程序负载均衡器替代的。
1.2 负载均衡器比较
官网上关于负载均衡器的对比可以参考:Elastic Load Balancing 功能对比。
总而言之,如果需要灵活管理应用程序,AWS建议使用 Application Load Balancer。
如果应用程序需要实现极致性能和静态 IP,AWS建议使用Network Load Balancer。
如果现有应用程序构建于ec2-classic网络内,AWS建议使用Classic Load Balancer。
2. Listener和Target group
2.1 Listener
侦听器是负载均衡器用于检查连接请求的进程。
侦听器使用配置的协议和端口检查来自客户端的连接请求(如配置侦听器检查连接请求为HTTP 协议 和 80端口),侦听器定义的规则决定负载均衡器如何将请求路由到其已注册目标。
2.2 Target group
侦听器将客户端请求路由到目标组,然后目标组使用指定的协议和端口号将请求路由到一个或多个注册目标,如 EC2 实例。
在创建侦听器规则时,可以指定目标组和条件。满足规则条件时,流量会转发到相应的目标组。
但创建侦听器指定的目标组只适用于新一代的负载均衡器,也就是应用程序负载均衡器以及网络负载均衡器。
3. Classic Load Balancer
3.1 环境准备
以下需要准备两台EC2,并安装配置NGINX,假设分别为lin和lin2。
关于如何通过putty连接EC2以及切换到root可以参考:EC2日志内容推送至CloudWatch。
1) 切换到root安装NGINX。
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum -y install nginx
2) 修改默认INDEX文件。
cd /usr/share/nginx/html
vim index.html
两台EC2的<h1>分别更新为:
<h1>Welcome to BAS blog1!</h1>
<h1>Welcome to BAS blog2!</h1>
3) 启动NGINX。
systemctl start nginx
4) 访问:http://54.219.12.182/index.html ,其中ip为EC2的公网ip。
3.2 创建CLB
进入到elb创建页面可以看到,clb已经被停用了。
4. Application Load Balancer
Application Load Balancer 在请求级别(第 7 层)运行,根据请求的内容将流量路由到目标(EC2 实例、容器、IP 地址和 Lambda 函数)。
Application Load Balancer 非常适合 HTTP 和 HTTPS 流量的高级负载平衡,提供高级请求路由,旨在交付现代应用程序架构,包括微服务和基于容器的应用程序,通过确保始终使用最新的 SSL/TLS 密码和协议来简化和提高应用程序的安全性。
关于ALB的官方文档可以参考:What is an Application Load Balancer。
以下主要是总结应用程序负载均衡器基于路径的路由功能。
4.1 基于路径路由的使用场景
在应用程序负载均衡器的监听器配置规则条件:
1) 可以将负载均衡器收到的bas.com/images/请求 ,URL中包括/images/的请求路由到server 1;
2) 可以将负载均衡器收到的的bas.com/data/请求,URL中包括/data/的请求路由到server 2 。
这种方式就是应用程序负载均衡器的基于路径的路由功能。
通过基于路径的路由功能,您可以将您的应用程序构造为较小的服务,并根据 URL 内容将请求路由到正确的服务。
4.2 环境准备
1) 将图片文件image.jpg复制到EC2的/usr/share/nginx/html/images,将数据文件userinfo.txt复制到/usr/share/nginx/html/data。
2) 访问http://54.183.53.8/images/image.jpg, http://54.183.53.8/data/userinfo.txt
4.3 创建ALB
1) 因为必须要创建目标组,所以进入到创建目标组页面,目标类型选择实例。
2) 进入到创建页面, 假设这里命名为bas-alb。
3) 确保TG的目标是healthy状态的。
4) 根据ALB的DNS访问数据。
4.4 ALB基于路径的路由功能
上一步我们创建了一个ALB和两个TG,TG分别指定了EC2的实例lin和lin2。所以以下通过编辑ALB的侦听器来实现不同的url转发到不同的TG,也就是基于路径的路由功能。
1) 确保lin有images和data文件,lin2只有包含data,并且文件内容包含server lin2。
2) 添加ALB的侦听器规则:data和images。
3) 访问images的时候会转发至lin,访问data的时候会转发至lin2。
5. Network Load Balancer
NLB,在 OSI模型的第四层运行(传输层),它只支持传输层的协议:TCP、UDP、以及TLS。
5.1 NLB路由算法
- 对于 TCP 流量,NLB基于协议、源 IP 地址、源端口、目标 IP 地址、目标端口和 TCP 序列号,使用流哈希算法选择目标;
- 当来自客户端的 TCP 连接具有不同的源端口和序列号,这样可以路由到不同的目标;
- 对于每个单独的 TCP 连接在连接的有效期内路由到单个目标。
5.2 创建NLB
1) 创建一个弹性IP。
2) 创建NLB目标组tg-lin。
3) 创建NLB bas-nlb,其中网络映射的IPv4选择上面的弹性ip。
5.3 测试
这个弹性IP,实际是分配给了我们创建NLB选择的可用区us-west-1a的NLB的网络接口上,也可以称其为NLB的节点。默认情况下,每个负载均衡器节点仅在其可用区中的已注册目标之间分配流量。如果启用了跨区域负载均衡,则每个负载均衡器节点会在所有启用的可用区中的已注册目标之间分配流量。
1) 访问NLB的DNS,http://bas-nlb-8a86ec6fa6f95824.elb.us-west-1.amazonaws.com/index.html,可以确认NLB已经正常运行。
2) 可以在EC2输入nslookup看下这个NLB目前被分配的IP地址是不是我们配置的弹性iP地址。
注:
1. EC2安全组的80端口要打开,才可以正常访问到NGINX的资源。
2. 一个TG只能对应一个ALB,也就是如果ALB1侦听器绑定了TG1的话,那ALB2就不能再使用TG1了。
附:
1. 关于ALB的侦听器规则可以参考官网文档:Listeners for your Application Load Balancers。
2. 关于ALB转发到Route53可以参考:关于AWS Alb和Route53的使用 小结。