前段时间一直在学习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&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
目前我们自己写了一个基于时间戳的定时方案,但尚未经过集群环境的测试,不好放出来给大家使用。
分享到:
相关推荐
把这种集群间数据共享的机制应用在session同步上,相当于对tomcat第二种集群实现机制进行了优化,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。在对比测试中,采用Terracotta搭建Tomcat集群,节点...
Nginx 集群 tomcat session 共享配置有源码 介绍看博客:https://blog.csdn.net/wxb880114/article/details/80563301
Tomcat最佳实践 1,WEB SERVER介绍 2,TOMCAT目录结构 3,TOMCAT端口管理 ...5,TOMCAT配置数据库 6,TOMCAT监控软件安装 7,TOMCAT环境变量 ...17,TOMCAT集群和负载均衡 18,ECD部门AP(TOMCAT)部署规范
第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 ...
redis:Nosql数据库,搭配shiro的会话管理功能将session存入redis中,实现tomcat多服务器集群的session共享 nginx:反向代理服务器,用来调度多台tomcat h2:内存数据库,用于测试 开发环境 ==== jdk...
1,WEB SERVER介绍 2,TOMCAT目录结构 3,TOMCAT端口管理 ...5,TOMCAT配置数据库 6,TOMCAT监控软件安装 7,TOMCAT环境变量 8,TOMCAT和JVM的配置 ...17,TOMCAT集群和负载均衡 18,ECD部门AP(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,session管理使用memcached,可部署javaweb,javaee的项目. 压缩包包含安装配置文档,apache no ssl 32bit 64bit,memcached 32bit 64bit安装文件以及tomcat所需要的jar,以及主要apache的配置文件. ...
Nginx的编译与安装,包含了... Nginx代理前端Tomcat后端负载均衡。 配置Redis数据数据库,并与Tomcat集成Session统一认证等。 包含了基本配置文档,以及相关的字段意思,方便各位下载以后,可以更改自己想要的参数。
2台用于 mysql主从数据库集群:主(读写操作) 从(读操作)数据库集群 2台用于动静态分离 Nginx动静分离 3台用于应用服务器(hadoop): 一台namenode两台:datanode1 datanode2 1台NFS文件服务器 Nginx 1台 2台...
OsCache缓存框架:是一款相对来说比较不错的缓存框架、可以缓存对象、也可以缓存单个页面、可以很好的减少直接跟数据库打交道。 但是这些东西一旦运用于集群环境就需要在设计的时候就要考虑到、否则真是有解决不完...
Nginx+tomcat集群Memcached+Session复制 高性能高并发服务器架构 基于nginx的tomcat负载均衡和集群 实现多服务器负载均衡 系统性能优化 数据库 Nginx+Squid负载均衡 配置好的集群 总共三十个文档">Apache+Tomcat+...
包含以下资源 Tomcat6_调优设置内存和连接数 Tomcat+jndi+配置数据源过程 详细讲解tomcat工作原理 tomcat数据库连接池配置网上文章+csdn上的代码 疯狂的IT人整理Apache、Tomcat集群和负载均衡 Tomcat优化配置
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的内置Tomcat方便了Tomcat集群的部署 * 提供查看IP和端口API方便进行nginx反向代理和负载均衡的部署和测试 * 分布式session共享避免了集群环境下用户登录信息失效的问题 * 5.测试页面优化
可做tomcat集群session共享和内存数据库使用,内含32位和64位,需要64位将64位的三个文件替换到32位中即可;简介如下: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过...
1)数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC实现数据库的集群。 2)采用高效的网络文件共享策略,采用图片服务器来实现页面的图片存储。 2.1.4不同网络用户访问考虑 1)通过引入CDN来解决不同...
使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包
三层架构,分别由:Web Server(web服务单点或集群)、App Server(应用服务单点或集群)、DB Server(数据库单点或集群)三大部分组成。
Redis是一个key-value存储系统,是当下互联网公司常用的NoSQL数据库之一,是进入互联网行业的Java开发工程师必备技术。 在本课程中,你将了解Redis是什么、能干什么...5 Redis集群实现Tomcat集群的Session共享等......