看起来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将允许你这样做,并做不公平的负载平衡。
上游定义块允许您设置有关请求将被发送到的上游服务器的各种设置。
还有proxy_next_upstream设置 ,允许你让NGINX自动尝试不同的后端,如果返回一个不满意的结果。
作为@James Little对socat的build议的替代scheme,您还可以使用hatop连接到HAProxy CLI以运行禁用(或任何其他命令):
然后点击5(在左下方的菜单栏中列为5-CLI)。 这将为您提供一个提示您inputHAProxy命令的提示。