redis Session会话共享
redis会话共享:
会话(session /sei/shen):是当前动态网站开发过程中的一个必要功能,用于保留客户对网站的操作状态的记录,从而实现网站的登录、添加购物车等交互式功能
会话的存储方式:
1、本地硬盘存储
2、数据库存储
为什么会需要会话:
http协议自身是无状态协议,是不会记录对网站的操作状态,但后续因为动态网站的出现,为了能够给用户提供便利以及更好服务,从而使用会话的功能,让用户可以在刷新网站后,之前对网站的操作不被丢失
cookie:也是用于保存访问网站的状态信息,与session不同的是,cookie保存在客户端,session保存在服务端,并且session可以存放的内容比cookie要多的多,所以目前已经很少再单用cookie保存状态信息了,通常都是cookie和session联用,session不保存状态信息,cookie只是保存相应的session ID号,来实现状态信息的记录与调用
nginx-tomcat配合redis-session实现会话共享
=nginx-tomcat配合redis-session实现会话共享==
案例环境:
nginx:192.168.40.14
tomcat1:192.168.40.15
tomcat2:192.168.40.16
redis:192.168.40.17部署环境=
==安装nginx=
yum -y install gcc gcc-c++ pcre-devel zlib-devel make
systemctl stop firewalld
setenforce 0
tar -xf nginx-1.6.0.tar.gz -C /usr/src/
useradd -M -s /sbin/nologin -r nginx
cd /usr/src/nginx-1.6.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/=====安装Tomcat=
tar -xf jdk-8u60-linux-x64.tar.gz
mv jdk1.8.0_60/ /usr/local/java
echo “export JAVA_HOME=/usr/local/java” >> /etc/profile
echo “export PATH=/usr/local/java/bin:$PATH” >> /etc/profile
. /etc/profile
echo $PATH
java -version
tar -xf apache-tomcat-8.5.41.tar.gz
mv apache-tomcat-8.5.41 /usr/local/tomcat
systemctl stop firewalld
setenforce 0=安装redis
yum -y install gcc gcc-c++
tar -xf redis-4.0.9.tar.gz
cd redis-4.0.9/
make
cd src/
mkdir -p /usr/local/redis
cp -p redis-server redis-cli redis-benchmark /usr/local/redis/
cp /root/redis-4.0.9/redis.conf /usr/local/redis/
cd /usr/local/redis/
ln -s /usr/local/redis/redis-cli /usr/bin/redis
systemctl stop firewalld
setenforce 0==配置redis主配置文件=
#将redis监听的网卡IP改成自身对外监听的网卡IP地址
sed -i "/^bind 127.0.0.1(ifconfig ens32 | awk 'NR2 {print $2}’)/g" redis.conf
#关闭redis的保护模式,类似linux的安全机制,所以必须关闭
sed -i ‘/protected-mode/s/yes/no/g’ redis.conf#开启redis后台守护进程模式,否则redis会在前台运行
sed -i ‘/daemonize/s/no/yes/g’ redis.conf#设置redis密码
sed -i ‘/requirepass/s/foobared/123123/g’ redis.conf#将redis密码那一行得注释去掉
sed -i ‘/requirepass 123123/s/^#//g’ redis.conf#修改日志文件存放路径及名称
sed -i ‘/logfile/s@""@"/var/log/redis.log"@g’ redis.conf#修改redis最大使用内存,需要小于主机内存或等于主机内存,可使用free -m查询主机内存
sed -i ‘/maxmemory /s//500MB/g’ redis.conf
sed -i ‘/maxmemory 500MB/s/^#//g’ redis.conf=主库生成redis启动脚本
cat <>/etc/init.d/redis
#!/bin/shchkconfig: 2345 80 90
description: Start and Stop redis
#PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/redis-server
REDIS_CLI=/usr/local/redis/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/usr/local/redis/redis.conf"
AUTH=“123123”
LISTEN_IP=$(netstat -utpln |grep redis-server |awk ‘{print $4}’|awk -F’:’ ‘{print $1}’ |uniq)case “$1” in
start)
if [ -f $PIDFILE ]
then
echo “$PIDFILE exists, process is already running or crashed”
else
echo “Starting Redis server…”
$EXEC $CONF
fi
if [ “$?”=“0” ]
then
echo “Redis is running…”
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo “$PIDFILE does not exist, process is not running”
else
PID=$(cat $PIDFILE)
echo “Stopping …”
$REDIS_CLI -h $LISTEN_IP -p $REDISPORT -a $AUTH SHUTDOWN
while [ -x ${PIDFILE} ]
do
echo “Waiting for Redis to shutdown …”
sleep 1
done
echo “Redis stopped”
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo “Usage: /etc/init.d/redis {start|stop|restart|force-reload}” >&2
exit 1
esac
ENDchmod +x /etc/init.d/redis
启动redis配置nginx
vim /usr/local/nginx/conf/nginx.conf#在http模块中增加upstream,注意增加到server之上
upstream tomcat {
server 192.168.40.15:8080 weight=1 max_fails=3 fail_timeout=10;
server 192.168.40.16:8080 weight=1 max_fails=3 fail_timeout=10;
}#在server模块中增加location匹配
location ~ (.*).jsp {
proxy_pass http://tomcat;
}==增加tomcat测试页=
#192.168.40.15
vim /usr/local/tomcat/webapps/ROOT/1.jsp
111#192.168.40.16
vim /usr/local/tomcat/webapps/ROOT/1.jsp
222=====验证能否实现nginx负载均衡
/usr/local/tomcat/bin/startup.sh
curl 192.168.40.14/1.jsp=====配置tomcat与redis连接软件
#软件名称jedis.jar,可通过下载TomcatClusterRedisSessionManager获得
unzip tomcat-cluster-redis-session-manager.zip
cp tomcat-cluster-redis-session-manager/lib/* /usr/local/tomcat/lib/
cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties /usr/local/tomcat/conf/
cd /usr/local/tomcat/conf/=====编辑redis-data-cache.properties=
vim redis-data-cache.propertiesredis.hosts=192.168.40.17:6379 #指定redis主机IP及端口号
redis.password=123123 #指定redis密码#其他参数含义,走默认即可
//是否支持集群,默认的是关闭
#- set true to enable redis cluster mode
redis.cluster.enabled=false
//连接redis的那个库
#- redis database (default 0)
#redis.database=0
//连接超时时间
#- redis connection timeout (default 2000)
#redis.timeout=2000=====修改context.xml配置文件从而能够使用redis连接工具=
vim context.xml#将以下参数增加到标签中
====修改web.xml文件中的会话保持时间=
#默认文件中就有这个参数,我们只需单独修改时间即可,单位秒,可根据实际情况来修改会话保持时间
60==重启tomcat=
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh=====生成会话共享测试页=
vim /usr/local/tomcat/webapps/ROOT/2.jsp#将以下内容粘贴进去
<% //HttpSession session = request.getSession(true); System.out.println(session.getCreationTime()); out.println("
SESSION ID:" + session.getId() + "
"); out.println("Session created time is :" + session.getCreationTime() + "
"); %>
==最终测试
#浏览器访问192.168.40.11/2.jsp,看是否session ID号是否会发生改变,不变化则配置成功
#登录redis,用keys *查看数据库中是否有session ID号