- 浏览: 110117 次
-
文章分类
最新评论
-
gaohaolianga:
按照你的方式配置,没起作用啊
搭建jboss集群共享session -
natian306:
楼主的jboss是什么版本的?我的是4.0.5没有jboss- ...
搭建jboss集群共享session
最近公司项目需要搭建一个jboss集群,同时研究了一下jboss集群下session一致性的问题,解决方法有两种,一种是Session Sticky的方式,另一种采用jboss replicaton 。
技术方案如下:
技术方案 1 :采用 Nginx Session Sticky 的方式实现。需要安装 nginx 扩展模块 nginx_upstream_jvm_route.
技术方案 2 :采用 jboss replicaton (jboss session 复制方式 ) ,需要进行 JBoss 相应配置文件的配置 .
最终我们选择的是采用session复制的方式,虽然需要牺牲一些服务器的性能,保证我们的服务能够高可行性(
High Availability)。即使其中一台Jboss服务器宕机了,用户访问的时候也不会造成session的丢失,但如果jboss集群中服务器的数量太多,就会造成session复制的成本过高,就不适合采用这种方式了。
1.安装Jboss4.2.2
unzip jboss4.2.2.GA.zip
cp –a jboss4.2.2.GA /usr/local/
#JBOSS默认只能本机访问,修改server.xml使它支持所有网络访问
vi $jboss/server/default/deploy/jboss-web.deployer\server.xml ($jboss表示你jboss的目录,下同)
修改
<Connector port="8080" address="${jboss.bind.address}"
为
<Connector port="8080" address="0.0.0.0" >
修改(不用AJP协议的话不用修改)
<Connector port="8009" address="${jboss.bind.address}" protocol="AJP/1.3"
为
<Connector port="8009" address="0.0.0.0" protocol="AJP/1.3"
#启动测试jboss
/$boss/bin/run.sh
#打开IE测试
2.配置Jboss Session复制的配置
1)修改$JBOSSE/server/default/deploy/jboss-web.deployer/server.xml文件,将Engine 修改如下:
<Engine name="jboss.web" defaultHost="localhost">
给它增加一个jvmRoute属性:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">
2)修改 $JBOSS_HOME/server/default/deploy/ jboss-web.deployer /META-INF/jbossservice.xml 找到<attribute name="UseJK">该为:
<attribute name="UseJK">true</attribute>
3)在$jboss\server\default\deploy\jboss-web-cluster.sar\META-INF\jboss-service.xml
下面要做的是基于request的cluster,也就让各个节点之间互相复制session状态。有两种复制模式,同步与异步。使用同步的方式,jboss会把session复制的操作和对request的响应放到一个应用事务(application transaction),session复制完成后才去处理request。异步复制则发送session复制的消息后马上处理request,session复制则会稍有延迟。但是在多框架的web页面中,这样的集群方式会有问题。由于frame在同一时间发出多个request,会造成一些混乱,这也是采用基于用户的集群方式的原因之一。
<attribute name="CacheMode">REPL_ASYNC</attribute>
REPL_ASYNC(异步)或者REPL_SYNC(同步)。
<attribute name="ClusterName"> 这个属性是设置你的集群的名字
在下面还有个<attribute name="ClusterConfig"> 这个属性是设置每个节点在进行session复制的时候是如何通信的,有TCP和UDP两种。如果使用udp方式,那么应该将udp的lookback属性指定为true。采用UDP方式问题比较多,所以采用TCP方式,应该指定bind_addr的值为本机ip,并且在TCPPING标签的initial_hosts属性中列出所有节点,格式是”机器名[端口号]”,将<TCP>到</TCP>标签内的全部down_thread和up_thread的false都改为true。还需要注释掉<!--<config><udp>...</udp></config>-->。
<config> ( 在config之前有个注释符号<!--把他去掉,在config最后也有个 -->也去掉)
<TCP bind_addr="192.168.200.17" start_port="7810" loopback="true"/>
<TCPPING initial_hosts="192.168.200.17[7810],192.168.200.18[7810]" port_range="3" timeout="3500"
num_initial_members="3" up_thread="true" down_thread="true"/>
<MERGE2 min_interval="5000" max_interval="10000"/>
<FD shun="true" timeout="2500" max_tries="5" up_thread="true" down_thread="true" />
<VERIFY_SUSPECT timeout="1500" down_thread="true" up_thread="true" />
<pbcast.NAKACK down_thread="true" up_thread="true" gc_lag="100"
retransmit_timeout="3000"/>
<pbcast.STABLE desired_avg_gossip="20000" down_thread="true" up_thread="true" />
<pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="false"
print_local_addr="true" down_thread="true" up_thread="true"/>
<pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
</config>
4)在项目工程中WEB-INF中web.xml文件,添加内容如下
在<web-app>紧跟着下面添加 <distributable/>
5)在WEB-INF中添加jboss-web.xml文件,内容如下
<jboss-web>
<context-root>/</context-root>
<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>
6)配置default目录,让该目录支持集群
将如下文件从%JBoss_Home%\server\all\lib里面拷到%JBoss_Home%\server\default\lib目录下:
jbossha.jar(加载org.jboss.ha.framework.server.ClusterPartition)
jgroups.jar(JBoss集群底层通信协议)
jboss-cache-jdk50.jar(加载org.jboss.cache.aop.TreeCacheAop)
将如下文件从%JBoss_Home%\server\all\deploy里面拷到%JBoss_Home%\server\default\deploy目录下:
deploy.last
jboss-web-cluster.sar
cluster-service.xml
以上为服务器上的配置
----------------------------------
另一台服务器配置要点:
1)增加node2节点:
deploy\jboss-web.deployer目录下的server.xml
<Engine name="jboss.web" defaultHost = "localhost">
改为
<Engine name="jboss.web" defaultHost= "localhost" jvmRoute="node2">。
2)配置Jboss 集群TCP协议发送数据包
在deploy\jboss-web-cluster.sar\META-INF目录下的jboss-service.xml
<TCP bind_addr = "thishost" start_port = "7810" loopback= "true"…>
改为
<TCP bind_addr = "192.168.200.18" start_port= "7810" loopback="true"…>;
<TCPPING initial_hosts= "thishost[7810], otherhost[7810]" port_range="3"…>
改为
<TCPPING initial_hosts= "192.168.200.18[7810], 192.168.200.17[7810]" port_range="3"…>。
其他配置跟另一台机器保持一致。
评论
发表评论
-
什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类
2012-07-25 22:18 1108老帖了,但是还是想自己收录一下。最后也把自己对于这个问题 ... -
在apache上通过mod_ssl配置https
2012-05-02 17:55 18291.编辑/usr/local/apache2/conf/ht ... -
jboss数据池不稳定问题
2012-04-26 11:37 1607现在的问题是,jboss一启动的时候,第一次连接会报这 ... -
SOA架构设计概要
2012-04-25 11:51 1308主要内容也是来自《Stev ... -
服务管理框架
2012-04-25 11:48 1032使大型分布式系统大型服务化之后足高可用及低运营成本,新的系统架 ... -
网络应用系统设计的基本原则
2012-04-25 11:02 849系统功能 KISS原则: keep ... -
怎样用Java运行64位程序
2012-02-16 18:09 127532位下JVM最大可用内存<4g $ java ... -
jboss 启动停在Initializing Spring root WebApplicationContext 的问题
2012-02-10 11:15 1873最近在装IDC机房的新机器,JBOSS启动的时候一 ... -
J2SE5.0中的注解
2011-12-26 12:07 821一、什么是注释 说起注释,得先提一提什么是元数据( ... -
failed to lazily initialize a collection of role:no session or session was close
2011-12-21 18:49 2858解决方法(延迟加载问题) 把fetch= FetchType ... -
Java性能 - Java Programming Guidelines
2011-12-02 18:43 864这一部分包含 ... -
JBoss中Connector中HTTP与AJP区别
2011-11-11 12:37 2282JBoss服务器通过Connector连接器组件 ... -
大流量网站的底层系统架构分析
2011-11-03 11:35 875动态应用,是相对于网站静态内容而言, 是指以c/c++、p ...
相关推荐
【描述】:Windows上的JBoss集群搭建涉及多个步骤,包括服务器复制、负载均衡和通信机制的设置。这篇资料集合了网络上的精华知识,旨在协助读者快速掌握集群配置技巧,顺利实施项目。 【标签】:Windows、JBoss、...
4. **设置共享存储**:如NFS或共享内存,用于共享session数据。 5. **部署应用**:确保所有节点上应用的部署方式一致,如使用JNDI或文件系统共享。 **四、JBoss集群测试** 1. **启动所有节点**:确保每个节点都能...
### 快速配置JBoss集群知识点详解 #### 一、JBoss集群简介 JBoss作为一个高性能的企业级Java应用服务器,其强大的功能与灵活性受到了广大开发者的青睐。在高可用性和负载均衡方面,JBoss提供了非常丰富的特性支持...
这些资源提供了详细的步骤指南和配置示例,帮助开发者实践JBoss集群的搭建。 在实际操作中,务必根据自己的环境和需求进行调整,并注意安全性和性能的平衡。对于复杂的集群部署,可能还需要考虑其他因素,如安全性...
- 需要在JBoss的部署环境中配置集群,使得各个节点间能够共享会话状态。 - 通过在`jboss-deployment-structure.xml`或相应的应用程序部署描述文件中指定集群策略来实现。 2. **设置会话复制** - JBoss支持多种...
7. **集群与负载均衡**:对于高可用性和扩展性需求,书中会讲解如何配置Tomcat集群,实现请求的负载均衡,以及session复制和共享,以保证服务的连续性。 8. **与其他应用服务器集成**:Tomcat可以与其他Java EE...
Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模...