1. nginx+tomcat7+memcached

安装JDK7
sudo apt-get install java7-jdk

安装tomcat7
Tomcat7下载地址
http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-7/v7.0.34/bin/

找到apache-tomcat-7.0.34.tar.gz
解压 sudo tar xvzf apache-tomcat-7.0.34.tar.gz
移动tomcat sudo mv apache-tomcat-7.0.34 /data/game-web/

启动tomcat
/data/game-web/apache-tomcat-7.0.34/bin/startup.sh
查看是否正常启动,tomcat 端口默认为 8080

关闭tomcat
/data/game-web/apache-tomcat-7.0.34/bin/ shutdown.sh

Tomcat7必须增加java包,下载地址:
http://memcached-session-manager.googlecode.com/files/memcached-session-manager-tc7-1.6.1.jar
http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.6.1.jar
http://spymemcached.googlecode.com/files/spymemcached-2.8.0.jar

下载好后复制到/data/game-web/apache-tomcat-7.0.34/lib 目录下

修改/data/game-web/apache-tomcat-7.0.34/ server.xml 文件找到Engine标签修改如下内容
<Engine name="Catalina" defaultHost="localhost">

修改
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

每一个 t omcat 的jvmRoute名都不同

修改/data/game-web/apache-tomcat-7.0.34/context.xml 文件找到Context 标签增加如下内容

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="node1:localhost:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sticky="false"
sessionBackupAsync="false" />

或者修改/data/game-web/apache-tomcat-7.0.34/server.xml 文件在Host标签增加如下内容
<Context path="" docBase="/web/url" reloadable="true" crossContext="true" >

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="node1:192.168.130.101:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sticky="false"
sessionBackupAsync="false"
/>
</ Context>

Manager标签属性说明:

className此属性是必须的。

memcachedNodes此属性是必须的。这个属性必须包含你所有运行的memcached节点。每个节点的定义格式为<id>:<host>:<port>。多个之间用空格或半角逗号隔开(如:memcachedNodes="n1:localhost:11211,n2:localhost:11212")。如果你设置单个memcache节点<id>是可选的,所以它允许设置为<host>:<port>(memcachedNodes="localhost:11211")。

failoverNodes可选项,属性只能用在非粘连Session机制中。此属性必须包含memcached节点的Id,此节点是Tomcat作为备份使用。多个之间用空格或逗号隔开

memcachedProtocol可选项,默认为text。出属性指明memcached使用的存储协议。只支持text或者binary。

sticky 可选项,默认为true。
指定使用粘性的还是非粘性的Session机制。

lockingMode 可选项, 此属性只对非粘性Session有用,默认为none。
指定非粘性Session的锁定策略。他的只有
(1)、none:从来不加锁
(2)、all: 当请求时对Session锁定,直到请求结束
(3)、auto:对只读的request不加锁,对非只读的request加锁
(4)、uriPattern:<regexp>: 使用正则表达式来比较requestRUI + "?" + queryString来决定是否加锁,

requestUriIgnorePattern 可选项

此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。

sessionBackupAsync 可选项,默认true
指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。

backupThreadCount 可选项,默认为CPU内核数。用来异步保存Session的线程数(如果sessionBackupAsync="true")。

sessionBackupTimeout 可选项,默认100,单位毫秒
设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync="false"是起作用。默认100毫秒

sessionAttributeFilter 可选项 从1.5.0版本有此属性是用来控制Session中的那个属性值保存到Memcached中的正则表达式。郑则表达式被用来匹配Session中属性名称。如

sessionAttributeFilter="^(userName|sessionHistory)$" 指定了只有"userName"和"sessionHistory"属性保存到Memcached中。依赖于选择的序列化策略。

transcoderFactoryClass 可选,默认为
de.javakaffee.web.msm.JavaSerializationTranscoderFactory 此属性值是创建序列化和反序列化保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm-javolution-serializer.

copyCollectionsForSerialization 可选项,默认false。

customConverter 可选项

enableStatistics 可选项,默认true用来指定是否进行统计。

enabled 可选项,默认true指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。

安装nginx
sudo apt-get install nginx

修改 nginx.conf 文件
找到http {},在http{}增加以下内容

upstream monitor.zqgame.com {
ip_hash; #同一个客户IP的请求分配给同一个后台服务器
server 192.168.120.17:80 ;#应用 1
server 192.168.120.16:80 ;#应用2

}
# monitor.zqgame.com 为拦截的域名
server {
server_name monitor.zqgame.com;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://monitor.zqgame.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /log/nginx/monitor.zqgame.com_access.log access;
}

测试:
结果就是,seesion ID会随着每次用户的提交而变换节点,但ID不变。
例如:
JSESSIONID=CFC1ACAC6B0B8C27BEA76919F3A99BF8-node1.jvm1
CFC1ACAC6B0B8C27BEA76919F3A99BF8为session会话id
node1为memcache 的id
jvm1为 jvmRoute 的值

后台打印日志
/data/game-web/apache-tomcat-7.0.34/conf/logging.properties 文件中添加de.javakaffee.web.msm.level=FINE , 就可以在
catalina.out 的日志中看到详细的session 存取情况

tomcat session 共享的更多相关文章

  1. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...

  2. Session会话保持机制的原理与Tomcat Session共享的几种实现方式(Session Cluster、memcached+MSM)

    一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除. ...

  3. 负载均衡下 tomcat session 共享

    概述 在分布式部署的情况下,每台tomcat 都会有自己的session ,这样如果 用户A 在tomcat1 下登录,在tomcat2 下并没有session信息.如果 tomcat1宕机,tomc ...

  4. nginx+tomcat+session共享(转)

    1 起因   最近对新开发的web系统进行了压力测试,发现tomcat默认配置下压到600人的并发登录首页响应速度就有比较严重的影响,一轮出现2000多个的 500和502错误.我把登录的时间统计做了 ...

  5. 【nginx】nginx tomcat session 共享配置

    tomcat,redis下载忽略. 一.从github上下载源码,https://github.com/jcoleman/tomcat-redis-session-manager, 将源码复制到开发工 ...

  6. tomcat session共享

    1.版本 redis3.2   nginx   tomcat8.5 2.下载jar包  tomcat-cluster-redis-session-manager 解压后大家可以看看 readMe.tx ...

  7. 浅谈负载均衡之【tomcat分布式session共享】

    1)整理集成所需jar kryo-1.0.3.jar kryo-serializers-0.8.jar memcached-2.4.2.jar memcached-session-manager-1. ...

  8. Tomcat利用MSM实现Session共享方案解说

    Session共享有多种解决方法,常用的有四种:1)客户端Cookie保存2)服务器间Session同步3)使用集群管理Session(如MSM) 4)把Session持久化到数据库 针对上面Sess ...

  9. Tomcat通过Memcached实现session共享的完整部署记录

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

随机推荐

  1. SpringCloud学习(一):微服务简介

    一.前情概要 1.单体架构是什么 1).一个归档包包含了应用所有功能的应用程序, 我们通常称之为单体应用. 2).架构单体应用的架构风格, 我们称之为单体架构, 这是一种比较传统的架构风格. 2.单体 ...

  2. WPF BackGroundWord 异步加载更新进度条示例

    <Window x:Class="AsynchronousLoading.MainWindow" xmlns="http://schemas.microsoft.c ...

  3. linux下定时执行任务的方法

    linux下定时执行任务的方法 在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINUX ...

  4. vb.net 使用ip查詢(Host Name)(WorkGroup Name)(MAC Address)-運用cmd及nbtstat命令

    Sub nbtstat(ByVal ip As String) Dim strRst, strRst1, strRst2, strRst3 As String Dim n1, n2, n3 As In ...

  5. [日常] PHP库函数fgetss的BUG

    1. fgetss函数php官网的解释是: (PHP 4, PHP 5, PHP 7)  fgetss — 从文件指针中读取一行并过滤掉 HTML 标记 2. 测试后出现的问题是: 当文本中有一行数据 ...

  6. mybatis笔记02

    目录 0. 文章目录 1. Mybatis映射文件 1.1 输入映射 1.2 输出映射 1.3 resultMap 2. 动态SQL 2.1 if和where 2.2 foreach循环 2.3 sq ...

  7. Android Studio 学习(四) 数据库

    文件存储 写数据 String data = "Data ti save"; FileOutputStream out =null; BufferedWriter writer = ...

  8. 内省(Introspector)

    /** * 内省:通过反射来操作javabean * 内省类 --> Bean信息 --> 属性描述符 --> 属性的get/set对应的Method --> 进行反射 * c ...

  9. MR程序本地调试,提交到集群运行

    在本地调试,提交到集群上运行. 在本地程序中的Configuration中添加如下配置: Configuration conf = new Configuration(); conf.set(&quo ...

  10. Powershell中显示隐藏文件

    PS> Get-ChildItem -Path $home -Force PS> Get-ChildItem -Path $home -Hidden