您的位置:首页 > 其它

搭建jboss集群共享session

2013-09-16 09:16 204 查看
技术方案 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"…>。

其他配置跟另一台机器保持一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐