`
mushme
  • 浏览: 793332 次
  • 性别: 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
目前我们自己写了一个基于时间戳的定时方案,但尚未经过集群环境的测试,不好放出来给大家使用。
分享到:
评论

相关推荐

    基于Xen虚拟机实现Apache tomcat 集群搭建

    本文介绍了如何配置Tomcat集群实现session的同步。 9. 负载均衡集群配置:负载均衡是将进入的网络流量分散到多个服务器上,以提高网站、应用、数据库或其他服务的性能和可靠性。本文展示了如何使用mod_jk模块配置...

    tomcat集群实现session复制

    在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...

    tomcat集群配置 程序以及文档

    4. **网络通信**:Tomcat集群内的节点需要通过网络进行通信,这通常通过一种名为“JVMRoute”的机制实现,它通过HTTP头部的一个特定字段来识别请求应被转发到哪个节点。 5. **故障转移**:如果某个节点出现故障,...

    tomcat集群部署方案

    在Tomcat集群中,Redis可以用于实现会话共享,确保用户会话在不同Tomcat实例之间的共享,从而避免了因用户会话丢失而导致的问题。 **2.2 服务器配置说明** - **Nginx服务器**:配置文件通常位于`/etc/nginx/nginx....

    Tomcat集群与负载均衡

    Apache Tomcat 集群是指一组运行着相同版本 Tomcat 的服务器,它们通过特定的技术实现实例间的通信和协调,以提高系统的可用性和负载均衡能力。在 Tomcat 集群中,可以使用多种方法实现会话共享,包括基于内存、...

    tomcat集群搭建详细步骤

    Tomcat集群是一种将多个Tomcat服务器组织起来,共同提供服务的架构,以实现更高的可用性和可扩展性。集群的主要目的是在负载均衡和错误恢复的基础上,确保服务的连续性和性能。 **1. 集群概念** - **什么是集群**:...

    【全套】tomcat集群Session共享

    本套资源“【全套】tomcat集群Session共享”就是为了解决这个问题,通过集成Redis来实现Session的分布式共享。 Redis是一个高性能的键值数据库,常被用作缓存服务,它的高速读写能力和丰富的数据结构使得它成为...

    tomcat集群session共享解决方案

    在分布式系统中,Tomcat集群是一种常见的架构模式,用于提高应用程序的可用性和可扩展性。然而,当多个Tomcat实例组成一个集群时,session(用户会话)共享成为一个挑战,因为每个实例都有自己的内存空间,无法直接...

    tomcat集群session共享jar tomcat7专用jar

    在构建高可用的Web服务时,Tomcat集群是常见的选择,它可以提高系统的可扩展性和容错性。然而,集群中的各个节点需要共享用户会话(Session)信息,以确保用户在集群中的任一节点上都能保持登录状态和其他个性化设置...

    Tomcat集群资料

    《深入理解Tomcat集群》 在Java Web应用服务器领域,Apache Tomcat以其轻量级、高效和开源的特点,被广泛用于部署Servlet和JSP应用。然而,随着业务的增长,单台Tomcat服务器可能无法满足高并发和高可用性的需求,...

    Tomcat集群实例下载

    当我们谈论“Tomcat集群实例下载”时,这通常指的是通过设置多个Tomcat实例来构建一个集群,以实现负载均衡、高可用性和容错性。 集群是一种策略,将多个独立的服务器组织成一个逻辑单元,共同提供服务,从而提高...

    Tomcat服务器集群和负载均衡

    2. **配置通信机制**:Tomcat集群中的节点需要相互通信,这通常通过两种方式实现:共享内存(适用于同一台物理机上的多个Tomcat实例)和基于网络的通信(如JMS,适用于跨网络的节点)。 3. **共享session**:为了...

    集群分类数据库集群数据库集群

    总的来说,集群技术已经成为现代IT基础设施的核心组成部分,为企业提供了可靠且经济高效的方法来满足高可用性和高性能的需求。无论是操作系统、数据库还是应用服务器,都有相应的集群解决方案,适应不同业务场景和...

    黑马程序员-tomcat集群部署文档资料

    总结,"黑马程序员-tomcat集群部署文档资料"涵盖的范围广泛,从基础的集群概念和原理,到具体的Tomcat集群配置和优化,再到高级的源码分析,对于希望提升服务器管理和运维能力的IT从业者来说是一份宝贵的参考资料。...

    Nginx+Redis+Tomcat集群所需Jar包

    【Nginx+Redis+Tomcat集群所需Jar包】是一个集成解决方案,用于在高并发、高可用性场景下实现Web服务器的负载均衡和session共享。这个解决方案的核心是将Nginx作为反向代理服务器,Tomcat作为应用服务器,而Redis...

    Nginx+Tomcat+Memcached实现tomcat集群和session共享.docx

    在Tomcat集群中,通过Memcached来存储和同步session数据,确保用户在集群中的任何一台服务器上都能保持其会话状态。 **Nginx配置负载均衡和session共享** 1. **配置负载均衡** 在Nginx的配置文件(如`/usr/local/...

    redis+tomcat集群配置session共享

    本篇文章将详细探讨如何在Redis+Tomcat集群配置中实现Session共享。 首先,我们需要理解什么是Session。Session是Web应用中用于存储用户状态的一种机制,通常用于保存用户的登录信息、购物车等数据。在单台服务器...

    tomcat8集群redis实现session共享jar包

    为解决这个问题,可以将会话数据存储在中央服务器或内存数据库(如Redis)中,所有Tomcat实例都可以访问该数据库,从而实现会话共享。 实现步骤如下: 1. **安装Redis**:首先,你需要在你的环境中安装Redis。这...

    Apache和Tomcat集群配置步骤(Apache2.2,Tomcat6.0).

    ### Apache和Tomcat集群配置详解 #### 一、软件准备 在进行Apache和Tomcat集群配置之前,首先需要准备所需的软件资源。...通过以上步骤,可以成功搭建Apache和Tomcat集群,实现高效的Web应用服务器环境。

    tomcat集群使用redis共享session的jar包

    通过以上步骤,我们可以成功地使用Redis来实现Tomcat集群的session共享,确保用户在多台服务器间的会话一致性,提高了应用的用户体验和整体性能。这个过程涉及到的关键jar包,如`tomcat-session`,提供了与Redis交互...

Global site tag (gtag.js) - Google Analytics