设为首页 收藏本站
查看: 869|回复: 0

[经验分享] Nginx+Redis+Tomcat实现session共享集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-1 16:39:22 | 显示全部楼层 |阅读模式
Nginx作为目前最流行的开源反向代理HTTP Server,实现资源缓存、web server负载均衡等功能,Tomcat提供动态web内容,redis提供高效缓存构成一个完美web站点组合,但必须借助redis-session-manager-tomcat.jar包才能实现session共享。session-manager负责会话管理,commons-pool是共享池,jedis是连接redis组件,三者协调共享,缺一不可。  特别注意:redis-session-manager-tomcat.jar是通过maven打包而成,与context.xml内容相对应,commons-pool.jar jedis.jar版本要求严格,千万不能轻视。
架构图
QQ截图20170301163722.jpg
实验环境
IP                  Roles               port
station11192.168.1.11   nginx    centos6.8   端口:80  版本:1.10.2
station11192.168.1.11   redis     2.4.10    端口:6379
station12192.168.1.12   tomcatA  centos6.8   端口:8080
station13192.168.1.13   tomcatB  centos6.8   端口:8080  版本:Jdk:1.8.0_91   Tomcat: 7.0.75
Station11 安装redis
[iyunv@station11 ~]# yum -y install redis
redis-2.4.10-1.el6.x86_64
[iyunv@station11 ~]# mkdir -pv /data/redis
[iyunv@station11 ~]# chown -R redis.root /data/redis
[iyunv@station11 ~]# vim /etc/redis.conf
1
2
3
4
5
daemonize yes
bind 192.168.1.11
logfile /var/log/redis/redis.log
dir /data/redis
requirepass redhat



[iyunv@station11 ~]# echo vm.overcommit_memory=1 >> /etc/sysctl.conf
[iyunv@station11 ~]# sysctl vm.overcommit_memory=1
[iyunv@station11 ~]# chown redis.root /var/log/redis/redis.log
[iyunv@station11 ~]#service redis start
[iyunv@station11 ~]# netstat -nutlp | grep redis
1
tcp        0      0 192.168.1.11:6379           0.0.0.0:*      LISTEN    3568/redis-server



[iyunv@station11 ~]# redis-cli -h 192.168.1.11 -p 6379 -a redhat
1
2
redis 192.168.1.11:6379> select 0
OK




[iyunv@station12 ~]# ls
apache-tomcat-7.0.75.tar.gz  jdk-8u91-linux-x64.tar.gz
[iyunv@station12 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[iyunv@station12 ~]# ln -sv /usr/local/jdk1.8.0_91/ /usr/local/java
[iyunv@station12 ~]# cat > /etc/profile.d/java.sh << EOF
1
2
3
4
5
JAVA_HOME=/usr/local/java/
JRE_HOME=/usr/local/java/
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME JRE_HOME PATH
EOF



[iyunv@station12 ~]# java -version
1
2
3
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)



[iyunv@station12 ~]# tar zxvf apache-tomcat-7.0.75.tar.gz -C /usr/local/

[iyunv@station12 ~]# ln -sv /usr/local/apache-tomcat-7.0.75/ /usr/local/tomcat
[iyunv@station12 ~]# cat > /etc/profile.d/tomcat.sh << EOF
1
2
3
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
EOF



[iyunv@station12 ~]#. /etc/profile.d/tomcat.sh
[iyunv@station12 ~]# catalina.sh version
1
2
3
4
5
6
7
8
9
10
11
12
13
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java/
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.75
Server built:   Jan 18 2017 20:54:42 UTC
Server number:  7.0.75.0
OS Name:        Linux
OS Version:     2.6.32-642.el6.x86_64
Architecture:   amd64
JVM Version:    1.8.0_91-b14
JVM Vendor:     Oracle Corporation




[iyunv@station12 ~]#vim /etc/init.d/tomcat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS='-Xms64m -Xmx128m'
#-Xms64m指的是java虚拟机启动时占用的内存为64M   -Xmx128m指的是java虚拟机最大能使用的内存为128M;
JAVA_HOME=/usr/local/java
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
case $1 in
start)
  exec $CATALINA_HOME/bin/catalina.sh start ;;
stop)
  exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
  $CATALINA_HOME/bin/catalina.sh stop
  sleep 2
  exec $CATALINA_HOME/bin/catalina.sh start ;;
*)
  echo "Usage: `basename $0` {start|stop|restart}"
  exit 1
  ;;
esac



[iyunv@station12 ~]# chmod +x /etc/init.d/tomcat
[iyunv@station12 ~]# chkconfig --add tomcat
[iyunv@station12 tomcat]# service tomcat start
[iyunv@station12 tomcat]# netstat -nutlp | grep java
1
2
3
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      1977/java           
tcp        0      0 :::8009                :::*                        LISTEN      1977/java           
tcp        0      0 :::8080                :::*                        LISTEN      1977/java



[iyunv@station12 ~]# cd /usr/local/tomcat
[iyunv@station12 tomcat]# vim webapps/ROOT/test.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" %>
<html>
  <head><title>Tomcat12</title></head>
  <body>
    <h1><font color="red">www.xuefeng.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("www.xuefeng.com","www.xuefeng.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>



station13相同安装jdk和tomcat
更改主机名和颜色
QQ截图20170301163735.jpg
QQ截图20170301163740.jpg
[iyunv@station12~]# cp commons-pool2-2.4.2.jar jedis-2.8.1.jar tomcat-redis-session-manage-tomcat7.jar/usr/local/tomcat/lib/
[iyunv@station12conf]# vim context.xml
1
2
3
<ValveclassName="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>  注意空格+ />
   <ManagerclassName="com.orangefunction.tomcat.redissessions.RedisSessionManager"
                 host="192.168.1.11"port="6379" database="0" password="redhat" />      注意没有空格+ />



[iyunv@station12conf]# vim server.xml
1
2
3
4
5
注销端口8009行
<!--  <Connector port="8009"protocol="AJP/1.3" redirectPort="8443" /> -->
autoDeploytrue改false
     <Host name="localhost"  appBase="webapps"
            unpackWARs="true"autoDeploy="false">



[iyunv@station12tomcat]# service tomcat restart
[iyunv@station12tomcat]# tail -f  /logs/catalina.out
1
2
3
4
5
6
Feb 05,2017 6:28:42 PM com.orangefunction.tomcat.redissessions.RedisSessionManager startInternal
INFO:Attached to RedisSessionHandlerValve
Feb 05,2017 6:28:42 PM com.orangefunction.tomcat.redissessions.RedisSessionManager initializeSerializer
INFO:Attempting to use serializer:com.orangefunction.tomcat.redissessions.JavaSerializer
Feb 05,2017 6:28:42 PM com.orangefunction.tomcat.redissessions.RedisSessionManagerstartInternal
INFO:Will expire sessions after 1800 seconds



[iyunv@station13~]# cp commons-pool2-2.4.2.jar jedis-2.8.1.jar tomcat-redis-session-manage-tomcat7.jar/usr/local/tomcat/lib/
[iyunv@station13conf]# rm -f context.xml server.xml
[iyunv@station13conf]# scp 192.168.1.12:/usr/local/tomcat/conf/{context.xml,server.xml} .
[iyunv@station13conf]# service tomcat restart
QQ截图20170301163801.jpg
QQ截图20170301163812.jpg
[iyunv@station12tomcat]# redis-cli -h 192.168.1.11 -p 6379 -a redhat
redis192.168.1.11:6379> keys *
1
2
3
1)"8530FAC0B67966A27E80D6D589D93E5A"
2)"09AD4D396865B1954F644D150F8A6A85"
可以看到2个独立会话ID已经存放在redis中




Station11最后安装nginx
[iyunv@station11~]# yum -y install nginx
nginx.x86_640:1.10.2-1.el6
[iyunv@station11nginx]# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.0
[iyunv@station11~]# vim /etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
在http 段中添加
     upstream backend {
        server 192.168.1.12:8080;
        server 192.168.1.13:8080;
       }

    server {
        location / {
                proxy_pass http://backend;
                proxy_redirect  off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_headerX-Forworded-For $proxy_add_x_forwarded_for;
                }
          }



[iyunv@station11~]# service nginx start
刷新192.168.1.11/test.jsp 会看到sessionID保持不变,但tititle主机名和网页内head域名一直在变,说明内容来自后端2台主机。但3者的sessionID不同。

QQ截图20170301163824.jpg
QQ截图20170301163831.jpg
QQ截图20170301163836.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348919-1-1.html 上篇帖子: nginx实现http/2.0实战 下篇帖子: windows下Nginx虚拟机配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表