zoukankan      html  css  js  c++  java
  • Nginx+Tomcat+Memcache实现负载均衡及Session共享

    第一部分 环境介绍

    部署环境:

    Host1:Nginx、Memcached、Tomcat1

    Host2:Tomcat2

    Tomcat_version:8.0.38

    第二部分 Nginx+Tomcat实现负载均衡

    1、nginx及tomcat的安装省略

    2、nginx负载均衡配置:

    http标签中定义tomcat集群:

    upstream tomcat_server {
            server 101.200.229.38:8080;
            server 101.200.162.214:8080;
            }

    server中设置代理,将请求转发给后端tomcat集群处理:

        server {
            listen  80;
            server_name     www.xxx.com;
            location / {
                proxy_pass http://tomcat_server;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
        }

    关于nginx负载均衡的策略,有以下几种方式:

    2.1 ip_hash:

    根据客户端地址,同一个ip地址分配给同一台后段服务器处理,这样可以解决session的问题。但是如果该后端服务器宕掉,则session会失效。

    缺点:局域网内的用户使用的是同一个公网IP,这对于ip_hash来说,会被认为是同一个客户端,因此总是会将这个公网ip的请求交给同一个后端服务器来处理,因此起不到负载均衡的作用。

    2.2 轮询:

    每一个请求,按照时间顺序,逐一分配给后端不同的服务器。

    缺点:需要对后端服务器做session共享。

    2.3 权重:

    每个请求,根据后端服务器的权重值来转发。权重越大,表明该服务器处理能力相对越高。主要用于后端服务器性能不同的情况。

    第三部分 利用MSM框架实现session共享

    Github项目地址:https://github.com/magro/memcached-session-manager

    1、msm框架主要使用缓存(如memcache、redis)来存储session信息,后端服务器都可以从该缓存中读写session。

    2、tomcat序列化(Serializable)策略介绍:

    序列化是指将对象以字符串形式在网络上传输、存储、读取的过程。

    java有以下几种序列化框架:

    kryo-serializer

    javolution-serializer

    xstream-serializer

    flexjson-serializer

    每种序列化框架需要的依赖jar包不同,本例使用javolution框架

    3、准备需要的jar包:

    Github上提供了下载链接:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

    本例需要的jar包及版本如下:

    asm-5.1.jar

    minlog-1.3.0.jar

    javolution-5.5.1.jar

    reflectasm-1.11.3.jar

    msm-javolution-serializer-1.9.5.jar

    memcached-session-manager-1.9.5.jar

    memcached-session-manager-tc8-1.9.5.jar

    注意:对各jar的版本兼容性要求极高!

    将以上jar包放在tomcat/lib/目录下。

    4、安装memcached,启动memcached:

    /usr/local/memcached/bin/memcached -m 512 -d -u memcache -p 11011 -c 1024

    -m表示分配内存大小

    -d表示后台运行

    -u表示以某一用户运行

    -p表示监听的端口号

    -c表示接受的连接数

    tomcat/conf/context.xml配置:

    <Context>标签中添加如下内容:

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
            memcachedNodes="n1:127.0.0.1:11011"
            sticky="false"
            sessionBackupAsync="false"
            failoverNodes=""
            sessionBackupTimeout="100000"
            lockingMode="uriPattern:/path1|/path2"
            requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
            transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>

    以上配置后,重启tomcat即可。

    参考:http://blog.csdn.net/remote_roamer/article/details/51133790

  • 相关阅读:
    super().__init__()方法
    so the first day
    left join,right join,inner join,full join之间的区别
    C#中几种常用的集合的用法ArrayList集合HashTable集合List<T>集合Dictionary<K,V>集合及区别
    C#中Dictionary<string,string>的初始化 两种方式不同
    C#中Dictionary的初始化方式
    如何批量修改文件后缀名?cmd命令 ren *.gif *.jpg
    eclipse查看一个方法被谁引用(调用)的快捷键四种方式
    C# 数组集合
    Java-数组和集合简单使用
  • 原文地址:https://www.cnblogs.com/ahaii/p/6518311.html
Copyright © 2011-2022 走看看