1. 程式人生 > >nginx+tomcat8+memcached實現session共享

nginx+tomcat8+memcached實現session共享

and /var/ port opp def location apps rate 自己

安裝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共享