Я пробовал реализовать службу высокой доступности с JBoss и Apache.
Архитектура:
Apache
| |
| |
JBoss1 JBoss2
Балансировщик реализован от Apache до JBoss'ов, и он работает нормально. Иногда запрос принимает JBoss1, а иногда JBoss2, однако, если какой-то Jboss выходит из строя, балансировщик все равно отправляет ему запросы, поэтому приложение иногда работает, а иногда нет.
Как я могу реализовать службу, которая обнаруживает, что если какой-то JBoss не работает, он автоматически перенаправляет трафик на другой узел?
Я пробовал с биением, но не могу решить.
Это встроенная функция mod_proxy + mod_proxy_balancer или mod_jk.
Они полагаются на протокол AJP: https://community.jboss.org/wiki/UsingModproxyWithJBoss
Просто следуйте этому руководству.
Вот пример конфигурации HTTP Apache:
<VirtualHost *:80>
ServerName web-gui-acceptance.myorg.com
ServerAlias web-gui-acceptance
ProxyRequests Off
ProxyPass /web-gui balancer://jbosscluster/web-gui stickysession=JSESSIONID nofailover=On
ProxyPassReverse /web-gui http://srvlnx01.myorg.com:8080/web-gui
ProxyPassReverse /web-gui http://srvlnx02.myorg.com:8080/web-gui
<Proxy *>
AuthType Kerberos
[...]
</Proxy>
<Proxy balancer://jbosscluster>
BalancerMember ajp://srvlnx01.myorg.com:8009 route=SRVLNX01_node1
BalancerMember ajp://srvlnx01.myorg.com:8009 route=SRVLNX02_node1
ProxySet lbmethod=byrequests
</Proxy>
</VirtualHost>
И для каждого экземпляра JBoss:
vi $ JBOSS_HOME / сервер / по умолчанию / развертывание / jbossweb.sar / server.xml
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="SRVLNX01_node1">
[...]
</Engine>
Вы также можете посмотреть HA прокси