• 基于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的编辑器有问题,代码里加颜色后居然变乱了

  • 相关阅读:
    在MonoTouch中自定义表格 狼人:
    Android开发进阶:如何读写Android文件 狼人:
    Windows Phone 7 开发之:工具栏 狼人:
    Android平台Qt开发入门教程 狼人:
    PySide中的信号和槽 狼人:
    sql server 2005 通过代理定时备份数据库
    Java I/O流操作(三)File文件操作及打印流和序列流合并流
    分别介绍以下数据提供者连接各种数据库的方法 (vb.net)
    OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
    软件架构设计之Utility模块——string
  • 原文地址:https://www.cnblogs.com/firstdream/p/5474235.html
Copyright © 2020-2023  润新知