11月20日 实现tomcat将会话保存至redis中

image.png
1、在nginx主机上实现将客户端的请求反向代理至后端的两台tomcat主机
vim /etc/nginx/nginx.conf
  upstream tcsrvs {   ---在http语句块里
    server 172.18.21.7:8080;
    server 172.18.21.200:8080;
}
  location / {     ---在server语句块里
        proxy_pass http://tcsrvs;
        }
systemctl start nginx
2、配置并启动redis
vim /etc/redis.conf
bind 0.0.0.0     ---监控在本地的所有ip
requirepass "centos"   ---设置连接redis的密码
systemctl start redis ---redis可以启用主从复制和sentinel故障转移,本实验为了方便,只使用一台redis主机
3、在两个tomcat主机上的设置
mkdir -pv /usr/share/tomcat/webapps/myapp/WEB-INF
cd  /usr/share/tomcat/webapps/myapp/
vim index.jsp  ---创建测试页面
<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>   ---将另外一台主机改为B
  <body>
    <h1><font color="red">TomcatA.magedu.com</font></h1>---将另外一台主机改为B,颜色改为green用来区分
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("magedu.com","magedu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
在/etc/tomcat/context.xml里添加如下语句
vim /etc/tomcat/context.xml 
 <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
        host="172.18.21.100"   ---指明后端的redis主机
        password="centos"    ---指明连接redis主机的密码
        port="6379"     ---指明端口
        database="0"   ---指明存储到redis的哪个数据库
        maxInactiveInterval="60"/>
[root@node1 jar]#ls    ---将如下.jar文件拷贝到两台tomcat主机的 /usr/share/tomcat/lib/目录下
commons-pool2-2.4.2.jar  jedis-2.8.2.jar  tomcat-redis-session-manage-tomcat7.jar
cp * /usr/share/tomcat/lib/
systemctl start tomcat  ----启动tomcat服务
[root@node3 myapp]#redis-cli -a centos  
127.0.0.1:6379> KEYS *
1) "97CB1BF4F3AB955F02D95BC85F60CDF0"   ---可以看到存储的会话的键
4、测试
http://172.18.21.100/myapp/
发现无论调度至tomat的哪个主机,会话是一样的,没有变化,说明会话保存成功。

推荐阅读更多精彩内容