【问题标题】:Programmatically add nodes to a load balancer like Haproxy?以编程方式将节点添加到像 Haproxy 这样的负载均衡器?
【发布时间】:2012-03-07 04:40:39
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这是对该问题的更好和实际的答案。这应该被接受
    【解决方案2】:

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

    【讨论】:

    • 这是推荐的方法吗?对我来说似乎不实用。虽然,它有效。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 你以前试过这个吗?我试图在 HAProxy 1.8 上这样做,并明确更改主机文件修改了 HAProxies 行为。我什至验证了通过更改主机文件可以从 HAProxy 完全访问服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    相关资源
    最近更新 更多