13

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

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

我相信这对于node-http-proxyDistribute来说是可能的,甚至是微不足道的,但我想知道这是否可以通过 HAproxy 和/或 Nginx 来做......我知道亚马逊的弹性负载平衡可能是我最好的选择,但我想自己做(我想从机架空间、EC2、Joyent 和其他可能的实例中生成实例,因为它很方便)。

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

4

3 回答 3

8

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

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

要添加新服务器,您只需在 hosts 文件中为其创建一个条目,它将开始通过健康检查并被添加。

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

于 2012-03-04T22:17:55.453 回答
8

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

于 2014-03-13T21:42:08.747 回答
1

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

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

于 2018-05-03T08:23:10.250 回答