Как настроить одни и те же контекстные приложения для использования разных машин с ModCluster и Wildfly10
Я пытаюсь использовать ModCluster для балансировки нагрузки некоторых серверов. У нас есть один EAR, который должен быть сбалансирован по нагрузке различными DNS.
У нас есть этот сценарий. Нам необходимо поддерживать тот же контекст 'system1' из-за обратной совместимости
- 4 сервера для urla.com.br/system1/
- 2 сервера для urlb.com.br/system1/
Используя Wildfly 10.1.0 в доменном режиме, они разделены двумя группами серверов: URLA и URLB. Они имеют один и тот же профиль (URL-HA) и привязки сокетов (URL-HA-SOCKET).
У меня есть Apache с mod_cluster с минимальной конфигурацией.
LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so
Listen 10.90.0.13:7777
<VirtualHost 10.90.0.13:7777>
<Directory />
Require all granted
</Directory>
<Location />
Order deny,allow
Allow from all
</Location>
ManagerBalancerName mybalancer
ServerAdvertise on
EnableMCPMReceive On
<Location /mod_cluster-manager>
SetHandler mod_cluster-manager
Order deny,allow
Allow from all
</Location>
</VirtualHost>
Когда я http://10.90.0.13:7777/mod_cluster-manager, я вижу 6 серверов, зарегистрированных в контексте system1/
, Кстати, они используют один и тот же EAR-файл.
Но это не идеальный сценарий для нас. Пользователи, обращающиеся к urla.com.br/system1/, не могут использовать машины urlb.com.br/system1/ и наоборот.
Единственный способ найти это (я еще не тестировал...) - создать один профиль для каждой группы серверов, поэтому я могу настроить другую группу распределения нагрузки в:
Профиль> URLA-HA / URLB-HA > Подсистемы> ModCluster.
Но в этом случае мы продублировали все конфигурации, которые существуют в профиле (DataSources, Queues, MailSession и т. Д.). Это больно поддерживать.
Итак, какие варианты у нас есть в моем случае? Спасибо!
1 ответ
Я нашел решение для моей проблемы, используя только один профиль Wildfly.
Для этого я использовал два балансировщика и использовал ProxyPass для использования конкретного балансировщика.
Wildfly: На URL администратора консоли контроллера домена перейдите по адресу:
Конфигурация: Профили Профиль: URL-HA Подсистема: ModCluster
На вкладке Реклама измените значение Балансировщика:
${projectcluster.modcluster.balancer:mybalancer}
Добавьте системные свойства к обеим группам серверов
Время выполнения -> Группы серверов -> URLA -> Просмотр
На вкладке "Свойства системы" добавьте:
Key 'projectcluster.modcluster.balancer' value 'first'
Key 'jboss.modcluster.multicast.address' value '224.0.2.108'
Время выполнения -> Группы серверов -> URLB -> Просмотр
На вкладке "Свойства системы" добавьте:
Key 'projectcluster.modcluster.balancer' value 'second'
Key 'jboss.modcluster.multicast.address' value '224.0.2.108'
После этого перезапустите серверные группы URLA и URLB
Apache Используя пример Apache conf по вопросу:
...
...
ManagerBalancerName mybalancer
ServerAdvertise on
EnableMCPMReceive On
# Defined on Wildfly
AdvertiseGroup 224.0.2.108:23364
<Location /mod_cluster-manager>
SetHandler mod_cluster-manager
Order deny,allow
Allow from all
</Location>
</VirtualHost>
Listen 10.90.0.13:8001
<VirtualHost 10.90.0.13:8001>
ProxyPass / balancer://first stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://first
</VirtualHost>
Listen 10.90.0.13:8002
<VirtualHost 10.90.0.13:8002>
ProxyPass / balancer://second stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://second
</VirtualHost>
Весь запрос 10.90.0.13:8001/system1 будет отправлен первому балансировщику, а 10.90.0.13:8002/system1 - второму балансировщику.
И это все.