如何为 JBoss AS 5 配置故障转移?

如何为 JBoss AS 5 配置故障转移?

我目前是公司的实习生。我的老板基本上希望我执行从一个 JBoss AS 到另一个 JBoss AS 的故障转移,只是为了证明概念。不需要负载平衡,因为我只需要显示连接到 JBoss 1 的 1 个客户端、执行故障转移,然后该客户端将自动连接到 JBoss 2。

到目前为止,我能够使用来自运行 Windows 的不同终端的“ran.bat -c all”来集群 2 个 JBoss AS。现在,我的问题如下

1)我应该如何为 JBoss 配置故障转移

2)我应该编写哪个最简单、最快的应用程序来将其托管在 JBoss 上,以便 JBoss 可以从一个 JBoss 执行到另一个 JBoss 的故障转移?

如能得到任何指导我将不胜感激,并提前致谢。

凯文

答案1

您需要有一个 apache 或 iis 作为集群的前端。

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

现在假设您有 2 个 jboss 服务器(192.168.1.2 和 192.168.1.3)和 1 个 apache 2.2.x,并且您想为了简单起见使用 mod_jk(如果您想要 2 个 apache 在 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

接下来要做的是创建一个名为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 的 jboss 配置

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

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

并替换或修改此内容:

<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 的 jboss 配置

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

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

并替换或修改此内容:

<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(即,这是能够管理的最大同时请求数量),connectionTimeout 确保如果客户端关闭连接(即“关闭浏览器”),线程将在 600 秒无使用后过期。

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

安全注意事项:通过从部署文件夹中删除 jmx-console.war 和管理目录,或按照此处的说明操作,保护或禁用 jmx-console 和/或 web 控制台文档

您可以在 jboss 中找到有关负载平衡、mod_jk、mod_cluster 的更多信息维基百科

答案2

Jboss 不支持 http LB。每个节点都在自己的端口上监听。http 会话是复制/分布式的。如果您的老板坚持,您可以使用 HAJNDI 智能客户端代理而不是 http。只需从您的客户端应用程序向 HAJNDI 端口 (1101) 启动命名上下文,查找您的 EJB3 应用程序并调用任何远程方法。当连接的节点关闭时,智能代理将知道进行切换。

相关内容