我有N
Web 应用程序。每个 Web 应用程序由我域中的不同主机名提供服务,并部署到在 AWS 中运行的 2 个实例。换句话说,我有2N
实例,分为运行N
不同 Web 应用程序的两对。
我想设置一个 AWS Elastic Load Balancer,它会根据标Host
头将请求代理到为其提供服务的两个实例之一。是否可以使用单个 ELB 来实现,还是我需要N
为每对实例部署一个 ELB?
答案1
单个 ELB 将流量路由到一组实例,并将传入流量分发到其“后面”的所有实例。它不会根据任何第 7 层流量分析(例如标头)选择性地路由流量Host:
。
你需要一每个 ELB放实例数。正如您所描述的,每个 Web 应用程序都有一个 ELB。
如果你运行 ELB 的主要目的是使用通配符证书卸载 SSL(我有一个像这样设计的系统,其中有几十个应用程序位于 many-different-domains.my-wildcard-cert-domain.com),那么 ELB“背后”的实例可以运行反向代理,如 HAProxy(或其他几种替代方案,如 Varnish),能做出第 7 层路由决策,然后将流量转发到其后面的适当机器子集,这还允许更复杂的负载平衡,并具有为您提供统计数据和流量计数器、聚合和分离的优势。
/-- HAProxy \ /----- instances hosting app #1
ELB ---| >> ----- instances hosting app #2
\-- HAProxy / \----- instances hosting app #n
中间 ^^^^ 实例可以评估Host:
标题(以及其它内容),甚至可以捕获其日志中的会话 cookie 的值以供分析。
此设置还允许我在重叠的实例子集上运行多个应用程序(如果合适),并执行 ELB 本身不直接支持的许多其他操作。如果应用程序过载或不可用,它还会返回自定义“503”页面,而 ELB 本身不会这样做。我在这里描述了 2 个代理服务器,除了您在问题中提到数字 2 之外没有其他特别的原因。我的设置实际上有 3 个,每个可用区域各一个,部署区域也是如此。
答案2
截至 2016 年 8 月,Amazon ELB 提供两种不同类型的负载均衡器:
- 传统负载均衡器将所有流量路由到一组实例,而不考虑应用程序协议内容。以前,这是唯一可用的 ELB 类型。
- 应用程序负载均衡器可以将流量路由到不同的目标群体根据基于 URL 路径的可配置规则。博客文章新功能 – AWS 应用程序负载均衡器提到由多个微服务组成的应用程序作为主要用例,并给出了详细的设置说明。
对于您的用例,应用程序负载均衡器似乎是理想的选择。但是,它限制为 10 条规则,因此只有当您的规则N
不超过 10 条时,它才能轻松工作。
答案3
在您的 ec2 实例列表中,您看到两个实例,对吗?但每个实例上都有许多 Web 应用程序?您使用虚拟主机来部署每个 Web 应用程序吗?
您只需要一个 ELB 即可分摊主机费用。示例:
External request > ELB (based on CNAME pointer) > EC2 Instance.
我认为你最好给我更多关于你的情况,也许我可以帮助你。
问候。
更新
如果您在 EC2 实例上有不同的 Web 应用程序,则需要两个 Elastic Load Balancer (ELB)。每个实例对应一对实例。总共四个实例