文档章节

Tomcat集群通过NoSQL高速存储共享session的实例

五大三粗
 五大三粗
发布于 2015/11/27 19:27
字数 754
阅读 252
收藏 30
点赞 1
评论 1
要实现session共享,多个tomcat服务器之间须使用负载均衡模块进行调度,这里用nginx+tomcat+ckv为例进行说明;

部署tomcat服务器

1. 首先部署多个tomcat服务器,并确保每一个服务器均能正常访问;2. 下载memcached-session-manager-${version}.jar,此jar包包含了msm的核心功能;根据不同的tomcat版本下载对应的支持库:Tomcat6:memcached-session-manager-tc6-${version}.jarTomcat7:memcached-session-manager-tc7-${version}.jarTomcat8:memcached-session-manager-tc8-${version}.jar3. 为了支持memcached协议还必须下载spymemcached-2.11.1.jar4. 确定序列化方案,不同方案对jar包的依赖关系如下:• kryo-serializermsm-kryo-serializer,kryo-serializers-0.11(0.11 is needed, as 0.20+ is for kryo2),kryo,minlog,reflectasm,asm-3.2• javolution-serializermsm-javolution-serializer,javolution-5.4.3.1• xstream-serializermsm-xstream-serializer,xstream,xmlpull,xpp3_min• flexjson-serializermsm-flexjson-serializer,flexjson• java自带序列化方案spymemcached-2.11.1.jar已自带,性能相对较差5. 现在我们需要把已经准备好的jar包全部放在tomcat的lib目录下,然后修改conf目录下的context.xml文件,此处以java自带序列化方案为例,在context标签下添加如下内容:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"   
         memcachedNodes="n1:10.66.121.134:9101"   
         requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"   
         sessionBackupAsync="false"   
         sessionBackupTimeout="100"   
    sticky="false"
         transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"   
         copyCollectionsForSerialization="false" />
其中n1为已备好的支持memcached协议的缓存服务器,可以设置多个,此处为ckv服务器,manager其他选项和说明可[ 参照这里].

安装nginx服务器

配置好所有tomcat服务器之后,需要安装nginx服务器,以实现负载均衡的功能,确保nginx起始页可以正常打开之后,打开nginx目录下的nginx.conf文件,添加如下内容:
upstream tomcats {
    server 10.104.37.25:8080 weight=1;
    server 10.104.42.64:8080 weight=1;
}
server {
    listen    13355;
    server_name    tomcats;
    charset utf-8;
    location / {
        proxy_pass    http://tomcats;
        proxy_redirect    off;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
这里我把监听端口改为了13355,tomcats里面的两个ip为两个tomcat服务器,weight为权重,为了便于观察效果,将权重设为相同。

编写测试代码

最后,我们需要实现jsp页面,测试结果,jsp页面示例代码如下:
<%@ page language="java" import="java.util.*,java.net.InetAddress" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'ShowSessionJsp.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <%
        
        out.println("Session id is " + session.getId());%>
        <br/>
        <% 
        out.println("Server IP is "+InetAddress.getLocalHost().getHostAddress());%>
        <br/>
        <% 
        out.println("Server name is "+request.getServerName());
    %>
  </body>
</html>

测试结果

访问nginx服务器 http://119.29.82.140:13355/ShareSession/ShowSession,反复刷新页面,测试结果:
Session id is 5526F95AEB3#88C6F1C0B9C7A5B92E23-n1
Server IP is 127.0.0.1
Server name is tomcats

Session id is 5526F95AEB3E88C6F1C0B9C7A5B92E23-n1
Server iIP is 10.104.42.64
Server name is tomcats
其中一个tomcat服务器与nginx在同一台机器上,可以看到ip地址在变化,session id保持不变,说明共享session成功.通过Manager中的设置还可以设置多个缓存节点,实现缓存服务器的容灾,此处不做赘述。另:负载均衡还可以通过apache等方式实现.

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 155
博文 890
码字总数 4537901
作品 0
广州
程序员
加载中

评论(1)

李嘉图
李嘉图
学习
告诉你 SQL 数据库与 NoSQL 数据库的区别

简单来说 SQL 数据库和 NoSQL 数据库有着共同的目标:存储数据,但存储的方式不同 一. 表 SQL中的表结构具有严格的数据模式约束: 存储数据很难出错。 NoSQL存储数据更加灵活自由:可能导致数...

Howie_Y ⋅ 06/05 ⋅ 0

GridDB 社区版本 4.0 发布,高度可扩展 NoSQL 数据库

GridDB 社区版本 4.0 发布了,GridDB 是一款高度可扩展的 NoSQL 数据库,具有高可靠性和高性能等特性,非常适用于物联网和大数据领域。 此版本带来了实用和便利的功能,包括: 容器/集群名称...

雨田桑 ⋅ 06/01 ⋅ 0

Oracle MySQL Or NoSQL?(转载)

转载: 作者:Sky.Jian (简朝阳) 链接:http://isky000.com/database/oracle-mysql-or-nosql-2 一些英文缩写的含义: Nosql: not only sql OLTP: 联机事务处理 OLAP:联机分析处理 去IOE:摆...

付磊-起扬 ⋅ 2015/09/12 ⋅ 0

21.2 memcached介绍;21.2 memcached介绍;21.3 安装memcached

21.2 memcached介绍 什么是NoSQL? 1. 非关系型数据库就是NoSQL,关系型数据库代表MySQL 2. 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹...

主内安详 ⋅ 05/22 ⋅ 0

NoSQL数据库介绍、memcached安装

NoSQL数据库 什么是NoSQL数据库? 非关系型数据库就是NoSQL,关系型数据库代表MySQL; 关系型数据库,是需要吧数据存储到库、表、行、字段中,查询需要根据条件一行行的匹配,需要从磁盘中检...

若白衣 ⋅ 05/21 ⋅ 0

2018-5-21 NoSQL、memcached安装

21.1 nosql介绍 ·什么是NoSQL ·非关系型数据库就是NoSQL,关系型数据库代表MySQL ·对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当...

alexis7gunner ⋅ 05/21 ⋅ 0

nginx笔记4-负载均衡带来的问题以及解决办法

接着笔记3,将笔记三的改造一下,现在分别启动两个Tomcat,在页面获取session。如图所示: tomcat2的session: tomcat1的session: 根据上图发现,每个tomcat取到的session不一样。因此nginx负...

狂小白 ⋅ 01/20 ⋅ 0

企业竞争加剧,数据治理和NoSQL大放异彩

  【IT168 评论】数字化转型是现代企业的大趋势,开发独特的应用程序已经成为推动业务向前发展的核心了。Couchbase 数字化创新调查针对美国、英国、法国和德国450家数字化转型企业进行了调...

it168网站 ⋅ 05/31 ⋅ 0

XRZZYW带领你领略Nginx的强大,结合MM的风骚

@font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋体"; }@font-face { font-family: "Calibri"; }@font-face { font-family: "DejaVu Sans"; }@font-face { fo......

Xc__ ⋅ 04/12 ⋅ 0

存储大量爬虫数据的数据库,了解一下?

"当然, 并不是所有数据都适合" 在学习爬虫的过程中, 遇到过不少坑. 今天这个坑可能以后你也会遇到, 随着爬取数据量的增加, 以及爬取的网站数据字段的变化, 以往在爬虫入门时使用的方法局限性...

fesoncn ⋅ 04/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 29分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 41分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部