HAProxy 上的哪些设置需要与 AWS ALB(应用程序负载均衡器)配合使用?

Posted

技术标签:

【中文标题】HAProxy 上的哪些设置需要与 AWS ALB(应用程序负载均衡器)配合使用?【英文标题】:What settings on HAProxy needed to work with AWS ALB (Application Load Balancer)? 【发布时间】:2017-12-31 08:36:27 【问题描述】:

目前,我们有 200 个容器(几个不同的应用程序)在 mesos-marathon 集群中运行。这是 HAproxy 实例的背后,适用于 HTTP/HTTPS 协议。

互联网 --> AWS ELB --> HAProxy --> Docker 容器

现在我们需要让一个现有的应用程序在 WEBSOCKET 协议上运行。我们正在考虑添加新的 AWS ALB 来实现这一目标。因此设置将像

        (WebSocket)
Internet --> new AWS ALB --> HAProxy --> Docker containers

        (HTTP/S)
Internet -->  AWS ELB  --> HAProxy --> Docker containers

我们需要进行什么设置才能使 HAproxy 与当前的 HTTP/S 以及新的 WEBSOCKET 一起工作?

【问题讨论】:

【参考方案1】:

服务器可以处理每个 IP 地址的 65,536 个套接字。所以 通过添加额外的网络可以轻松扩展数量 与服务器的接口。同时,跟踪非常重要 服务器上有多少连接。一旦超过限制, 其他 TCP 连接可能会出现很多问题(例如,它不是 可以通过 ssh 连接到服务器)。所以限制是个好主意 应用程序代码中每个节点的 WS 连接。

要让 HAProxy 处理超过 65k 的连接,我们应该通过以下步骤::

    创建一堆私有 IP 地址。为此,请选择您的亚马逊 实例 -> 操作 -> 网络 -> 管理私有 IP 地址。我们 添加了 3 个 IP 地址:192.168.1.1、192.168.1.2、192.168.1.3。只是 请记住,IP 应与您的真实 IP 位于同一子网中 应用服务器。

    通过 SSH 连接到您的 HAProxy 实例并运行以下命令:

    $> ifconfig eth0:1 192.168.1.1

    $> ifconfig eth0:2 192.168.1.2

    $> ifconfig eth0:3 192.168.1.3

这将为实例添加 3 个虚拟网络接口。

    配置 HAProxy。这是 haproxy.cfg 文件中 3 的部分 接受 WS 连接的节点:

    听 erlang_front :8888

    mode        http
    
    balance     roundrobin
    
    timeout connect 1s
    
    timeout queue 5s
    
    timeout server 3600s
    
    option httpclose
    
    option forwardfor
    
    server      xxxxx-1 192.168.0.1:8888  source 192.168.1.1
    
    server      xxxxx-2 192.168.0.2:8888  source 192.168.1.2
    
    server      xxxxx-3 192.168.0.3:8888  source 192.168.1.3
    

现在 HAProxy 可以处理超过 65,536 个 WebSocket 连接,并且可以通过添加虚拟网络接口轻松增加连接限制。此外,它可以相当快地建立新的连接。

另请参考this Blog Post

【讨论】:

【参考方案2】:

听起来您将从使用新的网络负载均衡器而不是经典的弹性负载均衡器或应用程序负载均衡器中受益。

NLB 每秒可以处理(根据 AWS)数十百万个请求,并支持长寿命连接。

【讨论】:

以上是关于HAProxy 上的哪些设置需要与 AWS ALB(应用程序负载均衡器)配合使用?的主要内容,如果未能解决你的问题,请参考以下文章

如果我在 Cloudfront 上启用了 SSL,AWS ALB 是不是需要 SSL?

AWS ECS ALB 错误(请求超时)

AWS NLB 到 ALB IP 白名单

Netflix Zuul/Ribbon/Eureka 与 AWS ELB/ALB 和 ECS

如何使 AWS ALB 将请求源发送到 lambda

带有 ALB 的 AWS Elastic Beanstalk:节点 Websocket 超时