如何为JBoss AS 5configuration故障转移?

我目前是我公司的一名实习生。 我的老板基本上要求我从一个JBoss AS执行到另一个的故障转移,只是为了validation概念。 不需要负载均衡,因为我只需要显示1个连接到JBoss 1的客户端,执行故障转移,以及客户端将自动连接到JBoss 2。

截至目前,我能够通过使用来自运行Windows的不同terminal的“ran.bat -c all”对2个JBoss AS进行集群。 而现在,这是我的问题

1)我应该如何configurationJBoss的故障转移

2)我应该写在JBoss上的最简单,最快速的应用程序是什么,以便JBoss能够执行从1个JBoss到另一个的故障转移?

任何指导将不胜感激,并提前多less感谢。

凯文

你需要在集群前面有一个apache或iis。

基本上你使用mod_jk,mod_proxy_ajp或mod_cluster来pipe理会话的故障转移和粘性。

现在让我们假设你有两个jboss服务器(192.168.1.2和192.168.1.3)和一个apache 2.2.x,并且为了简单起见你想使用mod_jk(如果你想要2个apach在http层做HA,你需要一个负载平衡器的某种)。

首先你下载mod_jk 1.2.30,因为它提供了更好的节点失败节点检测能力。 并把它放到apache server_root的模块目录中。

那么你去httpd.conf并添加:

LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so 

接下来你要做的就是创build一个名为workers.properties的文件,内容如下

 worker.list=loadbalancer,status worker.template.port=8009 worker.template.type=ajp13 worker.template.ping_mode=A worker.template.reply_timeout=90000 worker.template.socket_connect_timeout=10000 worker.template.connection_pool_size=150 worker.template.socket_keepalive=true worker.node1.reference=worker.template worker.node1.host=192.168.1.2 worker.node2.reference=worker.template worker.node2.host=192.168.1.3 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=node1,node2 worker.loadbalancer.sticky_session=True worker.status.type=status 

然后在httpd.conf文件中添加以下几行:

 JkWorkersFile conf/workers.properties JkWatchdogInterval 60 JkMount /* loadbalancer JkLogFile logs/mod_jk.log 

然后转到192.168.1.2的jbossconfiguration

在文件JBOSS_HOME / server / all / deploy / jbossweb.sar / server.xml中

 <Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1"> 

并replace或修改:

 <Connector protocol="AJP/1.3" port="8009" address="${jboss.bind.address}" redirectPort="8443" /> 

有了这个:

 <Connector port="8009" address="${jboss.bind.address}" protocol="AJP/1.3" emptySessionPath="true" enableLookups="false" redirectPort="8443" maxThreads="200" connectionTimeout="600000" /> 

然后在去192.168.1.3的jbossconfiguration

在文件JBOSS_HOME / server / all / deploy / jbossweb.sar / server.xml中

 <Engine name="jboss.web" defaultHost="localhost" jvmRoute="node2"> 

并replace或修改:

 <Connector protocol="AJP/1.3" port="8009" address="${jboss.bind.address}" redirectPort="8443" /> 

有了这个:

 <Connector port="8009" address="${jboss.bind.address}" protocol="AJP/1.3" emptySessionPath="true" enableLookups="false" redirectPort="8443" maxThreads="200" connectionTimeout="600000" /> 

说明:连接器标记中的更改将web容器中的线程限制为200(即,这是同时发生的请求能够pipe理的最大数量)connectionTimeout确保如果客户端closures连接(这是“closures浏览器“)该线程在600秒后失效。

您可以在jboss团队创build的这个appspot应用程序中find这些参数的大小: lbconfig.appspot.com

安全考虑事项:通过从deploy文件夹中删除jmx-console.war和pipe理目录或按照本文档中的说明来保护或禁用jmx控制台和/或Web控制台

你可以在jboss wiki中find更多关于负载平衡的信息,mod_jk,mod_cluster

Jboss不支持http LB. 每个节点都在自己的端口上侦听。 http会话被复制/分发。 如果你的老板坚持,你可以使用HAJNDI智能客户端代理,而不是http。 简单地从您的客户端应用程序启动命名上下文到HAJNDI端口(1101),查找您的EJB3应用程序并调用任何远程方法。 当连接的节点closures时,智能代理将知道切换。