• 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

  • 相关阅读:
    LeetCode对撞指针汇总
    167. Two Sum II
    215. Kth Largest Element in an Array
    2018Action Recognition from Skeleton Data via Analogical Generalization over Qualitative Representations
    题解 Educational Codeforces Round 84 (Rated for Div. 2) (CF1327)
    题解 JZPKIL
    题解 八省联考2018 / 九省联考2018
    题解 六省联考2017
    题解 Codeforces Round #621 (Div. 1 + Div. 2) (CF1307)
    题解Codeforces Round #620 (Div. 2)
  • 原文地址:https://www.cnblogs.com/jpfss/p/8533104.html
Copyright © 2020-2023  润新知