我尝试使用 JBoss 和 Apache 实现高可用性服务。
该架构如下:
Apache
| |
| |
JBoss1 JBoss2
Apache 和 JBoss 之间实现了一个平衡器,它工作正常。有时请求由 JBoss1 接收,有时由 JBoss2 接收,但是如果某个 JBoss 发生故障,平衡器仍会向其发送请求,因此应用程序有时可以工作,有时则不能。
如何实现一项服务,当某个 JBoss 发生故障时,它能够自动将流量重定向到另一个节点?
我尝试使用 heartbeat,但无法解决它。
答案1
它是mod_proxy+mod_proxy_balancer或mod_jk的内置功能。
它们依赖于 AJP 协议:https://community.jboss.org/wiki/UsingModproxyWithJBoss
只需按照本教程操作即可。
下面是 Apache HTTP 配置的示例:
<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/server/default/deploy/jbossweb.sar/server.xml
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="SRVLNX01_node1">
[...]
</Engine>
您还可以查看HA 代理