博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Weblogic Session复制策略与方式
阅读量:5870 次
发布时间:2019-06-19

本文共 4628 字,大约阅读时间需要 15 分钟。

Weblogic中,HttpSession Replication的方式是通过在weblogic.xml中的session- descriptor的定义persistent-store-type来实现的. persistent-store-type可选的属性包括memory, replicated, replicated_if_clustered, async-replicated, async-replicated-if-clustered, file, async-jdbc, jdbc, cookie, coherence-web.

·         memory—Disables persistent session storage.

·         replicated—Same as memory, but session data is replicated across the clustered servers.

·         replicated_if_clustered—If the Web application is deployed on a clustered server, the in-effect persistent-store-type will be replicated. Otherwise, memory is the default.

·         async-replicated—Enables asynchronous session replication in an application or Web application. See  in Performance and Tuning for Oracle WebLogic Server.

·         async-replicated-if-clustered—Enables asynchronous session replication in an application or Web application when deployed to a cluster environment. If deployed to a single server environment, then the session persistence/replication defaults to in-memory. This allows testing on a single server without deployment errors.

·         file—Uses file-based persistence (See also ).

·         async-jdbc—Enables asynchronous JDBC persistence for HTTP sessions in an application or Web application. See .

·         jdbc—Uses a database to store persistent sessions. (see also ).

·         cookie—All session data is stored in a cookie in the user's browser.

·         Coherence*-web For more information, see .

Replicatedasync-replicated只用部置集群在集群上,而replicated_if_clusteredasync-replicated-if-clustered也可以部署在独立实例上。都不能只部署在集群的部分实例中上。

参考:

例如:

<?xml version="1.0" encoding="UTF-8"?>

<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"> 

  <session-descriptor> 

    <!-- <persistent-store-type>replicated</persistent-store-type> -->

    <persistent-store-type>replicated_if_clustered</persistent-store-type>

    <!--<persistent-store-type>memory</persistent-store-type>   -->

    <timeout-secs>60</timeout-secs> 

  </session-descriptor> 

</weblogic-web-app>

1.       Load BlanaceSession Affinity

由于这里的机制是主从备份所以集群中只有两个实例会有同一HTTP Session的数据当集群里的实例多于2个以上时,为了确保后续的HTTP请求能访问到Session数据必须要求前置分发请求的load balancer支持session affinity(sticky session/seamless session). Session Affinity就是能够把特定Session的所有请求都路由到第一次创建Session的同一物理机器上;否则后续的请求就有可能不能够访问 Session数据了.

如果设置成非Replication方式即memory模式生成的JSESSIONID类似:

gGMWQy2LcSTHTSyLdyLpqYGskYpXPpRJkc2VB618mSKSQC9rgsCv!-1274119771!1353236040031

可以看出这个session被二个!分隔成三部分。第一部分应该是真正的sessionid, -1274119771是实例标识。而1353236040031session创建时间。

一旦配置成Replicated模式,Weblogic会生成的SessionID类似:

sHkLQyQTnJQQ217Js7SmQL2x9hBb0JQ5hFm7n4QpNkZL7wMnLbPn!-9326295!959096067!1353236595093

这里出现三个!,第二,三部分为主备实例的标识。

SessionID格式的: sessionid!primary_server_id[!secondary_server_id]!creationTime

2.配置weblogic Load Blanace

配置方式参考

1)       通过访问,页面显示:

session Id:

KSW2QyJFzVcnFxQTWpSLJLhJTTQsCzLGqlM1ShnCvSyKm2r4k29h!-1458785082!2113129367!1353238917906

session CreateTime :1353238917906

current instance :Server1

可以看到该sessionprimary_server_id-1458785082,即Server1(每个serverid是启动时生成的,所以也是变化,所以你的测试可能与我不一样。) secondary_server_id2113129367,server3. server3Server1的备点。

2)       停止Server1,再次访问页面显示:

session Id:

KSW2QyJFzVcnFxQTWpSLJLhJTTQsCzLGqlM1ShnCvSyKm2r4k29h!2113129367!-481865348!1353238917906

session CreateTime :1353238917906

current instance :Server3

可以看到sessionId没有变化,而该sessionprimary_server_id2113129367, Server3secondary_server_id-481865348,server0.Server0Server3的备点。

3)       停止Server3,再次访问页面显示:

session Id:

KSW2QyJFzVcnFxQTWpSLJLhJTTQsCzLGqlM1ShnCvSyKm2r4k29h!-481865348!NONE!1353238917906

session CreateTime :1353238917906

current instance :Server0

可以看到sessionId没有变化,该sessionprimary_server_id-481865348, Server0secondary_server_idNONE,即该session没有备点.

通过测试我们大致可以猜出weblogic session复制的基本思路:

1)       每个实例都有两份Session数据。主数据和备份数据。

2 当请求的sessionIdprimary_server_id为当前实例时,从主数据里获取session响应请求,否则进行3).

3 当请求的sessionIdsecondary_server_id为当前实例时,从备份数据里取session响应请求。并修正该sessionprimary_server_id/secondary_server_id为自已及其的备点。

 

  3. Weblogic支持的负载均衡

       Weblogic支持两种机制的负载均衡

1)       Proxy plug-ins

Weblogic内置插件,即中提到的mod_wl.

如果一个实例失败,plug-in会定位该sessionsecondary_server,将请求发给它。

2)       Hardware load balancers

Hardware load balancers,比如F5. 这些第三方产品并不能按weblogic的意愿,定位sessionsecondary_server。他会随机选机选择一个可用实例发给他。然后该实例通过session id里的secondary_server_id,secondary_server获取数据。

虽然weblogic允许这种请求的随机转发,但并不建议使用会话不亲和方式,因为这将带来数据并发和一致性问题。

参考文献:

1.       

2.       

3.  http://stackoverflow.com/questions/6429990/weblogic-jsessionid

 

 

 本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/1063486

转载地址:http://uuanx.baihongyu.com/

你可能感兴趣的文章
Linux下 fio磁盘压测笔记
查看>>
MySQL优化之二:My SQL Server性能优化
查看>>
gitlab安装与配置
查看>>
设置联想电脑双屏显示(备用待查)
查看>>
CentOS7.0下NTP时间同步服务
查看>>
静态路由和默认路由的配置实战及其区别--很详细哦
查看>>
模拟通信与数字信号区别
查看>>
函数定义、函数的参数、函数的默认参数
查看>>
VMware ESXI 5.0群集+ISCSI存储
查看>>
比特币区块结构解析
查看>>
PATH变量,cp,mv,cat,more,less,head,tail命令举例
查看>>
wkhtmltopdf网页转PDF程序安装教程
查看>>
合并压缩JavaScript,开发发布两不误
查看>>
基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
查看>>
J2ME程序员容易遇到的问题!不断更新中_2008.05.17
查看>>
SQL Server-聚焦什么时候用OPTION(COMPILE)呢?
查看>>
MySQL的SQL 语句:根据从表记录个数对主表排序
查看>>
kill killall pkill 的区别
查看>>
DRBD+Corosync+Pacemaker+MySQL(下)
查看>>
实例标识助力您的应用迁上云端
查看>>