以编程方式将节点添加到像Haproxy一样的负载均衡器?

我很确定这个问题已经解决了,但是我找不到任何关于它的信息。

系统pipe理员如何以编程方式将新节点添加到现有的正在运行的负载均衡器? 比方说,我有一个负载平衡器运行,并且已经在两个EC2实例之间平衡说我的API服务器,突然间有一个stream量高峰,我需要负载平衡器中的第三个节点,但我睡着了…如果我有些东西可能会监测内存使用情况和一些关键性能指标,告诉我何时应该有另一个节点,甚至可以更好地向负载平衡器添加新节点…

我相信,这是可能的,甚至无关节点http代理和分发 ,但我想知道这是可能与HAproxy和/或Nginx做…我知道亚马逊的弹性负载平衡可能是我最好的select,但我想自己做(我想从rackspace,EC2,Joyent和其他可能的其他人,因为它很方便)产生的实例。

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

你在那里有几个问题。 对于“将节点添加到haproxy而不重新启动”:

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

要添加新的服务器,只需在hosts文件中为它创建一个条目,它将开始传递健康状况检查并添加。

对于自动编排,它实际上取决于你的环境,你可能不得不写一些适合你的需求的自定义。 有付费的解决方案(Scalr想到)来处理业务流程。

我做的是:我在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。 透明地工作。