nginx+tomcat+memcached组建web服务器负载均衡

公司最近要上负载均衡服务器,所以自己调研了下,以下是调研结果

  多个tomcat要一起协同工作有几种办法,可以考虑的方案有以下几个:

(1)使用tomcat自带的cluster方式,多个tomcat自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。

 (2)利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。但是我们的应用很可能是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。

 (3)利用memcached把多个tomcat的session集中管理,这是最直接的解决方案,但是操作起来也最为复杂。

 这里选择第3种,效率上最高

安装配置


   memcached安装

  1)先下载libevent-1.4.14b-stable.tar.gz和memcached-1.4.7.tar.gz的源码包,前者是后者的依赖包,就是一个事件驱动的包。

  2)安装非常顺利,还是经典的那几个编译安装命令:

        tar zxvf libevent-1.4.14b-stable.tar.gz

        cd libevent-1.4.14b-stable

       ./configure --prefix=/usr/local/libevent-1.4.14b

        make

        make install

        tar zxvf memcached-1.4.7.tar.gz

        cd memcached-1.4.7

       ./configure --prefix=/usr/local/memcached-1.4.7 --with-libevent=/usr/local/libevent-1.4.14b/

       make

       make install 

  3)启动memcached:

       memcached -u root -p 11211 -m 64 -vv

memcached-session-manager配置

1.去google code下载以下jar包kryo-1.03.jar、kryo-serializers-0.8.jar 、memcached-session-manager-1.3.0.jar、

memcached-session-manager-tc7-1.6.2.jar(tomcat7用的,如果是6请下载相关的jar)、minlog-1.2.jar、msm-kryo-serializer-1.6.2.jar、reflectasm-0.9.jar,然后把这些jar拷贝到$CATALINA_HOME/lib

另外提一下,官方给出的4种序列化方案,其中kryo是效率最高的,具体比较看http://code.google.com/p/memcached-session-manager/wiki/SerializationStrategies。

2.接下来是修改tomcat的配置文件$CATALINA_HOME/conf/context.xml,调整成新的session存储方式

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
           lockingMode="auto" memcachedNodes="n1:127.0.0.1:11211"
           requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
           sessionBackupAsync="false"
           sessionBackupTimeout="1000"
           transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>


Niginx配置

1.安装

Ubuntu PPA

sudo -snginx=stable # use nginx=development for latest development versionadd-apt-repository ppa:nginx/$nginxapt-get update apt-get install nginx

修改配置文件

我的配置文件在/etc/nginx中,找到nginx.conf用下面的替换:

user www-data;
worker_processes 2;
pid /var/run/nginx.pid;
events {
    worker_connections 1024;
}
http {
    ##
    # Basic Settings
    ##
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;
    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    ##
    # Logging Settings
    ##
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    ##
    # Gzip Settings
    ##
    gzip on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##
    #include /etc/nginx/naxsi_core.rules;
    ##
    # nginx-passenger config
    ##
    # Uncomment it if you installed nginx-passenger
    ##
    #passenger_root /usr;
    #passenger_ruby /usr/bin/ruby;
    ##
    # Virtual Host Configs
    ##
    #配置后端服务器信息
    upstream 192.168.161.100 {
      server 192.168.161.100:8089;
        server 124.16.141.152:8089;
      #server 127.0.0.1:8090;
    }
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    server{
         listen 3000;
    server_name 192.168.161.100;
    location / {
        proxy_pass http://192.168.161.100;
    }
     }
}  

自己修改负载的应用服务器地址和nginx的地址,nginx配置和使用参考http://wiki.nginx.org/NginxChs

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值