JBOSS高可用方案以及配置流程

一、基础知识

1.1高可用方案的2个基本问题

(1) Load Balance

需要注意负载均衡问题, 使得请求可以较好分配。

它有2种表现形式

(a) 访问地址不同

例如, 网站www.hello.com. 当访问www.hello.com/us, 由Node1做出响应. 当访问www.hello.com/cn, 由Node2做出相应

(b) 任务分发

例如, 网站www.hello.com. 当有50000个request到达时候, 将这些request按照2:1的比例分发给Node1和Node2

(2) High Availability

       需要注意Session状态转移问题, 即在某个Server Node发生故障时保持Session连接。例如,当Apache将某个request分发给Node1后, 并且进行了某些操作,这时候Node1突然crash或者Node1出现了网络故障, 这时要保证Session不会丢失, Session ID唯一和保留在Session中的内容不会丢失。

1.2基本原理介绍

如图1 所示,Node 1和Node 2所是Apache的两个worker。当有request到达时, 由Apache通过Ajp13 协议动态的将请求分发给Node 1和Node 2。 例如, 当发送的request送给Node 1时,由Node 1处理发送来的request, 进行处理后将response按照原路径返回,交给Apache。此后Apache再将收到的response返回给client端。

两个worker,Node 1和Node 2是真正负责处理client端发送来的请求。为了保持Session的一致性和稳定性,两个Node需要进行同步,即Session的复制,才能保证数据的统一。

二、举例说明配置

2.1环境说明

【机器A】

操作系统: Window Home Edition

IP地址: 192.168.0.42

JBoss 服务器: Apache, 2.2.4

JBoss 4.2 (Node 1)

JDK版本: 1.5.0

【机器B】

操作系统: FreeBSD

IP: 192.168.0.180

Server:    JBoss 4.2 (Node 2)

JDK: 1.5.0

2.2配置流程

(1)              %Apache_HOME%目录下

(a)          到www.apache.com下载mod_jk.so到modules目录

(b)          在conf目录下的httpd.conf文件最后写入

# Include mod_jk's specific configuration file

Include conf/mod-jk.conf

(c)          在conf目录下创建mod-jk.conf文件、uriworkermap.properties文件、workers.properties文件,文件的内容见附录一。其目的是为Apache设置2个worker为其服务。

 

(2)              Node1%JBOSS_HOME%/server/all目录下

(a)    修改访问地址, 使得外部可以以主机IP地址进行访问

在deploy/jboss-web.deployer目录下的server.xml

<Connector port="8080" address= {jboss.bind.address}…>改为<Connector port="8080" address="0.0.0.0"…>;

<Connector port="8009" address= {jboss.bind.address}…>改为<Connector port="8009" address="0.0.0.0"…>。

(b)    使得 JBoss 知道自己为 Node1 结点

deploy/jboss-web.deployer目录下的server.xml

<Engine name="jboss.web" defaultHost = "localhost"> 
<span style="font-family:宋体;">改为</span>
<pre name="code" class="html"><Engine name="jboss.web" defaultHost= "localhost" jvmRoute="node1">。
(c)    通知Node 1添加一个jvmRoute值到会话cookies中,以便mod_jk可以路由随后的请求

在deploy/jboss-web.deployer/META-INF目录下的jboss-service.xml

<attribute name="UseJK">false</attribute>
<span style="font-family:宋体;">改为</span>
<pre name="code" class="html"><attribute name="UseJK">true</attribute>
(d)    定义重定向地址<p>在deploy/jboss-web-cluster.sar/META-INF目录下的jboss-service.xml</p><pre name="code" class="html"><TCP bind_addr = "thishost" start_port = "7810" loopback= "true"…>

改为
<TCP bind_addr = "192.168.0.42" start_port= "7810" loopback="true"…>;

<TCPPING initial_hosts= "thishost[7810], otherhost[7810]" port_range="3"…>

改为
<TCPPING initial_hosts= "192.168.0.42[7810], 192.168.0.180[7810]" port_range="3"…>。

(3)              Node2%JBOSS_HOME%/server/all目录下

(a)    修改访问地址, 使得外部可以以主机IP地址进行访问

在deploy/jboss-web.deployer目录下的server.xml

<Connector port="8080" address= {jboss.bind.address}…>

改为
<Connector port="8080" address="0.0.0.0"…>;

<Connector port="8009" address= {jboss.bind.address}…>

改为
<Connector port="8009" address="0.0.0.0"…>。

(b)    使得 JBoss 知道自己为 Node2 结点 deploy/jboss-web.deployer 目录下的 server.xml
<Engine name="jboss.web" defaultHost = "localhost"> 

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

(c)    通知Node 2添加一个jvmRoute值到会话cookies中,以便mod_jk可以路由随后的请求

在deploy/jboss-web.deployer/META-INF目录下的jboss-service.xml

<attribute name="UseJK">false</attribute>

改为
<attribute name="UseJK">true</attribute>

(d)    定义重定向地址

在deploy/jboss-web-cluster.sar/META-INF目录下的jboss-service.xml

<TCP bind_addr = "thishost" start_port = "7810" loopback= "true"…>

改为
<TCP bind_addr = "192.168.0.180" start_port= "7810" loopback="true"…>

<TCPPING initial_hosts= "thishost[7810], otherhost[7810]" port_range="3"…>

改为
<TCPPING initial_hosts= "192.168.0.180[7810], 192.168.0.42[7810]" port_range="3"…>

(4)              在自己的应用程序中<p>(a)    设置使得自己的应用程序使用集群</p><p>在WEB-INF目录下的web.xml文件中<web-app>下添加</p><pre name="code" class="html"><distributable/>

(b)    在设置Jboss配置信息

在WEB-INF目录下创建jboss-web.xml文件,文件内容见附录二

三、实验方案

【实验一】验证负载分配

实验步骤:

(1)              在浏览器中输入http://l92.168.0.42/jmx-console/

(2)              另开一个浏览器窗口, 输入http://l92.168.0.42/jmx-console/,可能会出现另外一个node的jmx-console

 

【实验二】验证负载分配和Session ID保持

实验步骤:

(1)              创建文件test.jsp, 在test.jsp中打印node的IP地址, session id和singleton实例的某一自增变量

(2)              在一个浏览器窗口中访问test.jsp, 显示单一node的IP地址, session id和singleton实例的某一自增变量, 点击刷新按钮, 看见同一IP地址和Session id

(3)              另开一个浏览器窗口访问test.jsp, 可能会显示另一node的IP地址, session id和singleton实例的某一自增变量, 点击刷新按钮, 看见一IP地址和Session id. 在这里每个singleton变量的自增值是分别增加的.

(4)              仅保留一个浏览器窗口, 若ip显示42机器, 则把42机器上的jboss停止掉. 否则把180上的jboss停止掉. 刷新浏览器窗口. 可以看见ip值发生变化, 但session id保持不变

 

【实验三】验证Session内容

(1)              创建文件first.jsp, 在first.jsp中输入一个值, 将其存入session中, 以post方法在second.jsp中显示session中存在的值和打印值到控制台.

(2)              刷新second.jsp, 显示session中存在的值

(3)              停止掉刚刚在控制台打印信息的node结点server

(4)              刷新second.jsp, 显示session中存在的值

 

【实验四】数据统计, 查看性能

在%APACHE_HOME%/bin目录有应用程序ab, 利用ab做数据统计

分别向服务器发送500个请求,每次发送20个,查看最终的数据统计结果

ab -n 500 -c 20 http://192.168.0.42:8080/web-console/

ab -n 500 -c 20 http://192.168.0.180:8080/web-console/

ab -n 500 -c 20 http:// 192.168.0.42/web-console/

四、注意事项

8080端口问题

有时可能出现JBOSS端口冲突问题, 可以将%JBOSS_HOME%/all/deploy/jboss-web.deployer/Server.xml中定义的默认端口8080改为其他不用端口

 

ALL 模式运行问题

JBOSS以ALL模式在windows运行的命令为%JBOSS_HOME%/bin/run.bat –c all, 在FreeBSD运行的命令为%JBOSS_HOME%/bin/run.sh –c all

 

端口冲突问题

JBoss以ALL模式启动时候, 有时可能与某些应用程序冲突. 例如Firefox和MSN(曾遇到以上2这个应用程序端口冲突). 利用netstat –ano 来查看现在访问网络端口的应用程序的PID. 然后利用任务管理器去查找相应的程序,结束即可.

 

FreeBSD安装问题

在FreeBSD下安装JBoss后, ALL模式并不能正常运行. 需要调整几个参数, 才能运行.进入%JBOSS_HOME%server/all/deploy目录.

(1)              cluster-service.xml文件

<UDP …enable_bundling="false" max_bundle_size="64000 max_bundle_timeout="30"…>

改为
<UDP …enable_bundling="false" max_bundle_size="8000 max_bundle_timeout="30"…>

<TCP enable_bundling="false" max_bundle_size="64000" max_bundle_timeout="30">

改为
<TCP enable_bundling="false" max_bundle_size="8000" max_bundle_timeout="30">

(2)  ejb3-clustered-sfsbcache-service.xml 文件
<UDP …enable_bundling="false" max_bundle_size="64000 max_bundle_timeout="30"…>

改为
<UDP …enable_bundling="false" max_bundle_size="8000 max_bundle_timeout="30"…>

(3)  ejb3-entity-cache-service.xml 文件
<UDP …enable_bundling="false" max_bundle_size="64000 max_bundle_timeout="30"…>

改为
<UDP …enable_bundling="false" max_bundle_size="8000 max_bundle_timeout="30"…>

(4)  jboss-web-cluster.sar/META-INF/jboss-service.xml 文件
<UDP …enable_bundling="false" max_bundle_size="64000 max_bundle_timeout="30"…>

改为
<UDP …enable_bundling="false" max_bundle_size="8000 max_bundle_timeout="30"…>

<TCP enable_bundling="false" max_bundle_size="64000" max_bundle_timeout="30">

改为
<TCP enable_bundling="false" max_bundle_size="8000" max_bundle_timeout="30">


 

附录

附录一

mod-jk.conf文件

//加载mod_jk模块

LoadModule jk_module modules/mod_jk.so

//设置worker配置文件

JkWorkersFile conf/workers.properties

//设置日志记录位置

JkLogFile logs/mod_jk.log

//设置日志记录级别

JkLogLevel info

//设置日志记录格式

JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

//设置提交SSL KEY SIZE

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

//设置请求格式

JkRequestLogFormat "%w %V %T"

//设置负载转发请求

JkMount /ClusterTest/* loadbalancer

//设置负载转发文件

JkMountFile conf/uriworkermap.properties

 

uriworkermap.properties文件

/jmx-console=loadbalancer

/jmx-console/*=loadbalancer

/web-console=loadbalancer

/web-console/*=loadbalancer

 

workers.properties文件

# 定义workers 列表

worker.list=loadbalancer, node1, node2

# 定义 Node1

# 修改主机IP地址等参数

worker.node1.port=8009

worker.node1.host=localhost

worker.node1.type=ajp13

worker.node1.lbfactor=1

# 定义 Node2

# 修改主机IP地址等参数

worker.node2.port=8009

worker.node2.host=192.168.0.180

worker.node2.type=ajp13

worker.node2.lbfactor=1

# 设置Load-balancing 行为

worker.loadbalancer.type=lb

worker.loadbalancer.balance_workers=node1, node2

worker.loadbalancer.sticky_session=1

附录二

jboss-web.xml文件

<jboss-web>

<replication-config>

    <replication-trigger>

        SET_AND_NON_PRIMITIVE_GET

    </replication-trigger>

    <replication-granularity>SESSION</replication-granularity>

    <replication-field-batch-mode>

        true

    </replication-field-batch-mode>

</replication-config>

</jboss-web>

转自:http://blog.csdn.net/jaytse/article/details/1791241

 


 



 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值