# Introduction to Elastic Load Balancing ## 概览 本实验为您介绍 Elastic Load Balancer,其中包括如何创建和测试 Network Elastic Load Balancer。实验启动后,它提供两个不同可用区,其中各有一个 Web 服务器。在本实验中,您将创建一个 Network Elastic Load Balancer,并将这两个 Web 服务器用作目标。然后,您将在不同的场景中测试负载均衡器的功能 ![alt text](./figures/diagram.png) ## 目标 完成本实验后,您将能够: 测试与位于两个不同可用区中的两个 Web 服务器的连接 创建一个 Network Load Balancer,并将这两个 Web 服务器用作 Elastic Load Balancer 目标 测试负载均衡器的默认功能 启用跨区域负载均衡并测试负载均衡器的行为方式 在其中一个 Web 服务器发生故障时测试负载均衡器的行为 在 Web 服务器从故障中恢复后测试负载均衡器的行为 ## 本实验中使用的服务 ### Amazon Elastic Load Balancer Amazon Elastic Load Balancer (Amazon ELB) 作为一项服务,可在多个 Amazon EC2 实例之间自动分配应用程序的传入流量。通过这项服务,您可以实现更高的应用程序容错能力,从而无缝提供响应应用程序的传入流量所需的负载均衡容量。Elastic Load Balancing 可以检测出池中运行不正常的实例,并自动将流量重新路由到运行正常的实例,直到运行不正常的实例恢复为止。 客户可以在单个可用区或多个可用区中启用 Elastic Load Balancing,以实现更加一致的应用程序性能。也可以在 Amazon Virtual Private Cloud (VPC) 中使用 Elastic Load Balancing 在应用程序层之间分配流量。 Elastic Load Balancing 支持以下类型的负载均衡器: - #### Application Load Balancer Application Load Balancer 在应用程序层正常工作,该层是开放系统互连 (OSI) 模型的第 7 层。负载均衡器收到请求后,将按照优先级顺序评估侦听器规则以确定应用哪个规则,然后从目标组中选择规则操作目标。可以配置侦听器规则,以根据应用程序流量的内容,将请求路由至不同的目标组。每个目标组的路由都是单独进行的,即使某个目标已在多个目标组中注册。可以配置目标组级别使用的路由算法。默认路由算法为轮询路由算法;或者,可以指定最少未完成请求路由算法。 - #### Network Load Balancer Network Load Balancer 在连接级别(第 4 层)运行,根据 IP 协议数据将连接路由至 Amazon VPC 中的目标(Amazon EC2 实例、微服务和容器)。Network Load Balancer 最适合 TCP 和 UDP 流量的负载均衡,能够在保持超低延迟的同时每秒处理数百万个请求。Network Load Balancer 经过优化,可以处理突发和不稳定的流量模式,同时每个可用区使用单个静态 IP 地址。它可与其他常见的 AWS 服务集成,例如 Auto Scaling、Amazon EC2 Container Service (ECS)、Amazon CloudFormation 和 AWS Certificate Manager (ACM)。 - #### Gateway Load Balancers (网关负载均衡器) Gateway Load Balancer 在开放系统互联 (OSI) 模型的第三层,即网络层运行。Gateway Load Balancers 让您能够部署、扩展和管理虚拟设备,例如防火墙、入侵检测和防御系统以及深度数据包检测系统。它结合了一个透明的网络网关(即所有流量的单个入口和出口点),并分配流量,同时根据需求扩展虚拟设备。 - #### Classic Load Balancers(经典负载均衡器) 负载均衡器将传入的应用程序流量分配到多个可用区的多个EC2实例上。这可提高应用程序的容错能力。弹性负载均衡会检测运行状况不佳的实例,并将流量仅路由到运行正常的实例。 - #### 产品比较: ![alt text](figures/ELB_compare.png) ## 任务 1:测试对 Web 服务器的访问 在此任务中,您将通过 HTTP 连接到每个 Web 服务器。这将证明您的 Web 服务器正在为网页提供服务。这些 EC2 实例是当您启动实验时在 CloudFormation 模板中创建的。 在这些说明的左侧,将 WebServer01 的值复制到剪贴板,然后: 将该值粘贴到一个新的浏览器标签页中 按 Enter 键 将看到如图 ![alt text](./figures/server1.png) 在这些说明的左侧,将 WebServer02 的值复制到剪贴板,然后: 将该值粘贴到一个新的浏览器标签页中 按 Enter 键 ![alt text](./figures/server2.png) ## 任务 2:创建 Elastic Load Balancer - 在 AWS 管理控制台中,使用 AWS 搜索栏搜索 EC2,然后从列表中选择该服务。 - 在左侧导航窗格中,选择负载均衡器。 - 选择 Create load balancer(创建负载均衡器)。 附加信息:负载均衡器充当客户端的单一联系点。该负载均衡器在多个目标(例如 Amazon EC2 实例)间分配传入流量。这将提高应用程序的可用性。 - 在 Select load balancer type(选择负载均衡器类型)上的 Network Load Balancer 下方,选择 Create(创建)。 附加信息:Network Load Balancer 在开放式系统互联 (OSI) 模型的第 4 层运行。它每秒可以处理数百万个请求。负载均衡器收到连接请求后,根据默认规则从目标组中选择一个目标。负载均衡器尝试在侦听器配置中指定的端口上打开到所选目标的 TCP 连接。 - 在 Create Network Load Balancer(创建 Network Load Balancer)页面上,进行以下配置: Load balancer name(负载均衡器名称):myELB VPC:从下拉菜单中选择 Lab VPC(实验 VPC) Mappings(映射):选择这两个可用区 安全组:从下拉菜单中选择 ELBSecurityGroup - 在 Listeners and routing(侦听器和路由)部分,选择 Create target group (创建目标组)。 附加信息:向目标组注册 Network Load Balancer 的目标。默认情况下,负载均衡器使用为目标组指定的端口和协议向已注册目标发送请求。 - 在 Basic configuration(基本配置)部分,进行以下配置: Target group name(目标组名称):lb-targets 协议: TCP VPC:确保选中 Lab VPC(实验 VPC)。 - 展开 Advanced health check settings(高级运行状况检查设置),然后进行以下配置: Healthy threshold(正常阈值):2 Interval(间隔):10 seconds 如图: ![alt text](./figures/Target_group_configuration.png) 附加信息:负载均衡器使用指定的端口、协议和 ping 路径,每 HealthCheckIntervalSeconds 秒向每个注册目标发送一次运行状况检查请求。它等待目标在响应超时时间内响应。如果运行状况检查超过连续失败响应的阈值,负载均衡器将使目标停止服务。当运行状况检查超过连续成功响应的阈值时,负载均衡器将使目标恢复服务。 注意:由于您已将 Healthy threshold(正常阈值)设置为 2,并且已将间隔设置为 10 秒,因此您的实例报告正常状态至少需要 20 秒。默认情况下,每个负载均衡器节点仅将请求路由到其可用区中的正常目标。 - 在屏幕底部,选择 Next(下一步)。 - 在 Available instances(可用实例)部分,选择这两个 EC2 实例。 - 选择 Include as pending below(包含如下待处理事项)。 警告:确保选择 Include as pending below(包含如下待处理事项)。 - 选择 Create target group(创建目标组)。 - 导航到用于创建负载均衡器的选项卡。 - 在 Listeners and routing(侦听器和路由)部分,选择 刷新按钮。 - 从下拉列表中,选择您先前创建的 lb-targets 目标组。 查看负载均衡器配置 - 选择 Create load balancer(创建负载均衡器) - 选择 View load balancer(查看负载均衡器)。 - 在负载均衡器的 Details(详细信息)选项卡中,将 DNS 名称复制到您的文本编辑器。 注意:您的 DNS 名称应类似于 myELB-4e009e86b4f704cc.elb.us-west-2.amazonaws.com - 在左侧导航窗格中,选择 Target Groups(目标组)。 - 选择 lb-targets 目标组。 - 选择 Targets(目标)选项卡。 - 等待 EC2 实例的状态变为 healthy(正常)。 注意:您可能需要 刷新屏幕才能看到更改。以下是已注册目标的运行状况状态的可能值: initial(初始):负载均衡器正在注册目标或正在对目标执行初始运行状况检查 healthy(正常):目标运行正常 unhealthy(不正常):目标未响应运行状况检查或运行状况检查失败 。 unused(未使用):目标未注册到目标组,目标组未在负载均衡器的侦听器规则中使用,或者目标位于没有为负载均衡器启用的可用区中。 draining(注销延迟中):目标正在注销,而且处于注销延迟中 ## 任务 3:测试负载均衡器 测试默认功能 - 在一个新的浏览器标签页中,粘贴 DNS 名称,然后按 Enter 键。 注意:您应看到其中一个 EC2 实例的 HTML 页面。 - 刷新 页面几次。 请注意,显示的是相同的 EC2 实例页面。 附加信息:对于 Network Load Balancer,默认情况下禁用跨区域负载均衡。创建 Network Load Balancer 后,您可以随时启用或禁用跨区域负载均衡。 附加信息:在为负载均衡器启用的可用区中,跨区域负载均衡可以在所有目标之间均匀地分配流量。 测试跨区域负载均衡功能 - 在 AWS 管理控制台的左侧导航窗格中,选择 Load Balancers(负载均衡器)。 - 在 Details(详细信息)部分,选择 Attributes(属性)选项卡。 - 选择 Edit(编辑),然后进行以下配置: - 启用 Cross-zone load balancing(跨区域负载均衡) - 选择 Save changes(保存更改) 等待一两分钟。 返回用于访问负载均衡器的浏览器标签页。 - 刷新 页面几次。 任务完成:您应该看到 Network Load Balancer 现在将您引导至这两个 EC2 实例。 禁用跨区域负载均衡功能 - 在 AWS 管理控制台的左侧导航窗格中,选择 Load Balancers(负载均衡器)。 - 在 Details(详细信息)部分,选择 Attributes(属性)选项卡。 - 选择 Edit(编辑),然后进行以下配置: - 禁用 Cross-zone load balancing(跨区域负载均衡) - 选择 Save changes(保存更改) 等待一两分钟。 - 返回用于访问负载均衡器的浏览器标签页。 - 刷新 页面几次。 ## 任务 4:在故障期间测试负载均衡器 在故障期间测试负载均衡器 - 在 AWS 管理控制台的左侧导航窗格中,选择 Instances(实例)。 - 选择当前为您提供网页服务的 EC2 instance(EC2 实例)。 - 从 Instance state (实例状态)下拉列表中,选择 Stop instance(停止实例)。 - 选择 Stop(停止)。 等待一两分钟。 - 返回用于访问负载均衡器的浏览器标签页。 - 刷新 页面几次。 任务完成:您将看到负载均衡器现在显示另一个实例的网页。 从故障中恢复后测试负载均衡器 - 在 AWS 管理控制台的左侧导航窗格中,选择 Instances(实例)。 - 选择您先前停止的 EC2 instance(EC2 实例)。 - 从 Instance state (实例状态)下拉列表中,选择 Start instance(启动实例)。 等待一两分钟,直到实例完全启动。 注意:您可以选择 刷新按钮来更新状态。 - 在负载均衡器的浏览器标签页中,刷新 页面。 ## 总结 测试了与位于两个不同可用区中的两个 Web 服务器的连接 创建了 Network Load Balancer 测试了负载均衡器的默认功能 启用了跨区域负载均衡并测试了负载均衡器的行为方式 在其中一个 Web 服务器发生故障时测试了负载均衡器的行为 在 Web 服务器恢复后测试了负载均衡器的行为