• 基于nginx的tomcat负载均衡和集群(超简单)


    今天看到"基于apache的tomcat负载均衡和集群配置 "这篇文章成为javaEye热点。

    略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法。

    要集群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>  

     这里的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. }  

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

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

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


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

    补充:nginx在配置upstream时,有两个参数:
    ip_hash(同一IP一直使用同一台server服务)
    weight(server的使用权重,数值越大,nginx分发的请求越多)

    通过配合这两个参数,能粗糙地解决session共享的问题。
    对于一些不是太依赖session的应用,或者只有用户登录时保存,那么我认为可以用Cookies代替。
    即使真的要Session共享,我认为手动写代码保存到Memcached比为Tomcat加插件好,这样能获得更好的可控性。
    而且我不用Tomcat,用Resin,这个msm就用不上啦,不过我会按照我的思想实现session共享,呵呵,个人愚见!!

  • 相关阅读:
    matplotlib油漆基础
    使用ant编译项目技能
    [Recompose] Refactor React Render Props to Streaming Props with RxJS and Recompose
    [Recompose] Make Reusable React Props Streams with Lenses
    [Recompose] Compose Streams of React Props with Recompose’s compose and RxJS
    [Recompose] Create Stream Behaviors to Push Props in React Components with mapPropsStream
    [Recompose] Stream Props to React Children with RxJS
    [Recompose] Merge RxJS Button Event Streams to Build a React Counter Component
    [Recompose] Handle React Events as Streams with RxJS and Recompose
    [Recompose] Stream a React Component from an Ajax Request with RxJS
  • 原文地址:https://www.cnblogs.com/interdrp/p/2294586.html
Copyright © 2020-2023  润新知