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 / s / 127.0.0.1 / / s/127.0.0.1/ /s/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/[email protected]""@"/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/sh
chkconfig: 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
END
chmod +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.properties
redis.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号