Я новичок в этом, и я пытаюсь настроить балансировщик нагрузки для 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-адрес для прослушивания.