文档章节

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

五大三粗
 五大三粗
发布于 2015/11/27 19:27
字数 754
阅读 254
收藏 30
要实现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等方式实现.

© 著作权归作者所有

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

评论(1)

李嘉图
李嘉图
学习
NoSQL开篇——为什么要使用NoSQL

http://nosql-database.org/ NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面。今年伊始,InfoQ中文站有幸邀请到凤凰网的...

mickelfeng
2013/02/04
0
1
NoSQL开篇——为什么要使用NoSQL

【编者按】NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面。今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分...

Mr&Cheng
2013/01/20
0
0
redis笔记 (番外篇)——从RDBMS到NoSQL的架构演化及CAP原理

从RDBMS到NoSQL的架构演化 互联网时代背景下大机遇,为什么用nosql 1 单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。 在那个时候,更多的都是静...

HappyBKs
2017/10/28
0
0
从RDBMS到NoSQL的架构演化

从RDBMS到NoSQL的架构演化 互联网时代背景下大机遇,为什么用nosql 1 单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。 在那个时候,更多的都是静...

浮躁的码农
2017/11/06
0
0
MySQL/HandlerSocket和VoltDB:NoSQL的竞争者

一般认为NoSQL数据库在性能方面要优于传统的SQL数据库。但是有两个SQL的解决方案宣布:对于大型系统的高可扩展性需求,SQL仍然是可行的解决方案!这两个SQL解决方案分别是MySQL加NoSQL层插件...

wkh
2014/01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

idea 通过jpa自动生成实体类

引入jpa包 打开persistence窗口 右键选择连接数据库 如果数据库没配置,则可以在下图选项中配置 选择好数据库和实体类的生成地址

斩神魂
30分钟前
1
0
tcpdump 命令

TCPDUMP简介 tcpdump 是一个很常用的网络包分析工具,可以用来显示通过网络传输到本系统的 TCP/IP 以及其他网络的数据包。tcpdump 使用 libpcap 库来抓取网络报,这个库在几乎在所有的 Linu...

寰宇01
37分钟前
2
0
软件的Alpha、Beta、RC、GA版本的区别

Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。 Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。 RC:(Release Candidate) 顾名思义...

乔老哥
39分钟前
2
0
慢雾安全海贼王:从DApp亡灵军团,细说区块链安全

本文转载自微信公号“万向区块链”,为慢雾安全负责人海贼王在万向区块链实验室举办的2018上海区块链国际周-技术开放日上的演讲速记整理。 这张图总结了智能合约攻防的各个方面,分为两大部分...

万向区块链
44分钟前
13
0
Matlab编程之——卷积神经网络CNN代码解析

卷积神经网络CNN代码解析 deepLearnToolbox-master是一个深度学习matlab包,里面含有很多机器学习算法,如卷积神经网络CNN,深度信念网络DBN,自动编码AutoE ncoder(堆栈SAE,卷积CAE)的作...

酒逢知己千杯少
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部