`

搭建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测试

http://localhost:8080

     

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"…>。

其他配置跟另一台机器保持一致。

0
2
分享到:
评论
2 楼 gaohaolianga 2013-08-09  
按照你的方式配置,没起作用啊
1 楼 natian306 2012-08-05  
楼主的jboss是什么版本的?我的是4.0.5没有jboss-web.deployer这个目录

相关推荐

    JBoss集群配置的Session复制

    ### JBoss集群配置的Session复制详解 在分布式计算环境中,JBoss AS(Application Server)作为一款流行的开源应用服务器,常被用于构建高可用性、高并发的Java企业级应用程序。在这样的场景下,如何实现Session的...

    jboss集群完整介绍

    ### jboss集群完整介绍 #### 一、JBoss集群概览 JBoss集群是指一系列的计算机节点协同工作,为用户提供统一的网络资源服务。理想状态下,集群对外表现为一个整体,用户仅通过单一入口访问,无需知晓集群内部的具体...

    JBOSS7 集群和Session复制配置笔记

    NULL 博文链接:https://yang-min.iteye.com/blog/1961574

    windows jboss 集群2

    4. **共享存储**:为实现session共享,需要配置共享存储,如使用数据库或分布式缓存(如Infinispan)。 5. **负载均衡器**:可选配如HAProxy或Nginx等负载均衡器,根据策略分配请求到不同的JBoss实例。 6. **部署...

    jboss集群技术介绍

    - **集群(Cluster)**:指一组协同工作的服务器,它们共享相同的负载并能够互相替代,以提高系统的可用性和性能。 - **节点(Node)**:集群中的单个服务器实例。 - **分区(Partition)**:集群中的逻辑分组,用于...

    apache+jboss集群参考

    apache+jboss集群参考,参考介绍集群实现办法

    借助Apache2 mod_jk 1.2.x搭建JBOSS集群的方法

    ### 借助Apache2 mod_jk 1.2.x搭建JBOSS集群的方法 #### 知识点一:Apache2 mod_jk 1.2.x简介与安装配置 **Apache2 mod_jk 1.2.x**是Apache的一个模块,用于在Apache Web服务器和后端应用服务器(如JBOSS)之间...

    jboss集群部署详细资源

    本文将详细介绍如何在Apache和JBoss环境下搭建一个简单的集群。 首先,我们要明确集群的基本概念。集群是指多个独立的服务器节点,通过网络连接并协同工作,对外表现为单一的系统。在Apache和JBoss的集群环境中,...

    CentOS下apache负载均衡与JBoss集群配置

    Session持久化是JBoss集群中保证用户会话信息在多个服务器节点间能够共享和同步的重要机制。通常JBoss集群使用数据库或其他存储方式来持久化Session信息,这样即使在某些服务器节点发生故障时,用户会话信息也不会...

    jboss集群安装手册

    - **1.3 适用范围**:适用于进行软件实施和维护的人员,尤其是在Windows下搭建JBoss集群并配合Oracle数据库的场景。 2. **Nginx配置** - **2.1 安装Nginx**:从官方网址下载Nginx,将其解压缩至C盘并命名为`nginx...

    Jboss6+mod_jk+apache2.2集群实现session的复制

    本案例主要关注于如何搭建一个基于JBoss 6、mod_jk和Apache 2.2的集群环境,通过配置使该环境支持负载均衡和Session复制功能。 1. **Apache 安装与配置** - **下载与安装**:首先,根据目标操作系统的类型(本例...

    jboss 集群配置

    本文将深入探讨JBoss集群的搭建、配置、测试以及相关安装步骤,并提供参考资料。 **一、JBoss集群的优势** 1. **高可用性**:通过负载均衡和故障转移,确保服务在单个节点失败时仍能继续运行。 2. **负载均衡**:...

    jboss集群指南配套源代码

    1. **JBoss集群基础**:JBoss集群是通过多个独立的JBoss实例协同工作来提供服务的,这些实例共享状态,并通过JGroups通信框架进行节点间的通信。 2. **JGroups**:JGroups是JBoss集群的基础,用于提供节点间的消息...

    Jboss集群配置指南

    - **配置TreeCache cluster service**:这是Jboss的一种缓存服务,用于在集群内共享数据,需要在ejb3-interceptors.xml中进行配置。 4. **设置run参数**:根据集群需求,可能需要调整Jboss的启动参数,如JVM内存...

    JBoss集群技术介绍

    【JBoss集群技术介绍】 JBoss集群技术是企业级应用服务器解决方案的重要组成部分,它通过将多个Jboss服务器实例组合在一起,提供了高可用性和负载均衡的能力。这篇文章将深入探讨JBoss集群的基本概念、集群的分类、...

    weblogic、jboss集群配置,参数优化

    4. **数据源和JMS资源的集群化**:为了确保高可用性,数据库连接池和消息队列也需要在集群内进行共享和复制。 5. **网络配置**:调整监听端口和网络通道,确保集群内部通信的效率和安全性。 接着,我们来看JBoss,...

    快速配置JBoss集群

    需要注意的是,虽然搭建集群的过程相对简单,但在实际生产环境中还需要根据具体的业务需求对服务器进行进一步的优化以及实现更复杂的负载均衡策略。此外,对于集群中数据的一致性、会话管理等问题也需要特别关注。

    Apache2.2+JBOSS 5 集群配置

    - 需要在每个JBOSS节点上进行适当的集群配置,包括共享的全局状态管理、session复制等,以保证数据的一致性。 - 节点间通过RMI或HTTP等协议进行通信,确保负载均衡器能够正确识别和管理它们。 7. **启动JBOSS集群...

Global site tag (gtag.js) - Google Analytics