HAProxy - маршрутизация на основе URL с балансировкой нагрузки
Я новичок в HAProxy, и у меня есть вопрос о конфигурации HAProxy, которая помогает мне принять ключевое решение в правильном подходе. Это очень поможет мне решить архитектуру.
У меня 3 приложения. Скажем app1
, app2
, app3
.
Каждое приложение отличается URL-адресами следующим образом:
www.example.com/app1/123 -> app1
www.example.com/app2/123 -> app2
www.example.com/app3/123 -> app3
Я планирую иметь 2 экземпляра каждого приложения в двух разных регионах:
Region 1 - app1, app2, app3
Region 2 - app1, app2, app3
Я вижу два метода для настройки, но я не уверен, какая из них лучше всего:
-
Метод 1. Попросите HAProxy1 сначала дифференцировать запросы, используя шаблоны url.
Запросы от HAProxy1 будут перенаправлены на другой HAProxy-сервер, который настроил отдельные приложения (в этом случае 3 HAProxy-сервера) для балансировки нагрузки.
-
Метод 2. У вас есть один большой HAProxy-сервер, который выполняет оба способа, как указано в методе 1. То есть, имеет конфигурацию для разделения запросов в зависимости от URL-адреса, а затем передает каждый запрос через индивидуальный фильтр, как и все, что настроено для каждого приложения для балансировки нагрузки.
Я не уверен, поддерживается ли метод 2 в haproxy. Любые идеи или предложения заслуживают высокой оценки. Пожалуйста, поставьте немного света.
Ответы
Ответ 1
Вы можете отделить запросы на основе URL и балансировки нагрузки с помощью одного HAProxy-сервера.
У вашей конфигурации будет что-то вроде этого:
frontend http
acl app1 path_end -i /app1/123 #matches path ending with "/app/123"
acl app2 path_end -i /app2/123
acl app3 path_end -i /app3/123
use_backend srvs_app1 if app1
use_backend srvs_app2 if app2
use_backend srvs_app3 if app3
backend srvs_app1 #backend that lists your servers. Use a balancing algorithm as per your need.
balance roundrobin
server host1 REGION1_HOST_FOR_APP1:PORT
server host2 REGION2_HOST_FOR_APP1:PORT
backend srvs_app2
balance roundrobin
server host1 REGION1_HOST_FOR_APP2:PORT
server host2 REGION2_HOST_FOR_APP2:PORT
backend srvs_app3
balance roundrobin
server host1 REGION1_HOST_FOR_APP3:PORT
server host2 REGION2_HOST_FOR_APP3:PORT
Более подробную информацию можно найти на странице .