zoukankan      html  css  js  c++  java
  • Nginx+tomcat集群使用redis共享session

    一 :nginx负载均衡

    当Tomcat当做独立的Servlet容器来运行时,可看做是能运行Java Servlet的独立Web服务器。

    此外 Tomcat还可以作为其他Web服务器进程内或者进程外的Servlet容器,从而与其他Web服务器集成(Apache Nginx IIS 等)

    集成的意义在于:对于不支持运行java Servlet的其他Web服务器,可以通过集成Tomcat来提供运行Servlet的功能。

    ——————————Tomcat与JavaWeb开发技术详解(孙卫琴的一本书)

    Nginx 通过Tomcat来运行Servlet容器。也可以 对集群的tomcat的负载进行均衡。(在后台多个Tomcat进行集群时,nginx把来自客户端的请求 随机分发到某一台Tomcat上)

    下面看一个简单的demo

    nginx.conf负载均衡的关键配置 

    http {
      include mime.types;
      default_type application/octet-stream;

      sendfile on;

      keepalive_timeout 65;

      upstream tomcatserver{
        server 119.23.50.194:9080 weight=1;
        server 119.23.50.194:8080 weight=2;
      }
      server {
        listen 80;
        server_name localhost;
        location / {
          proxy_pass http://tomcatserver;
        }
      }
    }

    配置表示,nignx的断开时80端口,也就是当我们直接输入ip的时候

    会直接进入nginx的根路径。location / 通过proxy_pass指向server 119.23.50.194:9080(三分之一的概率);或者 server 119.23.50.194:8080(三分之二的概率);

    概率可通过权重 weight配置。

    思考:前端的请求会随机分发到不同的Servlet容器中。不同的tomcat session是不共享的。这样 会话跟踪会失败。

    二 使用redis共享session

    tomcat 集群中,可以把session放到redis数据库中,解决session不共享的问题

    进入cd /home/tomcat/apache-tomcat-7/lib路径下

    把redis和tomcat配置的jar添加进去

    jedis-2.5.2.jar

    tomcat-redis-session-manage-tomcat7.jar
    commons-pool2-2.2.jar

    cd /home/tomcat/apache-tomcat-7/conf/

    修改 context.xml文件

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
      host="119.23.50.194"
      port="6379"
      database="0"
      password="sunkun1210"
      maxInactiveInterval="60" />

    修改cd /home/tomcat/apache-tomcat-7/webapps/ROOT/ 目录下的index.jsp(tomcat欢迎页) 方便我们测试

    119.23.50.194:9080 tomcat主页上加以下代码

      <%@ page session="true" %>

      <h1>tomcat9080</h1>
      session:<%=session.getId()%>

    119.23.50.194:8080 tomcat主页上加以下代码

      <%@ page session="true" %>

      <h1>tomcat8080</h1>
      session:<%=session.getId()%>

    大家可以点击测试,观察 tomcat的端口虽然编号 但是sessionId没变

    Redis安装步骤

    Nginx安装步骤

    为了保证在集群系统中,会话数据能在redis进行存储。应该保证所有存放在会话范围内的所有属性都实现了java.io.Serializable接口。

  • 相关阅读:
    Spring Boot快速搭建Spring框架
    JVM内存管理机制
    开发者应该掌握的Java代码优化技能
    23种设计模式(8)-外观模式
    1823:【00NOIP提高组】方格取数
    【00NOIP提高组】单词接龙
    1821:【00NOIP提高组】乘积最大
    1820:【00NOIP提高组】进制转换
    时间复杂度比较
    hhhhh我想起来我的账号了
  • 原文地址:https://www.cnblogs.com/ssskkk/p/9250212.html
Copyright © 2011-2022 走看看