Jboss 5.1.0集群配置

1、准备 css

下载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 html

2、配置 前端

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

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文件,将 web

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

改成 shell

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

另外一台服务器配置改成: apache

<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


 3、测试

编写一个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组件试图访问会话中的有关数据时可能会致使异常。


参考资料:http://suhuanzheng7784877.iteye.com/blog/968913

相关文章
相关标签/搜索