我是新来的负载平衡,我想知道是否有可能使用多个负载平衡器redirectstream量到我的应用程序服务器。 我真的不明白如何做到这一点。 一个域名不能与某个服务器的IP地址一一对应(在这个例子中是一个负载均衡器的IP地址)? 如果每个负载均衡服务器具有不同的IP,那么两个负载均衡器(或10个负载均衡器或50或100)是如何接收请求的?
使用循环法DNS对于高可用性来说并不是很好 – 如果一台服务器脱机,客户端仍然会尝试连接到它并等待超时。
还有其他的方法来实现这一点。
1)主动/被动负载均衡器
基本上一个负载平衡器处理一个IP地址的所有stream量。
如果该平衡器失效,被动节点跳入并接pipeIP。
请记住,负载平衡器几乎只是转发stream量,所以对于中小型网站,这可以解决。
2)主动/主动负载平衡器
在两个(或更多)负载均衡器上configuration相同的stream量IP。
传入stream量发送到所有负载均衡器,但algorithmselect哪个平衡器应该响应,所有其他人丢弃该stream量。
简单的想法是,你有两个负载平衡器:
当请求IP以偶数结尾时,负载均衡器A应答,否则负载均衡器B应答。
当然你的基础设施必须支持这个,并且由于stream量被发送而被丢弃,所以会有开销。
更多信息,例如: http : //community.brocade.com/t5/SteelApp-Docs/Feature-Brief-Deep-dive-on-Multi-Hosted-IP-addresses-in-Srayray/ta-p/73867
负载平衡器的高可用性通常使用虚拟IP地址 (VIP)协议来实现,该协议允许多个主机(即负载均衡器)以多种可能的方式之一应答一个公共IP地址(主动/被动,主动/主动的变化) 。
有很多这样的协议,我常见的负载平衡器中最常见的是VRRP和NLB (以及许多在设备上的不起眼的黑盒子协议)。 扩展到路由器和防火墙也可能遇到CARP , HRSP , GLSP等。
这种策略对于DNS负载平衡具有许多好处,这是一个更简单的策略(在另一个答案中将考虑这一点)。
DNS负载平衡负担例如:
对于HA使用虚拟IP协议,可以有以下select:
只有你知道哪个策略和协议最适合你的情况。
要求:有一个实用的解决scheme适用于云或任何types的环境,无法访问硬件负载平衡器,BGP协议和所有的东西。
申请人的收入申请号码是未知的,但是应该足够高以满足增加的负荷预期而不用担心。
让我们find一个类似负载types的应用程序,比如日志logging存储和search应用程序。 我find了一个 。
他们想要什么:
他们尝试和学习ELB的是什么:
他们为什么selectRoute53:
鉴于我们巨大的日志量,不可预知的变化以及业务持续增长,Route 53成为Loggly利用高性能收集器的最佳途径。 它与收集器的核心目标保持一致:以零损失的networking线速度收集数据,使我们能够从Loggly使用的所有AWS服务的弹性中受益。
这个特殊的例子表明,在一些情况下(日志采集器,广告服务或类似的)负载均衡器是多余的,“DNS健康检查循环解决scheme”很好地工作。
让我们来看看AWS 说什么重新DNS故障转移:
通过DNS故障转移,Route 53可以检测到您的网站中断,并将最终用户redirect到您指定的备用或备份位置。 路由53 DNS故障切换依赖于运行状况检查 – 定期向全球多个位置的应用程序端点发出Internet请求,以确定应用程序的每个端点是启动还是closures。
该技术也使得ELB(不需要,只是为了便于说明)更加健壮,同样基于RR +健康检查:
Route 53 DNS Failover通过在幕后集成ELB来处理所有这些故障情况。 启用后,Route 53将自动configuration并pipe理单个ELB节点的运行状况检查。
现在让我们看看它是如何在幕后工作的。 显而易见的问题是如何处理DNScaching:
但是,如果客户端和Route 53之间的所有层都不遵守TTL,那么DNScaching仍然可能成为一个问题(请参阅我们之前的post,其中“long tail”问题已经涵盖)。然后,您可以应用“caching清除”技术:发送一个请求到一个唯一的域
("http://<unique-id>.<your-domain>")
并定义一个通配符资源
Record "*.<your-domain>" to match it.
Algolia 引入了 “客户端重试策略”,如果你的客户端(你的情况下的JS)能够处理这个问题,
我们最终在我们的API客户端实现了一个基本的重试策略。 每个API客户端都是为了能够访问三台不同的机器而开发的。 三个不同的DNSlogging代表每个用户:USERIDID-1.algolia.io,USERID-2.algolia.io和USERID-3.algolia.io。 我们的第一个实现是随机select其中一条logging,然后在发生故障的情况下用不同的logging重试。