weblogic集群下的session复制

在百度搜索 关键字 weblogic session 复制 会出现很多关于此功能的介绍,这里只做些简单的汇总说明:

 

三种实现方式:

         内存复制

         JDBC复制

         文件系统复制

 

         下边只介绍内存复制方式。

 

session复制策略:

1.weblogic中,session是通过配置在weblogic.xml文件中的<session-descriptor>下的<persistent-store-type>属性值来实现的。

 

<persistent-store-type>包含:

         memory– 禁用持久性会话存储。

         replicated –  memory 相同,但会话数据将在群集服务器之间复制。

         replicated_if_clustered – 如果 Web 应用程序部署于群集服务器上,则会复制生效                                persistent-store-type。否则,memory 为默认值。只只部署到部分集群服务                               器上,是不复制的。

         sync-replication-across-cluster – 复制将在群集内同步发生。

         async-replication-across-cluster – 复制将在群集内异步发生。

         file – 使用基于文件的持久性(另请参阅 persistent-store-dir)。

         jdbc – 使用数据库存储持久性会话。(另请参阅 persistent-store-pool。)

         cookie – 所有会话数据都存储于用户浏览器的 cookie 中。

 

更多weblogic.xml配置请了解

http://docs.oracle.com/cd/E12840_01/wls/docs103/webapp/weblogic_xml.html#wp1071982

 

下边只介绍 replicated_if_clustered情况。

 

2. 一定要在负载均衡的基础上。

 

3.    session 只存在于两个服务实例中(每个实例都有两份Session数据,主数据和备份数据),一个是主对象服务,一个是备份服务。当一个session创建后,同时生成一个备份session放到备份服务实例中去。

         当主服务实例异常宕掉后,用户访问会被分配到另一个服务实例中去(这是实例可能是该服务设置的session备份服务,也可能是另一个没有存储该服务session的服务实例)。

         这时,处理请求的新服务实例,会去获取之前备份的session到本服务中,此服务实例为主对象服务,然后再备份一个新session,放到它所对应的备份服务中去。

如何设置备份服务对象?

         这里引入了复制组的概念,复制组是把所有集群服务(包括同一台机器上的和不在同一台机器上的)按逻辑分组。WLS允许你使用复制组,决定在哪里放置备份对象。

        

         每个服务都有两个属性,复制组和手选次级组



 

复制组即为本服务对应的逻辑分组,手选次级组即为该服务对应的备份组。

设置分组后,每个服务自己就是主服务对象,他们都对应一个备份服务。

WLS尝试以下方式进行session复制:

         如果配置过,发送备份对象给预定义次要复制组

         发送备份对象给不同机器

         避免发送备份对象给同一个复制组中的服务器

 

session备份及找备份服务的方式,是分优先级的:       

优先级1——同一复制组,不在同一台机器上

优先级2——非同一复制组,不在同一台机器上

优先级3——同一复制组,在同一台机器上

优先级4——非同一复制组,在同一台机器上

 

实现步骤:

 

第一步:在我的代码里增加weblogic.xml设置。

下边是测试代码里weblogic.xml的配置

 




 

<!--[endif]-->

 

第二步:写测试代码

 

这里要注意 session复制是有要求的。

    1.session 必须序列化,session 中的对象要实现java.io.Serializable接口

   2.设置和获取session中的属性需要使用setAttribute() getAttribute()

    3.避免大的session对象,因为往session中存放的数据比较大时,系统的响应速         度明显变慢,有时会出现内存溢出的情况。

 

第三步:打包部署 TestApp.war

 

 

 

第四步:设置复制组。

         复制组设置时,最优的方案是一个闭环链路 例如 grouyA->groupB->groupC->groupA

         38217设置,不设置复制组或设置非链路的也可以实现session复制

 

第五步:运行测试

访问:http://192.168.100.38:8059/TEST/test.jsp

点击test按钮,查看是38还是217处理了请求,把处理请求的服务关掉,继续操作test页面,关掉服务前,设置session的数据还能读取出来,即为成功。

猜你喜欢

转载自best0247.iteye.com/blog/2337855