以编程方式将节点添加到负载均衡器,如Haproxy?

时间:2012-02-15 19:44:11

标签: proxy nginx load-balancing reverse-proxy haproxy

我非常肯定这个问题已经解决了,但我找不到任何关于它的信息......

sysadmins如何以编程方式将新节点添加到现有且正在运行的负载均衡器?假设我有一个负载均衡器正在运行并已经在两个EC2实例之间说我的API服务器,突然出现流量峰值,我需要负载均衡器中的第三个节点但是我睡着了...如果我会很好有什么监控可能是RAM使用情况和一些关键性能指标告诉我何时应该有另一个节点,如果它可以单独向负载均衡器添加一个新节点,那就更好了......

我确信这对于node-http-proxydistribute来说是可能的,甚至是微不足道的,但我想知道这是否可以与HAproxy和/或Nginx一起使用。我知道亚马逊的弹性负载平衡可能是我最好的选择,但我想自己做(我想从rackspace,EC2,Joyent以及其他可能的方便产生实例)。

再一次,产生一个节点很容易,我想知道如何将它添加到haproxy.cfg或与Nginx类似的东西,而无需重新加载整个代理,并以编程方式进行。 Bash脚本编写是我最好的选择,但它仍然需要重新加载整个代理,这是不好的,因为它失去了连接......

3 个答案:

答案 0 :(得分:8)

你有几个问题。对于“在不重新启动的情况下将节点添加到haproxy”:

我为类似问题所做的是使用服务器名称预填充配置文件。 web01,web02 ... web20即使我当时只有5个Web服务器。然后在我的hosts文件中,我将它们映射到Web服务器的实际ips。

要添加新服务器,只需在hosts文件中为其创建一个条目,它就会开始通过运行状况检查并添加。

对于自动编排,它实际上取决于您的环境,您可能必须编写适合您需求的自定义内容。有一些付费解决方案(Scalr可以想到)来处理编排。

答案 1 :(得分:7)

我的所作所为:我在haproxy.cfg的后端部分有一行说:

# new webservers here

使用sed脚本我用以下内容更新haproxy.cfg:

  sed -i -e "/new webservers here/a\    server $ip_address $ip_address:12080 check maxconn 28 weight 100"

然后重新加载haproxy。透明地工作。

答案 2 :(得分:0)

HAProxy有一个运行时API,允许您动态执行此操作。

请阅读官方文件: Dynamic Configuration HAProxy Runtime API