nginx+tomcat8+memcached实现session共享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+tomcat8+memcached实现session共享相关的知识,希望对你有一定的参考价值。

安装nginx-1.13.8

安装jdk1.8.0_144

安装tomcat-8.5.24

安装memcached-1.4.15

下载tomcat8连接memcached所需jar包

官方参考资料:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration#decide-which-serialization-strategy-to-use


配置nginx

以下是我的主配置文件,请根据自己情况进行修改

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream tomcat_nginx {

        server 192.168.3.58:8080;

        server 192.168.3.54:8080;

        server 192.168.3.31:8080;

    }

    server {

        listen       80;

        server_name  localhost;

        location / {

            proxy_pass http://tomcat_nginx;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

配置nginx的启动脚本

#! /bin/bash

# Description: Startup script for webserver on CentOS. cp it in /etc/init.d and

# chkconfig --add nginx && chkconfig nginx on

# then you can use server command control nginx

#

# chkconfig: 2345 08 99

# description: Starts, stops nginx


set -e

PATH=$PATH:/usr/local/nginx/sbin/

DESC="nginx daemon"

NAME=nginx

DAEMON=/usr/local/nginx/sbin/$NAME

CONFIGFILE=/usr/local/nginx/conf/nginx.conf

#PIDFILE=/var/run/nginx.pid

PIDFILE=/usr/local/nginx/logs/nginx.pid

SCRIPTNAME=/etc/init.d/$NAME


# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0


d_start() {

$DAEMON -c $CONFIGFILE || echo -n " already running"

}


d_stop() {

kill -QUIT `cat $PIDFILE` || echo -n " not running"

}


d_reload() {

kill -HUP `cat $PIDFILE` || echo -n " can't reload"

}


case "$1" in

start)

echo -n "Starting $DESC: $NAME"

d_start

echo "."

;;

stop)

echo -n "Stopping $DESC: $NAME"

d_stop

echo "."

;;

reload)

echo -n "Reloading $DESC configuration..."

d_reload

echo "reloaded."

;;

restart)

echo -n "Restarting $DESC: $NAME"

d_stop

sleep 1

d_start

echo "."

;;

*)

echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2

exit 3

;;

esac

exit 0

感觉有必要搞个githup账号用来管理配置文件了


启动nginx


编写tomcat的测试页面,一下是两种格式的,都可以用(放在webapps/ROOT/)

<html>

    <body bgcolor="green">      

    <center>     

    <%=  request.getSession().getId()  %>     

    <h1>192.168.3.31</h1> 

    <h1>port:8080</h1>

    <h1>this is tomcat 1! </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 54 !");     %>

启动tomcat

tomcat访问测试

技术分享图片技术分享图片

nginx访问测试

技术分享图片技术分享图片

tomcat8+memcached实现会话共享

下载jar包

不同版本的tomcat使用的jar包可能会有区别,本测试使用的是tomcat-8.5.24

jar包详细列表及tomcat(注:jedis-2.9.0.jar是连接redis的jar包)

技术分享图片

修改conf/context.xml(每个tomcat)

这里是 non-sticky sessions + kryo,建议参考官方文档:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

<Context>

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

                <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

                   memcachedNodes="n1:192.168.3.31:11211"

                   sticky="false"

                   sessionBackupAsync="false"

                   lockingMode="none"

                   requestUriIgnorePattern=".*\.(ico|png|gif|jpg|jpeg|css|js)$"

                   sessionBackupTimeout="1000"

                   transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

                 />

</Context>

memcachedNodes是指定memcached,可以有多个节点,n1是标签,其他的靠猜

启动memcached,重启tomcat


访问测试

技术分享图片技术分享图片技术分享图片
技术分享图片技术分享图片技术分享图片

使用redis代替memcached

上面jar包里面jedis-2.9.0.jar就是连接redis的jar包,详情看官方的解释

测试失败(⊙﹏⊙)b


一堆版本不兼容的问题,尝试所有的jar包都用最新的结果不行

报错

技术分享图片

缺少jar包或版本冲突


参考:  https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration#decide-which-serialization-strategy-to-use

https://wenku.baidu.com/view/caecc5cf6037ee06eff9aef8941ea76e58fa4abd.html

以上是关于nginx+tomcat8+memcached实现session共享的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat8+Redis+Nginx实现集群

Nginx+tomcat+memcached实现session共享

Nginx反向代理+Tomcat+memcached实现session server

Nginx+Tomcat+Memcache实现负载均衡及Session共享

haproxy+nginx+tomcat+memcache实现动静分离会话同步集群

Tomcat+Memcached+Nginx实现session会话共享