写点什么

使用 AWS Application Load Balancer 实现基于主机名的路由分发

  • 2019-11-15
  • 本文字数:2942 字

    阅读完需:约 10 分钟

使用AWS Application Load Balancer实现基于主机名的路由分发

负载均衡器在应用架构设计中是重要的组件,负责接收来自客户端的流量,将流量按一定的算法转发给后端的一组实例,并将后端实例的响应再返回给客户端。AWS 提供一款托管的负载均衡服务, Elastic Load Balancer(简称 ELB),ELB 除了能够做负载均衡分发流量之外,还能对后端的实例健康检查,并将流量仅转发给通过健康检查的实例,同时 ELB 还能与自动扩展组(Auto Scaling Group)以及监控服务(CloudWatch)配合,设置根据后端实例 CPU 使用率的高低,流量大小,处理时间长短等指标,自动完成添加或缩减实例数量。


ELB 又分两种,Classic ELB 和 Application Load Balancer(简称 ALB),ELB 的一个重要组件是侦听器,前者支持 4 层和 7 层的协议和端口(TCP,SSL,HTTP,HTTPS),对后端实例按轮询(TCP 协议)或者最少未完成请求数(HTTP 协议)的算法对后端实例进行流量转发。


ALB 是应用层负载均衡器,支持 HTTP/HTTPS 的协议,与 Classic ELB 不同的是,ALB 支持基于请求路径的分发,即根据 HTTP 标头的请求 URL 路径的不同,分发给后端不同的目标组(Target Group)。目标组是一个或多个目标(这里的“目标”可以是 EC2 实例)的集合,通常一组目标运行相同的应用或服务,一个目标可以注册到一个或多个目标组中。在目标组中可以配置运行状况检查,实例监控,等待连接耗尽及粘性会话等等。ALB 中的规则决定了如何将流量路由到后端不同的目标组,每条规则对应一个目标组、条件及优先级,一旦匹配规则,则执行相应的流量路由,比如将请求 URL 中路径是/api 的请求路由给运行 api 服务的目标组,将请求 URL 中路径是/mobile 的访问路由给 mobile 的目标组。


两者的转发模型可见下图。



过去 ALB 仅支持基于请求路径的流量分发,客户为了实现基于主机名的分发往往使用多组 Classic ELB 或 Classic ELB + Nginx 集群的方式,现在 ALB 提供了新功能,即可以基于主机名进行路由分发,详情请参考:


https://aws.amazon.com/cn/elasticloadbalancing/applicationloadbalancer/


接下来,我们将详细介绍如何使用 ALB 完成基于主机名的流量分发。


本例中我们将创建以下资源:


(1)1 个 ALB;


(2)5 个目标组,分别为 api-prod,api-sandbox,mobile-prod,mobile-sandbox,default;


(3)每个目标组注册不同的 EC2 实例,其中 api-prod 目标组将注册两个 EC2 实例;


(4)一个侦听器;


(5)创建基于主机名和路径的分发规则,实现流量的分发。


1、创建目标组



2、输入目标组名称,选择协议(HTTP/HTTPS)及端口,ALB 所在的 VPC,配置运行状况检查(协议,路径,阈值等)。此处我们选择了默认 HTTP,路径/。



3、注册实例


目标组的重要实体是目标(比如说 EC2 实例),在此将实例注册到目标组下面,注意选中实例后点击”添加到已注册”,然后保存。此处我们选中了该目标组对应的实例 ALBDemo_api_prod,ALBDemo_api_prod_2 两个实例。您可以向一个或多个目标组注册多个目标实例以便满足需求。只要注册过程完成且新注册的目标实例通过初始运行状况检查,负载均衡器就会开始将请求路由至此目标。同样,您也可以从目标组取消目标注册。



同理创建 api-sandbox,mobile-prod,mobile-sandbox,default 目标组,此处省略创建过程。


创建完成后,选中目标组,在目标页我们可以看见注册到该目标组的实例的状态,healthy 表示实例正常,另外该状态还有 unhealthy(实例未通过健康检查),initial(实例注册中),unused(无流量传入,该目标组未注册到 ALB)等。



4、创建负载均衡器


下面我们来创建 ALB



5、选择 ELB 类型


这里我们选择应用程序负载均衡器 ALB



6、配置负载均衡器


输入 ALB 名称,模式可选择该 ALB 面向 Internet 或是内部使用;配置侦听器协议,端口,根据需要可以配置多个侦听器,此处我们选择 HTTP/80;同时选择 ALB 部署在哪个可用区及子网,建议多可用区方式部署,同样将应用部署在多可用区,达到高可用的设计目标。



7、配置安全设置


如果侦听器配置了 HTTPS,需要配置证书。使用 HTTPS,ELB 可以完成与客户端的 SSL 安全连接的建立与 SSL 卸载,减轻后端服务器的压力。


如果从 ACM(AWS Certificate Manager)申请过证书,则可以直接选择该证书,也可以自己上传证书到 IAM 或者在此上传证书。由于此次我们仅配置了 HTTP 80 端口侦听器,此处将不配置证书。配置安全证书的截图如下:



8、配置安全组


安全组的概念及用法此处不做复述,我们可以为 ALB 配置安全组,仅允许指定的协议、端口及来源的流量进入 ALB



9、配置路由


这里可以选择”现有目标组”,选择我们前面的创建的 default 目标组。此处只能选择一个目标组,我们可以在创建完成后,对此 ALB 添加编辑规则的时候对应路由规则添加目标组。



10、注册目标



11、审核


创建完成后,可以在负载均衡器的控制台看到该 ALB 的相关描述与信息。



12、配置规则


选中该 ALB,在页面下方的侦听器下按端口选择“查看/编辑规则”。



13、添加/编辑规则


与之前不同的是,现在 ALB 提供了一个规则编辑器。进入规则编辑器后,我们看到的是一条默认规则,并看到目标组是我们前面创建过程中选择的 default 组。点击左上方”+”,可以添加规则。



目前路由规则支持三种方式:


a.基于 URL 路径;


b.基于主机名(New Feature);


c.基于主机名+路径(New Feature);



点击 &,可以实现基于主机名+路径的规则;



添加了 4 条规则,将不同主机及路径的流量分发到不同的目标组,如下:


col 1col 2col 3
规则规则(if)目标组(then)
1路径/sandbox/* &主机名为api.shishuai.techapi-sandbox
2主机名为api.shishuai.techapi-prod
3路径/sandbox/* &主机名为mobile.shishuai.techmobile-sandbox
4主机名为mobile.shishuai.techmobile-prod



通过左上角的添加、编辑、排序、删除可以对规则进行相应的修改与排序,需要注意的是,流量路由匹配规则的时候按规则的顺序匹配,并按最先匹配到的规则执行相应的路由。最多可以添加 75 条规则。每条规则在主机名处支持最多 3 个通配符(”*”或者”?”)。



最后规则配置完成,我们检查下规则是否生效。使用 Route53 DNS 解析服务,将相应的域名(本例中为 api.shishuai.tech 和 mobile.shishuai.tech)CNAME 到该 ALB 的域名(本例中为 ALBDemo-2043343612.us-west-2.elb.amazonaws.com,可在选中该 ALB,在描述页中看到该 DNS 地址)。


本例中每个 EC2 有一个简单的页面,表明自己主机名,以及 instance-id,以此区分是否按规则路由到相应的 EC2。


http://api.shishuai.tech



在 api-prod 目标组,我们注册了两台机器,刷新几次会出现另一台 EC2 的页面。



http://api.shishuai.tech/sandbox/



http://mobile.shishuai.tech



http://mobile.shishuai.tech/sandbox/



综上所述,使用应用负载均衡器基于主机名/路径的流量分发特性,客户可以仅用一组应用负载均衡器就可实现将流量路由给多个后端服务,这可以大大简化客户的架构、减轻运维负担以及优化成本。


作者介绍



王世帅


AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内教育、医疗行业的应用和推广。在加入 AWS 之前曾在国航担任系统工程师,负责存储方案的架构设计,在企业私有云方面有丰富经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/aws-alb-route-distribute/


2019-11-15 08:001510

评论

发布
暂无评论
发现更多内容

鸿蒙系统(HOS)终于上线,微内核操作系统科普

北游学Java

Java 操作系统 微内核

为什么越来越多的人不敢结婚?

徐说科技

婚姻 情感 恐婚

牛哇!阿里用480页笔记直接搞定了微服务44个架构设计模式

Java架构师迁哥

如何构造更好的团队

soolaugust

团队管理 架构

字节架构师分享:如何让代码在级别上提升系统性能

Java架构师迁哥

聪明人的训练(二十八)

Changing Lin

4月日更

【InfoQ 写作平台 1 周年】我和写作平台剪不断的“孽缘”

三掌柜

征稿 InfoQ 写作平台 1 周年

五一啃透这份阿里巴巴Java面试指导手册(泰山版),节后直接面试找工作!

Java架构追梦

Java 阿里巴巴 架构 面试 泰山版

Leveldb解读之三:Write

Jowin

leveldb

视频后期怎么添加AR贴图?一招教你搞定!

奈奈的杂社

视频剪辑 视频后期 剪辑 会声会影

软件IT专业大学生就业意向问卷调查

三掌柜

签约计划 问卷调查

Worktile 权限设计与实现

PingCode研发中心

项目管理 后端 权限管理

HTTP/2做错了什么?刚刚辉煌2年就要被弃用了

学Java关注我

Java 编程 架构 程序人生 计算机

面向软件 IT 专业的高校大学生择业现状问卷调研

小诚信驿站

行业调研

v02.06 鸿蒙内核源码分析(进程管理) | 谁在管理内核资源 | 百篇博客分析HarmonyOS源码

鸿蒙研究站

鸿蒙内核源码分析

新一代云网采控之采集架构篇

鲸品堂

架构 部署 场景 云网络 应用

大学生IT就业方向以及就业培训的调查问卷

麦洛

调查报告 调查采访能力考核 问卷调查

嵌入式硬件开发最新技术

cdhqyj

嵌入式 单片机

网易云课堂个性化推荐实践与思考

有道技术团队

推荐系统

IT之家专访庄秉翰:未来全球5G vRAN将达90%,英特尔5G布网参与度非常高

E科讯

Alibaba内部培训Spring源码全集分享:脑图+视频+文档

Java架构师迁哥

阿里云 RTC QoS 弱网对抗之 LTR 及其硬件解码支持

阿里云CloudImagine

阿里云 音视频 WebRTC 视频解码 视频云

政采云:数据可视化探索之SpreadJS 表格控件

葡萄城技术团队

精彩3000字!给讲得明明白白:配置 logback

比伯

Java 编程 程序员 架构 计算机

网络协议学习笔记 Day7

穿过生命散发芬芳

网络协议 4月日更

如何快速将 APICloud 应用转换为微信公众号?

YonBuilder低代码开发平台

微信公众号 APICloud

五一小长假最新产物:阿里巴巴面试的参考指南(泰山版)

学Java关注我

Java 编程 程序员 架构 计算机

圆梦阿里之后,我收集整理了这份“2021春招常见面试真题汇总”

Java 程序员 架构 面试

鹅厂首推569页Netty+Redis+ZK+高并发的笔记,开启面试必杀技

Java架构师迁哥

架构实战营模块2作业指导

华仔

架构实战营 #架构实战营

IT专业本科生毕业选择【就业】/【攻读硕士】调查问卷

Aldeo

考核 大学生毕业 问卷调查

使用AWS Application Load Balancer实现基于主机名的路由分发_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章