基于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

复制代码
   <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为例
1.

复制代码
   #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即可。

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

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

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

相关推荐
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.20 小时前
Haproxy会话保持:基于Cookie优化
运维·负载均衡
打工的小王1 天前
nginx(一)nginx简介
nginx
这周也會开心1 天前
SSM 配置 index 页面的实现方式
java·tomcat·springmvc
李少兄1 天前
深入解析 Nginx 413 Request Entity Too Large 错误
运维·nginx
CTO Plus技术服务中1 天前
2026版Java web高并发面试题和参考答案
java·jvm·spring·spring cloud·面试·tomcat·java-consul
gettingolder1 天前
haproxy的简单负载均衡实现
运维·服务器·负载均衡
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.1 天前
HAPROXY安装,双网卡负载均衡实战指南
运维·负载均衡
zhojiew1 天前
在EKS上使用LBC的GatewayAPI创建负载均衡器和扩展配置
运维·负载均衡
漏刻有时1 天前
宝塔服务器被篡改 Nginx Location 配置的安全风险剖析与修复指南(流量劫持、服务器资源消耗、站点功能异常、溯源困难)
服务器·nginx·安全
你知道“铁甲小宝”吗丶1 天前
nginx代理ip哈希用法
nginx·哈希算法