nginx+tomcat9+memcached-session-manager会话共享

nginx+tomcat9+memcached-session-manager会话共享

环境搭建

代理服务器:外网地址:10.0.0.5 内网地址:172.16.1.5
tomcat服务器:外网地址:10.0.0.10 内网地址:172.16.1.10
memcache服务器:外网地址:10.0.0.21 内网地址:172.16.1.21

第一个里程:nginx服务安装

http://1a7f2dd7.wiz03.com/share/s/0qvOTn10-AEH29_zxM18oPGG1QICGl14RkIx2GujYl2NuYca

第二个里程:安装memcache服务,并启动memcahed服务

yum -y install memcached
systemctl start memcatched

第三个里程:安装jdk与tomcat服务

下载JDK https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
在/etc/profile中添加
tar xf jdk-8u201-linux-x64.tar.gz
mv jdk1.8.0_201/ /application/
ln -s jdk1.8.0_201/ /application/jdk
编辑/etc/profile文件,进行添加
export JAVA_HOME=/application/jdk
export PATH=$PATH:$JAVA_HOME/bin;
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version
下载tomcat软件
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.17/bin/apache-tomcat-9.0.17.tar.gz
tar xf apache-tomcat-9.0.17.tar.gz
创建多个实例
cp -a apache-tomcat-9.0.17 /application/tomcat9
cp -a apache-tomcat-9.0.17 /application/tomcat9_1
cd /application/

第四个里程:修改index.jsp页面,修改tomcat的端口信息

<html>
    <body>
    <center>
    <%=  request.getSession().getId()  %>
    <h1>10.0.0.10</h1>
    <h1>port:8081</h1>
    <h1>this is Tomcat-node1 ! </h1>
    </center>
    </body>
</html>

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>
SessionID:<%=session.getId()%><BR>
SessionIP:<%=request.getServerName()%> <BR>
SessionPort:<%=request.getServerPort()%>
<%     out.println("This is Tomcat server 201 !");     %>
#修改tomcat端口
sed -i 's#8005#8006#;s#8080#8081#';s#8009#8010# tomcat9/conf/server.xml
sed -i 's#8005#8007#;s#8080#8082#;s#8009#8011#g' tomcat9_1/conf/server.xml
#启动tomcat服务
/application/tomcat9/bin/startup.sh
/application/tomcat9_1/bin/startup.sh

第五个里程:修改nginx服务器的配置文件,启动nginx服务

[root@lb01 ~]# cat /application/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream jsp {
       server 10.0.0.10:8081;
       server 10.0.0.10:8082;
    }
    server {
        listen  10.0.0.5:80;
        server_name jsp.etiantian.org;
        location / {
           proxy_pass http://jsp;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
}
/application/nginx/sbin/nginx

第六个里程:下载memcached-session-manager依赖包jar包(这里使用的是kryo序列化,如里使用其它方式需要下载相对的jar包)

官方文档:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
memcached-session-manager-tc9-2.3.2.jar下载地址:http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager
spymemcached-2.12.3.jar下载地址:http://repo1.maven.org/maven2/net/spy/spymemcached/
msm-kryo-serializer-2.3.2.jar下载地址: http://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/
kryo-serializers-0.45.jar下载地址:http://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/
kryo-4.0.2.jar下载地址:http://repo1.maven.org/maven2/com/esotericsoftware/kryo/
 minlog-1.3.1.jar下载地址:http://repo1.maven.org/maven2/com/esotericsoftware/minlog/
 reflectasm-1.11.9.jar下载地址:http://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/
asm-7.1.jar下载地址:http://repo1.maven.org/maven2/org/ow2/asm/asm/
objenesis-3.0.1.jar下载地址:http://repo1.maven.org/maven2/org/objenesis/objenesis/
memcached-session-manager-2.3.2.jar下载地址:http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/

特别注意:
memcached-session-manager-tc9-2.3.2.jar中的tc8为tomcat的版本号。
一定要注意:不同版本号的tomcat,对应的msm包也不同。此处为tomcat9的jar包。

接下来进行序列化tomcat配置,序列化tomcat配置的方法有很多种:
java默认序列化tomcat配置、javolution序列化tomcat配置、xstream序列化tomcat配置、flexjson序列化tomcat配置和kryo序列化tomcat配置。
官网介绍说 使用kryo序列化tomcat的效率最高,所以这里只介绍kryo序列化。

第七个里程:将下载好的jar包复制到tomcat下面的lib下(如有多个实例都需要进行相同的操作)

cp ./* /application/tomcat9/lib/
cp ./* /application/tomcat9_1/lib/

第八个里程:修改tomcat/conf下面的context.xml配置文件(在No-Stick模式和Stick模式下context.xml文件配置也有所不同,一般用的是No-Stick模式)

#No-Stick模式
[root@java01 application]# vim tomcat9/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        <!--此处是填写memcahed服务器地址,如有多个用逗号分开  -->
         memcachedNodes="n1:172.16.1.21: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"
/>
在第一个实例中配置好后,复制到另一个实例相同的路径下即可

#Stick模式
故障转移配置节点(failoverNodes),不能使用在Non-Sticky模式,多个使用空格或逗号分开,配置某个节点为备份节点。
当其他节点都不可用时才会存储到备份节点,适用于sticky模式(即一台tomcat,多台memcached)。
[root@java01 application]# vim tomcat9/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
             memcachedNodes="n1:172.16.1.21:11211,n2:172.16.1.22:11211" #多个memcached之间用空格或逗号隔开都可以的
             sticky="true"
             failoverNodes="n2"                                           
             requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|swf|flv)$"
             transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
             copyCollectionsForSerialization="true"
/>

Manager 各参数说明:

memcachedNodes 必选项,memcached的节点信息,多个memcached节点,中间需要使用空格

failoverNodes="n2"  表示当前session保持到n1的memcached节点上
failoverNodes  可选项,不能使用在non-sticky sessions模式。故障转移配置节点,多个使用空格或逗号分开,配置某个节点为备份节点,
当其他节点都不可用时才会存储到备份节点,官方建议配置为和tomcat同服务器的节点。
理由如下:
假如有两台服务器m1,m2,其中m1部署tomcat和memcached节点n1,m2部署memcached节点n2。
如果配置tomcat的failoverNodes值为n2或者不配置,则当服务器m1挂掉后n1和tomcat中保存的session会丢失,而n2中未保存或者只保存了部分session,
这就造成 部分用户状态丢失。
如果配置tomcat的failoverNodes值为n1,则当m1挂掉后因为n2中保存了所有的session,所以重启tomcat的时候用户状态不会丢失。
为什么n2中保存了所有的session? 因为failoverNodes配置的值是n1,只有当n2节点不可用时才会把session存储到n1,所以这个时候n1中是没有保存任何session的。
lockingMode  可选值,默认none,只对non-sticky有效。
requestUriIgnorePattern  可选值,制定忽略那些请求的session操作,一般制定静态资源如css,js一类的。
sessionBackupAsync    可选值,默认true,是否异步的方式存储到memcached。
sessionBackupTimeout  可选项,默认100毫秒,异步存储session的超时时间。

第九个里程:重启tomcat服务

pkill java
/application/tomcat9/bin/startup.sh
/application/tomcat9_1/bin/startup.sh

第十个里程:访问jsp.etiantian.org,按ctrl+F5强刷页面,发现session信息会变,但是sessionid不会改变!说明session实现了共享! 如下,表示当前sessionid保存到了n1这个memcached节点上了

nginx+tomcat9+memcached-session-manager会话共享
nginx+tomcat9+memcached-session-manager会话共享

上一篇:tomcat9 点击bin目录下的startup.bat一闪而过


下一篇:Tomcat9安装