websphere和weblogic的集群下Session持久化环境搭建

最近熟悉websphere和weblogic的集群环境下Session持久化,记录一下备忘,没什么条理:
Webphere Network deployment V6.1

数据库方式session持久化测试环境搭建:

1.创建存储session的数据库SESSDB(数据库采用IBM的DB2_8.1);
2.创建数据库表SESSIONS;
3.针对上面配置的数据库创建JDBC数据源与提供程序;
4.Websphere Server的会话管理的分布式环境里分布式会话选择数据库方式,并配置数据库属性与步骤3中配置的数据源关联起来;
5.Websphere Server的Web容器中定制属性:SessionTableName/DB2ADMIN.SESSIONS,指定Web应用的session存储至步骤2中创建的SESSIONS表中;
过程中出现的问题:
在websphere上配置数据源遇到下列问题
1 问题一:测试数据源时,出现[ibm][db2][jcc][t4][10205][11234] Null userid is not supported.
从这个提示信息,再查看数据源配置,发现没有创建连接需要配置的用户名和密码的输入窗口,后来看到数据源有一个链接“J2C认证”,于是点进去,配置了一个名为Tw-PengYaoNode01/bbb的J2C认证数据,其中,用户名和密码,都是db2admin。保存后,测试数据源时,出现下列问题。

2 问题二:测试数据源时,出现socket异常
在节点 Tw-PengYaoNode01 上的服务器 server1 上,对数据源 ddddd 执行的测试连接操作由于以下异常 java.sql.SQLException: [jcc][t4][2030][11211][3.50.152] 在对连接的底层
socket、socket input stream 或 socket output stream 执行操作期间发生通信错误。错误位置:Reply.fill()。消息:Connection reset。 ERRORCODE=-4499, SQLSTATE=08001DSRA0010E:
SQL 状态:08001,错误码:-4,499。 而失败。
分析:
在windows的服务中,把db2指定为只能用db2admin用户登录。这样,当192.168.11.111是用Administrator登录时,该服务就不能用db2admin访问,导致这个问题。修改后,设置为本地系统账

都可以使用这个服务。重启服务。但测试数据源时,出现下列问题。

3 问题三:出现访问6789异常,数据源配置的url类似于:jdbc:db2://192.168.11.111:6789/sample,这种配置,适用于JDBC Type 3 驱动程序。客户端的驱动程序由db2java.zip中提供,其实现类的包名为:
COM.ibm.db2.jdbc.net.DB2Driver。
JDBC Type 3 驱动程序是一种纯 Java 实现,它必须与 DB2 JDBC Applet 服务器(DB2 JDBC Applet Server)通信才能访问 DB2 数据,而 DB2 JDBC Applet Server指定的端口为6789,正式
由于它的启动,DB2 的net驱动服务才可以使用。
而我们在Websphere 中,创建的数据源,使用JDBC Type 4 驱动程序,Type 4驱动程序是仅用于Java的JDBC 驱动程序,它直接连接到数据库服务器。DB2 UDB(Universal Database) for
Linux, UNIX 和 Windows V8.1 引入了称为“通用 JDBC 驱动程序(Universal JDBC driver)”的 Type 4 驱动程序,在文件db2jcc.jar中提供,其实现类的包名为
com.ibm.db2.jcc.DB2Driver,并且要求CLASSPATH中有许可证JAR文件:对于 DB2 UDB V8 for Linux, UNIX 和 Windows 服务器:db2jcc_license_su.jar,对于 DB2 UDB for iSeries? and
z/OS 服务器(与 DB2 Connect 和 DB2 Enterprise Server Edition 一起提供):db2jcc_license_cisuz.jar
Type 4 URL 模式类似于“jdbc:db2://192.168.11.111:50000/sample”。因为当需要JDBC驱动程序将Java应用程序直接连接到DB2服务器上名为“sample”的数据库,该数据库位于配置在DB2
服务器(主机名为192.168.11.111)上的 DB2 实例中,而DB2服务器是在端口50000 上进行侦听。具体如何知道是在50000上侦听,可以通过下面的方法查看。
(1)先执行:
db2cmd
db2 get dbm cfg
可以看到
TCP/IP Service name (SVCENAME)=DB2
(2)从这个DB2,再查看操作系统的services文件(以windows为例,services文件位于windows/system32/drivers/etc目录下),可以看到:
db2c_DB2  50000/tcp ,这里Service name为“DB2”的这个服务在端口50000 上进行侦听。
因此,这个问题是端口配置错误了,将6789,改为50000,保存后,再测试数据源连接,测试成功。
关于使用DB2 Universal Database的db2java.zip与db2jcc.jar的详细对比,请参考
http://www.ibm.com/developerworks/data/library/techarticle/dm-0512kokkat/

4 问题四:应用访问数据源出现 cann't query data from physical database: com.ibm.db2.jcc.b.eo: "DB2ADMIN.ACCOUNT0" ????????. SQLCODE=-204, SQLSTATE=42704, DRIVER=3.53.95
分析:这里有几个问题
(1)第一个问题:是应用没有配置使用数据源配置的JAAS - J2C 认证数据(即前面配置的Tw- PengYaoNode01/bbb ),这个问题需要在部署应用时,选择”修改资源认证方法“,这个步骤比较隐晦,刚开始按向导往下走,根本没有找到。所以忽略了这个步骤

(2)第二个问题:上面配置好了,但还是访问出问题,查看数据库,发现建的表是属于Administrator,估计是这个原因,导致用 DB2ADMIN访问不到。所以,又重新删除了表,然后重新注销192.168.11.111,用DB2ADMIN登录192.168.11.111,然后再创建表,表就属于DB2ADMIN了。后来想了一下,是否也可以不用上面的方法,而是修改JAAS - J2C 认证数据Tw- PengYaoNode01/bbb中的用户名和密码,将用户名改为Administrator,将密码改为tongweb。这样应该也行。后来没有时间再试验。

另外,查询数据源时,如果lookup的是res-ref-name(例如:"java:comp/env/jdbc/db1" ),那么应该配置web.xml和ibm-web-bnd.xmi,在web.xml中设置resource-ref,在ibm-web-bnd.xmi
中设置res-ref于jndi-name的绑定。ibm-web-bnd.xmi,也可以不用自己写,在部署过程中,可以通过”目标资源 JNDI 名称“进行设置。

memory-to-memory方式session持久化

0.环境:1个apache负载均衡器 + 2个websphere network deployment 6.1应用服务器 + memory-to-memory方式session持久化
  环境搭建基本步骤:
  (1)配置一个Apahce负载均衡器
  (2)安装一个Deployment Manager节点DM
(3)安装两个应用服务器节点server1、server2
(4)启动server1和server2的NodeAgent,并将server1、server2注册至DM节点下
(5)在DM管理控制台创建一个集群MyCluster,将server1和server2添加至该集群
(6)创建一个复制域:MyClusterRepDomain
(7)配置server1和server2 分布式session持久化方式为memory-to-memory replication
(8)配置memory-to-memory replication的复制域为MyClusterRepDomain,复制模式为:Both client and server
(9)根据mytest.war需要,配置mysql数据库
(10)启动集群,通过管理服务器控制台将测试应用部署至整个集群下的所有Server

  用例:mytest.war、servlets-examples.war
遇到的问题及解决方法:
问题:在同一台机器上安装MD、server1、server2,server1、server2的http访问端口分别是9080、9081;部署应用后只能通过9080端口访问到?
分析:新搭建的环境,在虚拟主机中没有添加9081这个端口?
1.应用程序服务器 > server1 > 端口中,看一下WC_defaulthost 的端口是不是你访问的9081,如果不是,改一下,再重启server
2.如果是的话检查  环境 > 虚拟主机 >  default_host  >  主机别名中有没有9081这个端口,如果没有,新建一个9081端口,之后重启server再看;
3.还有就是你的应用包发布的时候,有一部指定虚拟主机,你是否指定的default_host 这个虚拟主机中。检查方法 :企业应用程序 > 应用包名 > 虚拟主机  是否选择的是 default_host
最后是default_host主机别名中没有9081这个端口,添加后一切正常了。
***************************************************************************************************************************
WebLogic 10gR3
0.环境:1个weblogic10gR3负载均衡器 + 2个weblogic10gR3 + replication方式session持久化
  环境搭建基本步骤:
  (1)通过ConfigurationWizard向导,创建一个新的Domain;
(2)配置管理服务器
(3)配置受管服务器
(4)配置集群
(5)将受管服务器添加至集群中
(6)创建Weblogic自带的HTTP代理应用程序
(7)编辑启动WebLogic的服务文件
(8)远程主机上配置受管服务器
(9)在应用中weblogic.xml文件中添加下面session持久化类型配置:
<session-descriptor>
    <persistent-store-type>replicated</persistent-store-type>
     <sharing-enabled>true</sharing-enabled>
</session-descriptor>
(10)启动集群,通过管理服务器控制台将应用部署至整个集群下的所有Server

你可能感兴趣的:(应用服务器,weblogic,jdbc,db2,websphere)