nginx+tomcat8+memcached實現session共享
安裝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共享