zoukankan      html  css  js  c++  java
  • 基于nginx的tomcat负载均衡和集群

    要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了。

    你可以自己写tomcat的扩展来保存SESSION到memcached。

    这里推荐使用memcached-session-manager这个开源项目(http://code.google.com/p/memcached-session-manager/ ),下面简称msm。

     

    如何安装nginx、memcached、tomcat这些就不多说了。

     

    先说明一下测试环境:

    tomcat1、nginx、memcached安装在192.168.1.11

    tomcat2安装在192.168.1.101

     

    下面分步实现基于nginx的tomcat负载均衡和集群配置

    一,tomcat集群

        1,先下载msm及其依赖包

        http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar

        http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar

    http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar

    http://spymemcached.googlecode.com/files/memcached-2.4.2.jar

     

    http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar

    2,将这5个包放到$TOMCAT_HOME/lib目录下

     

    3,修改$TOMCAT_HOME/conf/server.xml

    Xml代码 复制代码 收藏代码
    1. <Context docBase="E:/java_codes/TestSession/WebContent" path="" reloadable="true" >  
    2. <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
    3.     memcachedNodes="n1:localhost:11211"  
    4.     requestUriIgnorePattern=".*.(png|gif|jpg|css|js)$"  
    5.     sessionBackupAsync="false"  
    6.     sessionBackupTimeout="100"  
    7.     transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"  
    8.     copyCollectionsForSerialization="false"  
    9.     />  
    10. </Context>  
    <Context docBase="E:/java_codes/TestSession/WebContent" path="" reloadable="true" >
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:localhost:11211"
        requestUriIgnorePattern=".*.(png|gif|jpg|css|js)$"
        sessionBackupAsync="false"
        sessionBackupTimeout="100"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
        copyCollectionsForSerialization="false"
        />
    </Context>

     这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:

     n1:localhost:11211 n2:localhost:11212

     

     sessionBackupTimeout的单位为分钟

     E:/java_codes/TestSession/WebContent 替换成你的WEB目录

      修改后重启两个TOMCAT即可,这个时候已经解决SESSION的共享问题.

     

    二,配置nginx实现负载均衡

       以我的nginx.conf为例

    Xml代码 复制代码 收藏代码
    1. #user  nobody;   
    2. worker_processes  1;   
    3.   
    4. error_log  logs/error.log;   
    5.   
    6. events {   
    7.     worker_connections  1024;   
    8. }   
    9.   
    10.   
    11. http {   
    12.     include       mime.types;   
    13.     default_type  application/octet-stream;   
    14.   
    15.     sendfile        on;   
    16.     keepalive_timeout  65;   
    17.   
    18.     #gzip  on;   
    19.     upstream  www.docyeah.com   {   
    20.               server   192.168.1.11:8080;   
    21.               server   192.168.1.101:8080;   
    22.     }   
    23.     server {   
    24.         listen       80;   
    25.         server_name  www.docyeah.com;   
    26.         charset utf-8;   
    27.         location / {   
    28.             root   html;   
    29.             index  index.html index.htm;   
    30.             proxy_pass        http://www.docyeah.com;   
    31.             proxy_set_header  X-Real-IP  $remote_addr;   
    32.             client_max_body_size  100m;   
    33.         }   
    34.   
    35.   
    36.         location ~ ^/(WEB-INF)/ {    
    37.         deny all;    
    38.         }    
    39.   
    40.         error_page   500 502 503 504  /50x.html;   
    41.         location = /50x.html {   
    42.             root   html;   
    43.         }   
    44.   
    45.     }   
    46. }  
    #user  nobody;
    worker_processes  1;
    
    error_log  logs/error.log;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        keepalive_timeout  65;
    
        #gzip  on;
        upstream  www.docyeah.com   {
                  server   192.168.1.11:8080;
                  server   192.168.1.101:8080;
        }
        server {
            listen       80;
            server_name  www.docyeah.com;
            charset utf-8;
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass        http://www.docyeah.com;
                proxy_set_header  X-Real-IP  $remote_addr;
                client_max_body_size  100m;
            }
    
    
            location ~ ^/(WEB-INF)/ { 
    	    deny all; 
            } 
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }
    }
    
    

    将www.docyeah.com替换成你的域名

    192.168.1.11和192.168.1.101替换成你服务器的IP

    OK,已经完成。启动nginx即可。

     

    这是我采用的负载均衡及集群方案,希望大家拍砖.

    ps:javaeye的编辑器有问题,代码里加颜色后居然变乱了

  • 相关阅读:
    Object-C中
    实例变量可见度修饰符
    Object-C 类和对象
    C语言中线程和进程的区别
    动态内存分配
    C语言中union关键字
    C语言结构体
    const define static extern 关键词详解
    基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(一)
    Ubuntu18.04+CUDA9.0+cuDNN7.1.3+TensorFlow1.8 安装总结
  • 原文地址:https://www.cnblogs.com/firstdream/p/5474235.html
Copyright © 2011-2022 走看看