Tomcat通过Memcached实现session共享的完整部署记录
既然已经看到该文,在此不对集群系统下实现session统一的方案做介绍----大牛有很详细的介绍
说下Memcached 此时2019年3月19日,对于这个缓存的技术已经是很老的技术,不知道什么时候被redis取缔了
该问记录Memcached的session复制;下篇文章对redis的session共享进行部署文档。
软件版本:
apache-tomcat-8.0.52
memcached-1.4.34.tar
条件:
正常使用的nginx
需要下载:
memcached-1.4.34.tar.gz ;点击下载~花积分
MSM的类库文件
对应版本使用的包,时间紧没时间挑,直接全下使用,避免出错。
方便下载,把文件名提供:
asm-5.2-javadoc.jar
asm-5.2-sources.jar
asm-5.2.jar
kryo-4.0.0-javadoc.jar
kryo-4.0.0-sources.jar
kryo-4.0.0.jar
kryo-serializers-0.38-javadoc.jar
kryo-serializers-0.38-sources.jar
kryo-serializers-0.38.jar
memcached-session-manager-1.9.7-javadoc.jar
memcached-session-manager-1.9.7-sources.jar
memcached-session-manager-1.9.7-tests.jar
memcached-session-manager-1.9.7.jar
memcached-session-manager-tc8-1.9.7-javadoc.jar
memcached-session-manager-tc8-1.9.7-sources.jar
memcached-session-manager-tc8-1.9.7.jar
minlog-1.3.0-javadoc.jar
minlog-1.3.0-sources.jar
minlog-1.3.0-tests.jar
minlog-1.3.0.jar
msm-kryo-serializer-1.9.7-javadoc.jar
msm-kryo-serializer-1.9.7-sources.jar
msm-kryo-serializer-1.9.7.jar
objenesis-2.4-javadoc.jar
objenesis-2.4-sources.jar
objenesis-2.4.jar
reflectasm-1.11.3-javadoc.jar
reflectasm-1.11.3-shaded.jar
reflectasm-1.11.3-sources.jar
reflectasm-1.11.3.jar
spymemcached-2.12.2-javadoc.jar
spymemcached-2.12.2-sources.jar
spymemcached-2.12.2.jar
也可以去git下载:点击下载 文章里找链接
如果你还不想找,已经为你打包,需要花积分:点击下载解压
- 进行安装
yum -y install libevent libevent-devel
cd /usr/local/src/
( memcached-1.4.34.tar.gz 放到该目录下)
tar -zvxf memcached-1.4.34.tar.gz
cd memcached-1.4.34
yum install gcc gcc-c++ (本机有可以忽略)
./configure --prefix=/usr/local/memcached
make && make install
/usr/local/memcached/bin/memcached -d -m 512 -u root -p 11211 -c 1024 -P /var/lib/memcached.11211pid
ps -ef|grep memcached
yum install lsof
lsof -i:11211
安装直接一条一条的粘就可以
2.通过MSM实现共享session
需要把MSM依赖的jar包下载后全部上传到两台机器的tomcat安装路径的lib/ 目录下
asm-5.2.jar
kryo-4.0.0.jar
kryo-serializers-0.38.jar
memcached-session-manager-1.9.7.jar
memcached-session-manager-tc8-1.9.7.jar
minlog-1.3.0.jar
msm-kryo-serializer-1.9.7.jar
objenesis-2.4.jar
reflectasm-1.11.3.jar
spymemcached-2.12.2.jar
特别注意:
memcached-session-manager-tc8-1.9.7.jar中的tc8为tomcat的版本号。
一定要注意:不同版本号的tomcat,对应的msm包也不同。此处为tomcat8的jar包。
需要把上面这些MSM依赖的jar包下载后全部上传到两台机器的tomcat安装路径的lib/ 目录下
[[email protected] MSM_Software]# \cp -rf /usr/local/src/MSM_Software/* /usr/local/tomcat8/lib/
接下来进行序列化tomcat配置,序列化tomcat配置的方法有很多种:
java默认序列化tomcat配置、javolution序列化tomcat配置、xstream序列化tomcat配置、flexjson序列化tomcat配置和kryo序列化tomcat配置。
官网介绍说 使用kryo序列化tomcat的效率最高,所以这里只介绍kryo序列化。
在No-Stick模式和Stick模式下context.xml文件配置也有所不同
(一般用的是No-Stick模式)
只需要修改conf/context.xml文件:
[[email protected] ~]# cd /usr/local/tomcat8/conf/
[[email protected] conf]# cp context.xml context.xml.bak
No-Stick模式
记住:多个tomcat实例时 需要选择Non-Sticky模式,即sticky="false"
[[email protected] conf]# vim context.xml #在<Context>和</Context>之间添加下面内容.就在底部</Context>之前添加就行
.......
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.10.203:11211,n2:192.168.10.205:11211"
lockingMode="auto"
sticky="false"
sessionBackupAsync="false"
sessionBackupTimeout= "1000"
copyCollectionsForSerialization="true"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
第一台tomcat节点的congtext.xml配置好之后,再将该文件拷贝到另一台tomcat节点的相同路径下
java.net.NoRouteToHostException: 没有到主机的路由
解决:关闭防火墙:systemctl stop firewalld.service
可以访问查看session
查看session的index.jsp直接替换tomcat自带的index.jsp文件
index.jsp代码:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<html><head><title>Tomcat Cluster Demo</title></head>
<body>
Server Info:
<table aligh="center" border="1">
<tr>
<h1>192.168.135.114</h1>
<td>Session ID </td>
<td><%=session.getId() %>
</td>
<% session.setAttribute("abc","abc");%>
</tr>
<tr>
<td>Created on</td>
<td><%=session.getCreationTime() %>
</td>
</tr>
</table>
SessionIP:<%=request.getServerName()%> <BR>
SessionPort:<%=request.getServerPort()%>
</body>
</html>