欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Jboss 5.1.0集群配置

程序员文章站 2022-07-15 13:59:01
...

一、准备

下载Jboss 5.1.0, 配置JBOSS_HOME, JAVA_HOME环境变量,并把$JBOSS_HOME/bin添加到PATH环境变量中。本文要在两台服务器——IP分别为10.123.76.103和10.123.76.104——上部署两台Jboss应用服务器。 此外在第三台服务器上安装Apache 2.2服务器,并配置环境变量APACHE_HOME

二、配置

1)  复制依赖包和建立相关目录

cp jboss-5.1.0.GA/server/all/lib/hibernate-jbosscache2.jar $JBOSS_HOME/server/default/lib/
cp jboss-5.1.0.GA/server/all/lib/jbosscache-core.jar $JBOSS_HOME/server/default/lib/
cp jboss-5.1.0.GA/server/all/lib/jbosscache-pojo.jar $JBOSS_HOME/server/default/lib/
cp jboss-5.1.0.GA/server/all/lib/jgroups.jar $JBOSS_HOME/server/default/lib/
cp jboss-5.1.0.GA/server/all/lib/avalon-framework.jar  $JBOSS_HOME/server/default/lib/
cp jboss-5.1.0.GA/server/all/lib/jacorb.jar $JBOSS_HOME/server/default/lib/

cp -rf jboss-5.1.0.GA/server/all/deploy/cluster  $JBOSS_HOME/server/default/deploy/
mkdir $JBOSS_HOME/server/default/deploy-hasingleton 

cp jboss-5.1.0.GA/server/all/deploy/quartz-ra.rar $JBOSS_HOME/server/default/deploy/
cp jboss-5.1.0.GA/server/all/deploy/mail-ra.rar $JBOSS_HOME/server/default/deploy/

 

2) 打开$JBOSS_HOME/server/default/deploy/messaging/messaging-service.xml文件,将

<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:0}</attribute>

改为

<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:1}</attribute>

另一台服务器配置改为:

<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:2}</attribute>

更多服务器也如此设置。需要注意的就是不同服务器节点的这个ServerPeerID数值不能重复. 

 

注:如果messaging文件夹不存在,则先从$JBOSS_HOME/all中拷贝相关的文件

cp -rf jboss-5.1.0.GA/server/all/deploy/messaging $JBOSS_HOME/server/default/deploy/
cp jboss-5.1.0.GA/server/all/deploy/jms-ra.rar $JBOSS_HOME/server/default/deploy/

 

3) 打开 ${JBOSS_HOME}/server/default/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml文件,去掉<property name="useJk">false<property>附近的注释,并改为

<!-- 是否使用mod_jk 连接器 -->
<property name="useJK">true</property>
<!-- 是否使用粘性session, true表示粘性-->
<property name="useSessionPassivation">true</property>
<property name="passivationMaxIdleTime">-1</property>  
<property name="passivationMinIdleTime">-1</property>

注:在这个配置文件中可以修改session的复制模式.详细请参考jboss官方文档

 

4) 打开需要做集群的Java Web应用的web.xml 文件,在</web-app>之前添加 <distributable/>标记 

  如果需要对所有的Java Web应用做集群,那么可以在$JBOSS_HOME/server/default/deployers/jbossweb.deployer/web.xml里添加<distributable/>标记

 

5)  打开$JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml , 将

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

改为

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

另一台机器配置改为

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

此外, 给<Connector protocol ="AJP/1.3">..</Connector>添加属性connectionTimeout="60000"

更多服务器也同样配置。 需要注意,jvmRoute的值不能重复

 

ps: 如果你在本地部署两台Jboss服务器,你需要修改配置文件 $JBOSS_HOME/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml , 让监听的端口错开。 

如果希望集群通过指定的IP进行通讯,打开$JBOSS_HOME\server\all\deploy\cluster\jgroups-channelfactory.sar\META-INF\jgroups-channelfactory-stacks.xml, 修改为

 

<TCPPING timeout="3000" initial_hosts="${192.168.1.104[7810],192.168.1.106[7810]}" port_range="1" num_initial_members="3"/>

其中104是本机Nodeip地址,106是另一个机器Nodeip地址

另一台机器改成:

<TCPPING timeout="3000" initial_hosts="${192.168.1.106[7810],192.168.1.104[7810]}"                      port_range="1" num_initial_members="3"/>

更多的服务器也如是配置

 

6) 为Apache配置mod_jk连接器

打开$APACHE_HOME/conf/httpd.conf, 添加如下配置:

# mod_jk
LoadModule jk_module modules/mod_jk.so

#
# Configure mod_jk
#
#
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
# JkMount /* loadbalancer

在$APACHE_HOME/conf目录下建立workers.properties文件,内容为:

# Define list of workers that will be used
# for mapping requests
worker.list=loadbalancer,status
# Define Node1
# modify the host as your host IP or DNS name and your AJP 1.3 port
worker.node1.port=6009
worker.node1.host=10.123.76.103
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.socket_timeout=60
worker.node1.connection_pool_timeout=60
worker.node1.ping_mode=A
worker.node1.ping_timeout=20000
worker.node1.connect_timeout=20000

# Define Node2
# modify the host as your host IP or DNS name and your AJP 1.3 port
worker.node2.port=7009
worker.node2.host=10.123.76.104
worker.node2.type=ajp13
worker.node2.lbfactor=1
worker.node2.socket_timeout=60
worker.node2.connection_pool_timeout=60
worker.node2.ping_mode=A
worker.node2.ping_timeout=20000
worker.node2.connect_timeout=20000

# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=true
worker.loadbalancer.sticky_session_force=false

# Status worker for managing load balancer
worker.status.type=status

注意: jboss服务器的IP和连接端口必须与jbo中的声明一致. 

在$APACHE_HOME/conf 目录下创建uriworkermap.properties,内容为:

# 可以将一些静态资源(比如gif,jpg,css文件等) 放在apache的发布目录下,这样当客户端需要获取这些资源时,无需到jboss服务器拿,从而提高响应速度,减轻jboss应用服务器的压力
!/*.gif=loadbalancer
!/*.jpg=loadbalancer
!/*.png=loadbalancer
!/*.css=loadbalancer
!/*.js=loadbalancer
!/*.htm=loadbalancer
!/*.html=loadbalancer
!/*.ico=loadbalancer

/*=loadbalancer

 

 三、测试

编写一个jsp页面,该jsp页面会在session中记录每个浏览器访问该页面的次数。通过访问两台jboss应用服务器来检查session有没有被复制, 并尝试通过apache前端服务器进行访问

后记

       如果sticky_session的值为true,就表示会话具有“粘性”。“粘性”意味着当用户通过浏览器A与jboss 1开始了一个会话后,以后用户从浏览器A中发出的请求只要处于同一个会话中,负载平衡器就会始终让 Tomcat 1 来处理请求。直观地理解,可以认为一个会话始终与集群系统中的一个Jboss服务器"粘"在一起。当sticky_session的值为 true 时,集群系统不会进行会话复制。如果希望集群系统能进行会话复制,从而使得一个浏览器能与多个 Tomcat 服务器展开同一个会话,则应该把 sticky_session设为false(同时把  ${JBOSS_HOME}\server\default\deployers\jbossweb.deployer\META-INF\war-deployers-jboss-beans.xml中的useSessionPassivation属性设置为false )。sticky_session的默认值为true。

    当sticky_session设为false时,sticky_session_force对集群系统没有什么影响,通常可以把它设为默认值 false。当 sticky_session 设为 true 时,则建议把sticky_session_force也设为true。

     另外,粘性session的配置实际上比较消耗资源,不过某些要求稳定性十分高的系统,就必须这么做,而且远远要比以上的纠错措施严格得多,银行系统尤为明显!通常客户使用银行客户端的时候总是抱怨处理太慢了,确实是牺牲了速度、资源,维持了稳定、可靠、安全。

    假定sticky_session设为true,当浏览器已经与集群系统中的Jboss 1服务器“粘”在一起,展开了会话后,如果这个Jboss 1服务器由于异常而终止,此时会出现什么情况呢?如果sticky_session_force为true,那么服务器端会向客户端返回状态代码为500的错误。如果 sticky_session_force 为 false,那么负载平衡器会把请求转发给集群系统中的其他Jboss 2服务器,假如在Jboss 2服务器中不存在同一个会话的信息,则当Web组件试图访问会话中的有关数据时可能会导致异常。