nginx+tomcat8+memcached实现session共享具体操作

本次试验用到的软件包的版本如下:

一、针对10.43.2.134的操作

1.安装jdk环境

tar zxf jdk-8u5-linux-x64.tar.gz

mkdir /usr/java

mv jdk1.8.0_05/ /usr/java/

编辑/etc/profile

在文档的末尾追加如下5行内容:

JAVA_HOME=/usr/java/jdk1.8.0_05

JRE_HOME=/usr/java/jdk1.8.0_05/jre

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

CLASSPATH=.:${JAVA_HOME}/lib/:$JRE_HOME/lib

export JAVA_HOME JRE_HOME PATH CLASSPATH

[[email protected] jdk1.8.0_05]# source /etc/profile

查看Java的版本

[[email protected] ~]# java -version

java version "1.8.0_05"

Java(TM) SE Runtime Environment (build 1.8.0_05-b13)

Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

2.安装Tomcat

tar zxvf apache-tomcat-8.0.8.tar.gz

mv apache-tomcat-8.0.8 /usr/local/tomcat/

#默认tomcat是root身份运行的,这样不安全,我们设置来用普通用户

groupadd tomcat

useradd -g tomcat tomcat

passwd tomcat

chown tomcat.tomcat -R /usr/local/tomcat

su – tomcat /usr/local/tomcat/bin/startup.sh

echo “su – tomcat /usr/local/tomcat/bin/startup.sh” >> /etc/rc.local  #开机启动

确认服务是否启动成功:http://localhost:8080

同样的方式再部署一个tomcat,端口号:8081

tar zxvf apache-tomcat-8.0.8.tar.gz

mv apache-tomcat-8.0.8 /usr/local/tomcat2

chown tomcat.tomcat -R /usr/local/tomcat2

编辑 /usr/local/tomcat2/conf/server.xml

三处修改分别是:

su – tomcat /usr/local/tomcat2/bin/startup.sh

echo “su – tomcat /usr/local/tomcat2/bin/startup.sh” >> /etc/rc.local

确认服务是否启动成功:http://localhost:8081

3.制作tomcat服务器测试页,并测试访问

分别在$CATALINA/webapps/ROOT/下建立测试页面t.jsp

# vim /usr/local/tomcat/webapps/ROOT/t.jsp

<html>

<body bgcolor="green">

<center>

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

<h1>10.43.2.134</h1>

<h1>port:8080</h1>

</center>

</body>

</html>

# vim /usr/local/tomcat2/webapps/ROOT/t.jsp

<html>

<body bgcolor="red">

<center>

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

<h1>10.43.2.134</h1>

<h1>port:8081</h1>

</center>

</body>

</html>

打开http://10.43.2.134:8080/t.jsp和http://10.43.2.134:8081/t.jsp可以看到不同的页面

二、针对10.43.2.135的操作

  1. nginx的安装

安装依赖包:yum -y install gcc openssl-devel pcre-devel zlib-devel

安装nginx

useradd nginx -s /sbin/nologin

tar zxvf nginx-0.8.46.tar.gz

cd nginx-0.8.46/

./configure --user=nginx--group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module  && make  &&  make install

启动服务:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

[[email protected] ~]# netstat -anpt|grep nginx

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      7920/nginx

测试nginx默认web服务器是否能正常运行

设置nginx开机自动启动

[[email protected] ~]# echo "/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf" >> /etc/rc.local

[[email protected] ~]# cat /etc/rc.local | grep nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

nginx的启动脚本

#编写nginx启动、停止、重启的管理脚本,方便使用

cat /etc/init.d/nginx

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

#

# chkconfig: - 85 15

# description: Nginx is an HTTP(S) server, HTTP(S) reverse \

#   proxy and IMAP/POP3 proxy server

# processname: nginx

# config: /etc/nginx/nginx.conf

# config: /etc/sysconfig/nginx

# pidfile: /var/run/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

killall -9 nginx

}

restart() {

configtest || return $?

stop

sleep 1

start

}

reload() {

configtest || return $?

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

[[email protected] init.d]# chmod 755 nginx

[[email protected] init.d]# chkconfig --add nginx

[[email protected] init.d]# chkconfig --level 35 nginx on

[[email protected] init.d]# chkconfig --list | grep nginx

nginx           0:off   1:off   2:off   3:on    4:off   5:on    6:off

测试nginx脚本文件是否能够正常使用

[[email protected] init.d]# /etc/init.d/nginx restart

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

Stopping nginx:                                            [  OK  ]

Starting nginx:                                            [  OK  ]

[[email protected] init.d]# /etc/init.d/nginx reload

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

Reloading nginx:                                           [  OK  ]

[[email protected] ~]# cat /usr/local/nginx/logs/nginx.pid

15799

[[email protected] ~]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

[[email protected] init.d]# /etc/init.d/nginx stop

Stopping nginx:                                            [  OK  ]

2.编辑nginx的主配置文件,实现对10.43.2.134上两个tomcat的代理

cat nginx.conf

user  nginx nginx;

worker_processes  1;

error_log  logs/error.log;

pid        logs/nginx.pid;

events {

worker_connections  1024;

}

http {

include       mime.types;

default_type  application/octet-stream;

log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘

‘$status $body_bytes_sent "$http_referer" ‘

‘"$http_user_agent" "$http_x_forwarded_for"‘;

#access_log  logs/access.log  main;

sendfile        on;

#tcp_nopush     on;

#keepalive_timeout  0;

keepalive_timeout  65;

#gzip  on;

upstream tomcatweb {

server 10.43.2.134:8080;

server 10.43.2.134:8081;

}

server {

listen       80;

server_name  localhost;

#charset koi8-r;

#access_log  logs/host.access.log  main;

location / {

root   html;

index  index.html index.htm;

proxy_pass http://tomcatweb;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

}

3.重新加载nginx服务并验证

重新加载:/etc/init.d/nginx reload

验证:可以看到nginx已经成功代理10.43.2.134上的两个tomcat,访问http://10.43.2.135/t.jsp能够正常访问到10.43.2.134:8080/test.jsp和http://10.43.2.134:8081/test.jsp交替出现,并且session  id 刷新一次变化一次。

4.安装memcache

安装libevent

注:memcached是基于libevent进行事件处理的,所以我们得先安装libevent

[[email protected] src]# tar xf libevent-2.0.21-stable.tar.gz

[[email protected] src]# cd libevent-2.0.21-stable

[[email protected] libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent

[[email protected] libevent-2.0.21-stable]# make && make install

安装memcached

[[email protected] src]# tar xf memcached-1.4.15.tar.gz

[[email protected] src]# cd memcached-1.4.15

[[email protected] memcached-1.4.15]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent

[[email protected] memcached-1.4.15]# make && make install

[[email protected] ~]# memcached -d -m 500 -u root -l 192.168.18.201 -c 256 -P /tmp/memcached.pid -vvv

查看一下启动端口

[email protected] ~]# netstat -ntulp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 192.168.18.201:11211        0.0.0.0:*                   LISTEN      8086/memcached

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1026/sshd

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1103/master

tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      1137/sshd

tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      8044/sshd

tcp        0      0 :::22                       :::*                        LISTEN      1026/sshd

tcp        0      0 ::1:25                      :::*                        LISTEN      1103/master

tcp        0      0 ::1:6010                    :::*                        LISTEN      1137/sshd

tcp        0      0 ::1:6011                    :::*                        LISTEN      8044/sshd

udp        0      0 192.168.18.201:11211        0.0.0.0:*                               8086/memcached

提供SysV的startup脚本

[[email protected] ~]# vim /etc/init.d/memcached

#!/bin/bash

#

# Init file for memcached

#

# chkconfig: - 86 14

# description: Distributed memory caching daemon

#

# processname: memcached

# config: /etc/sysconfig/memcached

. /etc/rc.d/init.d/functions

## Default variables

PORT="11211"

USER="root"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

RETVAL=0

prog="/usr/local/memcached/bin/memcached"

desc="Distributed memory caching"

lockfile="/var/lock/subsys/memcached"

start() {

echo -n $"Starting $desc (memcached): "

daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE  $OPTIONS

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch $lockfile

return $RETVAL

}

stop() {

echo -n $"Shutting down $desc (memcached): "

killproc $prog

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f $lockfile

return $RETVAL

}

restart() {

stop

start

}

reload() {

echo -n $"Reloading $desc ($prog): "

killproc $prog -HUP

RETVAL=$?

echo

return $RETVAL

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

condrestart)

[ -e $lockfile ] && restart

RETVAL=$?

;;

reload)

reload

;;

status)

status $prog

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|restart|condrestart|status}"

RETVAL=1

esac

增加执行权限

[[email protected] ~]# chmod +x /etc/init.d/memcached

加入服务列表并设置开机自启动

[[email protected] ~]# chkconfig --add memcached

[[email protected] ~]# chkconfig memcached on

[[email protected] ~]# chkconfig memcached --list

memcached          0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭

三 、如何实现memcached session共享

以下操作在每个tomcat上都需要执行

  1. 在$CATALINA/lib中添加如下jar包

jar包的下载地址:http://down.51cto.com/data/1634273

2.修改配置文件context.xml

在context.xml中添加如下内容

<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:10.43.2.135:11211"

sticky="false"

sessionBackupAsync="false"

lockingMode="none"

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

transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"/>

3.重启tomcat服务并进行验证

再次http://10.43.2.135/t.jsp 可以看到10.43.2.134:8080/t.jsp和http://10.43.2.134:8081/t.jsp交替出现,端口变化,session  id保持不变

nginx+tomcat8+memcached实现session共享具体操作

时间: 2024-10-13 15:01:13

nginx+tomcat8+memcached实现session共享具体操作的相关文章

nginx+tomcat8+memcached实现session 共享

操作环境: iP地址 角色 安装软件 10.43.2.135 nginx方向代理 memcached服务器 nginx   memcached 10.43.2.134 tomcat服务器 2个tomcat(端口分别为8080 8081) 实验中使用的软件如下: 实现思路: 第一步:针对10.43.2.134的操作 1.在10.43.2.134上安装2个tomcat 2.在$CATALINA/webapps/ROOT/下建立测试页面t.jsp 3.分别启动2个tomcat服务 4.打开http:/

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 以下是我的主配置文件,请根据自己情况进行修改

NGINX + TOMCAT7 + MEMCACHED 实现SESSION 共享

TOMCAT7.0+ NGINX + MEMCACHED + memcached-session-manager 实现SESSION共享 http://blog.csdn.net/nerissa/article/details/18961361  ; //参考博客 http://pan.baidu.com/s/1pJlZ0mB    //相关包下载,含lib所需的jar包 环境:centOS 6.5(64位) .jdk8_8u5 .tomcat7.054.nginx1.47.libevent-2

【电商】nginx+tomcat+memcached实现session共享集群

在分布式多tomcat web集群环境下,首先要解决的是session的共享问题,一般的实现思路有: (1) session复制:多tomcat之间进行session的同步,集群中的tomcat存储相同的session信息 (2) 共享session存储:将session集中存储在同一个地方,如redis/memcached,甚至DB.tomcat本身的内存中并不存储session (3) session粘性:其实session粘性并不是session共享的方案,而是多tomcat的集群方案,配

nginx+tomcat+memcached构建session共享集群

一.安装配置tomcat 配置前说明: 系统为centos7 m1.xsllqs.com地址为192.168.1.107 c1.xsllqs.com地址为192.168.1.114 c2.xsllqs.com地址为192.168.1.113 安装tomcat需要配合JDK使用,JDK有oracle JDK和open JDK两种 oracle JDK8的下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-down

nginx+tomcat+memcached实现session共享

一.工作原理及原理图<img class="alignnone wp-image-31" src="http://119.29.25.60/wp-content/uploads/2016/04/图片1.bmp" alt="图片1" width="342" height="254" />工作原理        Tomcat中自带缓存功能.Memcached时一个集中式缓存器,可以利用tomcat和

Nginx + Memcached 实现Session共享的负载均衡

session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次.所以要实现session共享. 方法 1.ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题 优点:不需要采用任何处理: 缺

Memcached实现Session共享

一.memcached安装 1. memcached安装和启动.查看进程 安装扩展源 yum install -y epel-release 安装软件.组件.工具包 yum install -y libevent memcached libmemcached 启动 /etc/init.d/memcached start 进程 ps aux |grep memcached 解释: -d  启动一个守护进程 -p  监听的端口,默认11211 -u  运行memcached用户 -m 内存大小,单位

Tomcat基于MSM+Memcached实现Session共享

前言 在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享. 相关介绍 MSM MSM--Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用Memcached存取Session,以实现高可用. 工作原理 Sticky Session(黏性) 模式