Назад | Перейти на главную страницу

Настройка Load Balancer всего с 2 узлами с HAProxy

Я новичок в этом, и я пытаюсь настроить балансировщик нагрузки для 2 веб-серверов с использованием HAProxy с 2 экземплярами EC2. Скажем так, я могу работать только с 2 экземплярами, могу ли я подключить его только к 2 узлам?

В настоящее время у меня есть только NodeA (x.x.x.1) и NodeB (x.x.x.2), я настроил свой HAproxy на NodeA, прослушивая порт 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

как видно из конфигурации выше, балансировка нагрузки не работает, потому что я не могу запустить свой Apache на NodeA, потому что 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, узел B в качестве вторичного сервера)

Был бы признателен, если бы моя концепция была неправильной или какое-либо обходное решение с этой настройкой.

Вы можете это сделать, но если только один узел работает с HAProxy, вам не хватит избыточности, если этот узел выйдет из строя.

Уловка для решения вашей непосредственной проблемы состоит в том, чтобы веб-сервер прослушивал порт, отличный от стандартного порта (ов) HTTP (/ s), который прослушивает HAProxy, как во втором примере.

Чтобы решить вопрос с избыточностью, взгляните на выполнение keepalived на обоих узлах, предоставляя им виртуальный IP-адрес для прослушивания.