`
mushme
  • 浏览: 778172 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

通过数据库来实现tomcat集群

 
阅读更多
前段时间一直在学习tomcat的集群,tomcat5已经配置成功了,无奈到了tomcat6上,总是不成功,出现的问题是一个tomcat无法发现另外一个tomcat,今天又在网上看了下,发现了一个新的方法来实现集群。
集群无非就是实现两个关键点,一个是负载的均衡,一个是session的复制。
负载的均衡通过apache很容易分配,前面也有介绍,就不细说了。
tomcat6的session复制,按照官网上说的tomcat5配置成功了,到了6就总是不成功。
下面说下新方法
1.编辑context.xml文件,添加
<Manager className="org.apache.catalina.session.PersistentManager" checkInterval="1" maxIdleBackup="2">   
  <Store className="org.apache.catalina.session.JDBCStore" driverName="com.mysql.jdbc.Driver"   
   connectionURL="jdbc:mysql://localhost:3306/session?user=root&amp;password=123456"   
   sessionTable="tomcat_sessions" sessionIdCol="session_id" sessionDataCol="session_data"   
   sessionValidCol="valid_session" sessionMaxInactiveCol="max_inactive"   
   sessionLastAccessedCol="last_access" sessionAppCol="app_name" checkInterval="1" debug="99" />  
 </Manager>  

2.创建一个数据库来存储session
create table tomcat_sessions (
  session_id     varchar(100) not null primary key,
  valid_session  char(1) not null,
  max_inactive   int not null,
  last_access    bigint not null,
  app_name       varchar(255),
  session_data   mediumblob,
  KEY kapp_name(app_name)
);

此两处的参数说明如下:
driverName和connectionURL就不说了
sessionTable是指定数据库的表名
sessionIdCol指定存储sessionID的字段名称
sessionDataCol指定存储session数据的字段名称
sessionValidCol指定存储session是否失效的字段名称
sessionMaxInactiveCol指定存储session失效时间的字段名称
sessionLastAccessedCol指定存储session最后访问时间的字段名称
sessionAppCol指定存储session所在域名的字段名称

然后,将另外一个tomcat的配置文件配置成和以上相同,即可实现tomcat的session共享
最后一点,不要忘记将mysql的数据库连接jar包拷贝到两个tomcat的lib目录下

集群完成,经过测试,关掉一个tomcat,另外一个tomcat仍然可以获取到以前的session,但是,有一点是我担心的,session的创建和销毁会不会对数据库产生太大的压力?

另外
在关闭和重启Tomcat时, tomcat 会试图 serialize存在的session资源. 如果 sessions中相关的对象没有实现 serializable 接口, 就会出现Cannot serialize session attribute XXX  for  异常.

如果你不想看到该异常, 也不想保存session. 那么你可以在项目部署描述文件中(如. test.xml,)(instead of just exploding the war)  的  <Context> tags中间 加上 :
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="false"/>
这样 tomcat 在关闭的时候就不会保存session资源了.

如果你确实担心数据库的压力,那么可以使用将数据库的引擎改为内存表,但是内存表不支持blob,所以你得尽量少写一些session数据,然后使用varbinary
CREATE TABLE `tomcat_sessions` (
  `session_id` varchar(100) NOT NULL,
  `valid_session` char(1) NOT NULL,
  `max_inactive` int(11) NOT NULL,
  `last_access` bigint(20) NOT NULL,
  `app_name` varchar(255) DEFAULT NULL,
  `session_data` varbinary(60000) DEFAULT NULL,
  PRIMARY KEY (`session_id`),
  KEY `kapp_name` (`app_name`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

60000为字节长度,大约为50KB。
如果你的应用向session中写入的数据过多,你得考虑下。

通过以上,你的tomcat已经集群了,但是在应用层面上,依然有一些问题,需要来解决。
主要有以下几个方面
1.集群的服务器文件如何同步?
你可以考虑用NFS来实现
2.集群的应用如果使用了缓存,那么缓存如何同步?
这个目前我没有好的办法,或者你可以将不对一些数据使用缓存
3.如果你的应用使用了quartz,那么定时任务会被执行多次
这个新版本的quartz实现集群了,不过配置有些复杂,或者你可以单独用一个应用来跑quartz
目前我们自己写了一个基于时间戳的定时方案,但尚未经过集群环境的测试,不好放出来给大家使用。
分享到:
评论

相关推荐

    Terracotta+tomcat集群配置详细说明(写了一晚上。。)

    把这种集群间数据共享的机制应用在session同步上,相当于对tomcat第二种集群实现机制进行了优化,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。在对比测试中,采用Terracotta搭建Tomcat集群,节点...

    Nginx 集群 tomcat session 共享配置有源码

    Nginx 集群 tomcat session 共享配置有源码 介绍看博客:https://blog.csdn.net/wxb880114/article/details/80563301

    Tomcat最佳实践.rar

    Tomcat最佳实践 1,WEB SERVER介绍 2,TOMCAT目录结构 3,TOMCAT端口管理 ...5,TOMCAT配置数据库 6,TOMCAT监控软件安装 7,TOMCAT环境变量 ...17,TOMCAT集群和负载均衡 18,ECD部门AP(TOMCAT)部署规范

    nginx+tomcat+redis+mysq集群部署方案.docx

    第2章 Tomcat集群 2 2.1 Tomcat集群架构 2 2.1.1 Nginx服务器 2 2.1.2 Tomcat服务器 3 2.1.3 数据库服务器 3 2.1.4 Redis服务器 3 2.2 服务器配置说明 3 第3章 集群的安装与配置 5 3.1 JDK的安装和配置 5 ...

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip

    redis:Nosql数据库,搭配shiro的会话管理功能将session存入redis中,实现tomcat多服务器集群的session共享 nginx:反向代理服务器,用来调度多台tomcat h2:内存数据库,用于测试 开发环境 ==== jdk...

    TOMCAT最佳实践

    1,WEB SERVER介绍 2,TOMCAT目录结构 3,TOMCAT端口管理 ...5,TOMCAT配置数据库 6,TOMCAT监控软件安装 7,TOMCAT环境变量 8,TOMCAT和JVM的配置 ...17,TOMCAT集群和负载均衡 18,ECD部门AP(TOMCAT)部署规范

    Tomcat配置管理实践

    1,WEB SERVER介绍 2,TOMCAT目录结构 3,TOMCAT端口管理 ...5,TOMCAT配置数据库 6,TOMCAT监控软件安装 7,TOMCAT环境变量 8,TOMCAT和JVM的配置 ...17,TOMCAT集群和负载均衡 18,ECD部门AP(TOMCAT)部署规范

    apache+tomcat+memcached集群

    apache 集群tomcat,session管理使用memcached,可部署javaweb,javaee的项目. 压缩包包含安装配置文档,apache no ssl 32bit 64bit,memcached 32bit 64bit安装文件以及tomcat所需要的jar,以及主要apache的配置文件. ...

    Nginx与Tomcat集群配置 Redis配置

    Nginx的编译与安装,包含了... Nginx代理前端Tomcat后端负载均衡。 配置Redis数据数据库,并与Tomcat集成Session统一认证等。 包含了基本配置文档,以及相关的字段意思,方便各位下载以后,可以更改自己想要的参数。

    JAVA集群部署

    2台用于 mysql主从数据库集群:主(读写操作) 从(读操作)数据库集群 2台用于动静态分离 Nginx动静分离 3台用于应用服务器(hadoop): 一台namenode两台:datanode1 datanode2 1台NFS文件服务器 Nginx 1台 2台...

    Tomcat集群案例

    OsCache缓存框架:是一款相对来说比较不错的缓存框架、可以缓存对象、也可以缓存单个页面、可以很好的减少直接跟数据库打交道。 但是这些东西一旦运用于集群环境就需要在设计的时候就要考虑到、否则真是有解决不完...

    性能调优 海量并发 系统架构

    Nginx+tomcat集群Memcached+Session复制 高性能高并发服务器架构 基于nginx的tomcat负载均衡和集群 实现多服务器负载均衡 系统性能优化 数据库 Nginx+Squid负载均衡 配置好的集群 总共三十个文档"&gt;Apache+Tomcat+...

    Tomcat使用技巧集合

    包含以下资源 Tomcat6_调优设置内存和连接数 Tomcat+jndi+配置数据源过程 详细讲解tomcat工作原理 tomcat数据库连接池配置网上文章+csdn上的代码 疯狂的IT人整理Apache、Tomcat集群和负载均衡 Tomcat优化配置

    揭开J2EE集群的面纱 pdf

    4.WEB层集群实现8 4.1.WEB层负载均衡 4.2.HTTP会话的失败转移 4.2.1.数据库持久方案 4.2.2.内存复制方案 4.2.3.Tomcat的方案:多服务器复制 4.2.4.WebLogic, WebSphere, JBoss的方案:结对服务器(Paired servers)...

    基于SpringBoot框架搭建的物联网数据采集系统服务器端(源码)

    * 通过SpringBoot的内置Tomcat方便了Tomcat集群的部署 * 提供查看IP和端口API方便进行nginx反向代理和负载均衡的部署和测试 * 分布式session共享避免了集群环境下用户登录信息失效的问题 * 5.测试页面优化

    memcached-win32-1.4.4-14内存数据库

    可做tomcat集群session共享和内存数据库使用,内含32位和64位,需要64位将64位的三个文件替换到32位中即可;简介如下: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过...

    架构设计方案

    1)数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC实现数据库的集群。 2)采用高效的网络文件共享策略,采用图片服务器来实现页面的图片存储。 2.1.4不同网络用户访问考虑 1)通过引入CDN来解决不同...

    使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包

    使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包

    Apache Tomcat_Window平台_三层架构部署.doc

    三层架构,分别由:Web Server(web服务单点或集群)、App Server(应用服务单点或集群)、DB Server(数据库单点或集群)三大部分组成。

    尚硅谷_Redis.docx

    Redis是一个key-value存储系统,是当下互联网公司常用的NoSQL数据库之一,是进入互联网行业的Java开发工程师必备技术。 在本课程中,你将了解Redis是什么、能干什么...5 Redis集群实现Tomcat集群的Session共享等......

Global site tag (gtag.js) - Google Analytics