是否有一个负载平衡器,可以让我部署时手动取下服务器?

看起来HAProxy不允许这样做。 我们在后端有Tomcat服务器,并计划使用Apache + mod_jk来实现负载平衡。 我们正在考虑改用像Netscaler这样更全面的function,但是我并没有出售,因为我正在寻找的部分function是能够进行无缝部署,在此之前我可以从负载平衡器中移除一个Tomcat服务器重新启动它。

HAProxy允许你通过传递一个命令到统计套接字来禁用服务器。 这将消耗连接(现有的连接到这个服务器将会持续,但是不会有新的连接)。

本页面提供了可用命令的完整摘要: http : //code.google.com/p/haproxy-docs/wiki/UnixSocketCommands

和一个禁用的例子:

echo "disable server <backend_name>/<server_name>" | socat stdio /var/run/haproxy.stat 

其中/var/run/haproxy.stat是命令的UNIX域套接字,在haproxyconfiguration文件中configuration,如下所示:

 global stats socket /var/run/haproxy.stat mode 600 level admin 

与其他全球性select一起。

不是你不需要通过socat在socket上进行通信,你可以像任何其他的UNIX域套接字那样连接到它,这在Python,Perl,PHP,C等方面是非常简单的。为了方便起见,socat主要用在示例中。

如果你使用mod_proxy而不是mod_jk ,Apache可以这样做; mod_proxy_balancer可以与mod_status整合成一个mess-with-balancer-nodes页面。 看到这里 。

我使用LVS(www.linuxvirtualserver.org),它允许您随时更改服务器的重量或将其从旋转中移除。 当我需要在Web服务器上安装更新时非常方便。

只要您的应用程序允许用户会话状态由负载均衡器后面的所有服务器提供,几乎所有负载均衡器都支持这一点。 如果您的应用程序会话粘到用户正在与之通信的物理服务器上,则最好的办法是禁止新连接到要停止服务的服务器,并等待会话全部closures。 根据您的应用程序,这可能是几秒钟或几小时。

NGINX将允许你这样做,并做不公平的负载平衡。

上游定义块允许您设置有关请求将被发送到的上游服务器的各种设置。

  • 此服务器已closures
  • 此服务器仅用于备份,如果有其他服务器启动,请勿使用
  • 如果失败超过X次,请停止使用此服务器
  • 多频繁地重新testing上游,看它是否备份
  • 加权每个服务器,使您能够将stream量引导至容量所在的位置。
  • 使用“ip_hash”,只要客户端启动,客户端就会“粘到”后端。 相同的客户端将始终转到相同的后端,这是一些持久性会话数据不会复制到其他上游的应用程序所要求的

还有proxy_next_upstream设置 ,允许你让NGINX自动尝试不同的后端,如果返回一个不满意的结果。

作为@James Little对socat的build议的替代scheme,您还可以使用hatop连接到HAProxy CLI以运行禁用(或任何其他命令):

hatop -s /var/run/haproxy.stat

然后点击5(在左下方的菜单栏中列为5-CLI)。 这将为您提供一个提示您inputHAProxy命令的提示。