冗余HTTP负载平衡器

有两个Web服务器的冗余和规模简单的情况。

但是,如何使两个Web服务器设置完全冗余? 我可以想到两个解决scheme;

  1. 两个Web服务器,一个负载均衡器负载均衡。 一个额外的负载平衡器的机器。 但负载平衡器将如何冗余?

  2. 两台机器,每台机器运行Web服务器并运行负载均衡器,将负载分散。 有两个机器的DNS入口点。 负载平衡不需要额外的机器。

你们通常如何解决这类问题?

但是,如何使两个Web服务器设置完全冗余?

通常情况下,你不这样做。 使数据库完全冗余,实现无缝故障切换非常困难。 而完全的冗余需要额外的硬件,所以在网站变得更大之前通常不会实现。

您必须考虑会话状态 – 用户login状态,购物车内容等。如何处理?

如果您的服务完全没有状态(fx静态文件服务,每个用户不需要自定义),那么您可以使用DNS Round Robin为您的站点发布2个IP地址,每个服务器一个IP地址。

如果您需要更多地控制故障转移的处理方式,您可以考虑使用2台Web服务器,这两台服务器都通过Windows NLB共享相同的IP地址,或者使用Linux-HA , Keepalived等Linux操作系统 (有几种可能的解决scheme) 。

如果仅限于两台服务器,则可能会比每台计算机上的负载均衡器指向对方的DNS循环更糟糕。 传统上,负载平衡器本身就是一个独立的服务器,具有自己的冗余和故障转移function。

假设硬件负载均衡器,通常可以将它们安装在主动/被动群集中,以便使用其本机configuration进行故障转移。 如果您使用的是软件负载平衡器(不是Microsoft NLB),请查找符合VRRP的虚拟负载平衡器,并使用VRRP处理负载平衡器的故障转移。 如果您使用的是Microsoft NLB,则它将在横向扩展群集中的所有机器上运行,并自动处理机器故障。

http://www.howtoforge.com/high-availability-load-balancer-haproxy-heartbeat-debian-etch

在两个服务器上安装haproxy和heartbeat。 Haproxy将对两个Web服务器进行负载平衡,如果其中一个服务器发生故障,心跳将提供接pipe虚拟IP的故障转移。

通常有两种方法来实现高可用性/可伸缩性故障切换解决scheme。 第一个是在循环DNSlogging上使用短TTL,并与负载均衡器一起使用,第二个是使用硬件或软件解决scheme使用心跳监视和IP地址故障切换。 一些解决scheme使用这两种方法的组合来增加可靠性。

并不是说你应该用现金来做这件事,但是请查看Zeus的ZXTM和GLB解决scheme,以了解商业解决scheme的可能性。 过去我用自己的硬件来使用它们,效果很好。

FWIW,你应该能够在DNSlogging中使用短的TTL,并且在丢失LB的情况下以编程的方式将DNS指向备份的webhead,这样才能够相当可靠。 您可以使用像Zerigo这样的服务来做到这一点,因为他们提供了一个API,您可以点击更改您的logging。 如果你正在寻求优化成本,这是滚动的方式。

似乎有一些解决scheme可以用于Linux,包括构build在LVS之上的解决scheme: http : //www.cyberciti.biz/faq/rhel-centos-fedora-keepalived-lvs-cluster-configuration/ ,但可能会限制您可以部署的位置(如不在AWS上)以及设置,监控和正确实施的额外成本。