zoukankan      html  css  js  c++  java
  • 在Nginx里指定ip_hash的方式解决Tomcat集群session的问题

    据称,Tomcat集群session同步方案有以下几种方式:

    1)使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。
    2)利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session(并不是共享session解决)的问题! 并且如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。
    3)利用nginx插件实现tomcat集群和session同步,nginx-upstream-jvm-route是一个Nginx的扩展模块,用来实现基于Cookie的Session Sticky的功能。但是遗憾的是,这个模块的补丁在nginx1.4版本之后就没有再更新了,所以nginx1.4之后版本跟该模块就不兼容了!!
    4)利用memcached实现(MSM工具)。memcached存储session,并把多个tomcat的session集中管理,前端在利用nginx负载均衡和动静态资源分离,在兼顾系统水平扩展的同时又能保证较高的性能。即通过MSM工具把Tomcat的Session序列化后保存到Memcached里面,从而实现Session共享.
    5)利用redis实现。使用redis不仅仅可以将缓存的session持久化,还因为它支持的单个对象比较大,而且数据类型丰富,不只是缓存 session,还可以做其他用途,可以一举几得。Redis这种方式目前还不支持Tomcat8环境(现在网上插件不支持tomcat8,非要支持tomcat8,则需修改插件jar包的源代码)!
    6)利用filter方法实现。这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简单容易控制。
    7)利用terracotta服务器共享session。这种方式配置比较复杂。

    下面实现的就是最简单的第二种方式:

    nginx.conf里配置如下:

    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        access_log  logs/access.log;
    
        sendfile        on;
    
        keepalive_timeout  65;
        
        upstream tomcat{
            ip_hash;
            server localhost:8080;
            server localhost:8088;
        }
    
        server {
            listen       80;
            server_name  localhost;
            client_max_body_size 1024m;
            
            location / {
                proxy_pass http://tomcat;
                proxy_set_header Host $host:$server_port;
            }
            
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
        
    ...
    }

    上面upstream里ip_hash;一句就是实现访客固定访问一个后端服务器的方式,确实简单易行。

    参考网页:

    1.https://www.cnblogs.com/kevingrace/p/6398672.html

    2.https://www.cnblogs.com/xiandedanteng/p/12055609.html

    --END-- 2019-12-27 09:20

  • 相关阅读:
    hdu 4710 Balls Rearrangement()
    hdu 4707 Pet(DFS水过)
    hdu 4706 Children's Day(模拟)
    hdu 4712 Hamming Distance(随机函数暴力)
    csu 1305 Substring (后缀数组)
    csu 1306 Manor(优先队列)
    csu 1312 榜单(模拟题)
    csu 1303 Decimal (数论题)
    网络爬虫
    Python处理微信利器——itchat
  • 原文地址:https://www.cnblogs.com/heyang78/p/12105407.html
Copyright © 2011-2022 走看看