好,这是前一段时间被问到的,我迟到了。尽管如此,这里还是要添加一些东西。
杰基,你几乎钉牢了。您的插图显示了在大多数中小型安装中如何处理负载平衡。
您应该阅读Nakedible链接的Willy Tarreau的负载平衡介绍。它仍然有效,并且是一个很好的介绍。
您需要考虑这些如何满足您的需求:
- TCP / IP级别的负载平衡器(Linux Virtual Server等)。每个连接开销最低,速度最高,无法“看到” HTTP。
- HTTP级别的负载平衡器(HAProxy,nginx,Apache 2.2,Pound,Microsoft ARR等)。较高的开销,可以查看HTTP,可以gzip HTTP,可以执行SSL,可以执行粘性会话负载平衡。
- HTTP反向代理(Apache Traffic Server,Varnish,Squid)。可以将可缓存的对象(某些网页,css,js,图像)存储在RAM中,并将它们转发到后续客户端,而无需后端Web服务器。通常可以做一些与L7 HTTP负载平衡器相同的事情。
还有第二个平衡器,因为我确信平衡器有时也会需要帮助。
好吧,当然。但是负载均衡很简单,通常单个负载均衡器可以快速运行。我链接到这篇文章,在网络上引起了不小的关注,仅作为单个现代服务器可提供的性能标准的一个示例。在需要之前,请勿使用多个LB。当您需要通用方法时,最前端是IP级别的负载均衡器(或DNS Round Robin),而HTTP级别的负载均衡器则是代理和Webapp服务器。
提供有关“平衡器”应该是什么的帮助以及有关如何设置它们的最佳实践。
故障点是会话状态处理,某种程度上是故障状态行为。设置负载均衡器本身比较简单。
如果您仅使用2-4个后端Webapp服务器,则基于原始IP地址的静态散列是可行的。这避免了Webapp服务器之间共享会话状态的需要。每个webapp节点看到总流量的1 / N,并且在正常操作中,客户到服务器的映射是静态的。但是,它不适用于较大的安装。
从最佳意义上讲,两种最佳负载均衡算法是循环负载均衡和真正的随机负载均衡 ,它们在高负载下甚至负载分配均具有良性行为。这两个都要求您的Web应用程序在webapp节点上具有可用的全局会话状态。如何完成此操作取决于webapp技术堆栈。但是通常可以使用标准解决方案。
如果静态散列或共享会话状态都不适合您,则通常选择“ 粘性会话 ”负载平衡和每服务器会话状态。在大多数情况下,这很好用,这是一个完全可行的选择。
平衡器将查看每个apache实例上有多少个连接(通过内部IP或永恒IP的某些配置列表),并平均分配连接
是的,某些网站使用此功能。存在的许多不同的负载平衡算法有许多名称。如果您可以选择轮循或随机(或加权轮循,加权随机),则出于上述原因,我建议您这样做。
最后一件事:不要忘记许多厂商(F5,Cisco和其他高端厂商,fx Coyote Point和Kemp Technologies以更合理的价格)提供成熟的负载平衡设备。