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是本机Node的ip地址,106是另外一个机器Node的ip地址
另外一台机器改为:
<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