使用 HAProxy 配置仅含 2 个节点的负载均衡器

使用 HAProxy 配置仅含 2 个节点的负载均衡器

我对此很陌生,我正在尝试使用带有 2 个 EC2 实例的 HAProxy 为 2 个 Web 服务器配置负载均衡器。假设我只能使用 2 个实例,我是否可以仅使用 2 个节点来连接它?

我目前只有 NodeA(xxx1)和 NodeB(xxx2),我在 NodeA 上设置了 HAproxy 来监听端口 80。我haproxy.cfg 在 NodeA 上的完整版本如下所示。

    global
    log         /dev/log local0
    log         127.0.0.1 local0
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

    errorfile 503 /etc/haproxy/errorfiles/503.http

frontend http-in
    mode http
    bind *:80

    default_backend webservers


backend webservers
    mode http
    balance roundrobin
    server NodeA x.x.x.1 check port 80
    server NodeB x.x.x.2 check port 80

从上面的配置可以看出,负载平衡不起作用,因为我无法在 NodeA 上启动 Apache,因为 HAPorxy 占用了 Port80。并且我只能获得 NodeB 而不能获得 NodeA。

我尝试将 HAporxy 端口更改为监听其他端口:失败。我还尝试将 Apache 端口更改为其他端口,NodeA 看起来类似于

frontend http-in
        mode http
        bind *:80 

        default_backend webservers

    backend webservers
        mode http
        balance roundrobin
        server NodeA x.x.x.1:81 check
        server NodeB x.x.x.2:81 check

但也失败了。

来自 HAProxy 的一些日志

   x.x.x.1:53006 [18/Mar/2019:01:27:57.789] http-in webservers/NodeA 0/0/0/43/43 400 168 - - ---- 6/6/6/6/+1 0/0 "GET / HTTP/1.1"n 
x.x.x.1:53002 [18/Mar/2019:01:27:57.788] http-in webservers/NodeA 0/0/0/43/43 400 168 - - ---- 5/5/5/5/+1 0/0 "GET / HTTP/1.1"n 
x.x.x.1:52998 [18/Mar/2019:01:27:57.788] http-in webservers/NodeA 0/0/0/44/44 400 168 - - ---- 4/4/4/4/+1 0/0 "GET / HTTP/1.1"n 
x.x.x.1:52994 [18/Mar/2019:01:27:57.787] http-in webservers/NodeA 0/0/0/44/44 400 168 - - ---- 3/3/3/3/+1 0/0 "GET / HTTP/1.1"n 
x.x.x.1:52990 [18/Mar/2019:01:27:57.787] http-in webservers/NodeA 0/0/0/45/45 400 168 - - ---- 2/2/2/2/+1 0/0 "GET / HTTP/1.1"n 
x.x.x.1:52986 [18/Mar/2019:01:27:57.786] http-in webservers/NodeA 0/0/0/45/45 400 168 - - ---- 1/1/1/1/+1 0/0 "GET / HTTP/1.1"n 
x.x.x.1:57534 [18/Mar/2019:01:27:52.344] http-in webservers/NodeA 5441/1/0/46/5718 400 168 - - ---- 1/1/0/0/+1 0/0 "GET / HTTP/1.1"n

我不确定我是否理解了正确的概念。

但本质上我想问的是,是否可以仅使用 2 个节点来实现负载平衡(例如,NodeA 运行 HAProxy 和 Apache,Node B 作为辅助服务器)

如果我知道我的概念是否有误或者有没有什么解决方法,我将非常感激。

答案1

您可以这样做,但是如果只有一个节点运行 HAProxy,那么如果该节点发生故障,您将缺乏冗余。

解决当前问题的技巧是让 Web 服务器监听与 HAProxy 监听的标准 HTTP(/s) 端口不同的端口,如第二个示例所示。

为了解决冗余问题,考虑在两个节点上运行 keepalived,并为它们提供一个虚拟 IP 地址来监听。

相关内容