今天看到"基于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>
<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. error_log  logs/error.log;
  4. events {
  5. worker_connections  1024;
  6. }
  7. http {
  8. include       mime.types;
  9. default_type  application/octet-stream;
  10. sendfile        on;
  11. keepalive_timeout  65;
  12. #gzip  on;
  13. upstream  www.docyeah.com   {
  14. server   192.168.1.11:8080;
  15. server   192.168.1.101:8080;
  16. }
  17. server {
  18. listen       80;
  19. server_name  www.docyeah.com;
  20. charset utf-8;
  21. location / {
  22. root   html;
  23. index  index.html index.htm;
  24. proxy_pass        http://www.docyeah.com;
  25. proxy_set_header  X-Real-IP  $remote_addr;
  26. client_max_body_size  100m;
  27. }
  28. location ~ ^/(WEB-INF)/ {
  29. deny all;
  30. }
  31. error_page   500 502 503 504  /50x.html;
  32. location = /50x.html {
  33. root   html;
  34. }
  35. }
  36. }
#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加插件好,这样能获得更好的可控性。
而且我不用Tomcat,用Resin,这个msm就用不上啦,不过我会按照我的思想实现session共享,呵呵,个人愚见!!

基于nginx的tomcat负载均衡和集群(超简单)相关推荐

  1. apache的tomcat负载均衡和集群配置

    略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法. 要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务 ...

  2. linux下一个apache+tomcat负载均衡和集群

    先说一下我的环境 一个ubuntu虚拟机, 一个apache2.2示例 两tomcat1.7示例 1.安装apacheserver sudo apt-get install apache2 假设要重新 ...

  3. linux ajp集群,Tomcat6_Apache2.2_ajp负载均衡加集群实战

    Tomcat6_Apache2.2_ajp负载均衡加集群实战 [日期:2011-04-20] 来源:Linux社区 作者:Linux [字体:大 中 小] 3.tomcat负载均衡和集群配置 参考官方 ...

  4. 【转】Apache Http Server与Tomcat实现负载均衡和集群

    Apache Http Server与Tomcat实现负载均衡和集群 一.分布式实现原理 如上图所示,主要通过 Apache-Server 作为中转服务器,实现多个 tomcat 服务器之间的分布式处 ...

  5. RabbitMQ + 镜像队列 + HAProxy 实现负载均衡的集群

    RabbitMQ + 镜像队列 + HAProxy 实现负载均衡的集群 一.集群管理(RabbitMQ扩容) 1. 环境介绍 hostname ip mq1 192.168.80.16 mq2 192 ...

  6. 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务

    使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务 一.基于于NAT的LVS的安装与配置. 1. 硬件需求和网络拓扑                       ...

  7. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成高性能高可用组件 Keepalived_03

    服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...

  8. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02

    服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...

  9. Java编程解密-Dubbo负载均衡与集群容错机制

    1 Dubbo简介 Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 作为一个轻量级RPC框架,Du ...

最新文章

  1. 利用集群技术实现Web服务器的负载均衡
  2. DeepFaceDrawing: 使用草图生成人脸图像
  3. HDU 2612 Find a way(BFS)
  4. 使用tensorflow查询机器上是否存在可用的gpu设备
  5. 如何开发Web应用程序(非网站)
  6. 92年清华本科,做了30年技术,43岁在CTO的位置上被优化!找了一年多工作,有些迷茫!...
  7. android tv nugat,GitHub - GongXunYoung/Android-tv-widget: Android tv,盒子,投影仪 控件
  8. OpenShift Security (13) - 利用Log4j漏洞攻击容器
  9. POJ-1035 Spell checker 暴力
  10. 结构体符号重载(简单版+手动扩栈方法)
  11. python总是下载失败_Python 下载依赖包环境经常失败超时解决方法
  12. 博图V13、V14、V15、V15.1、V16版本安装包链接下载
  13. 数学魔鬼表达式——第三天
  14. 带中文说明书OSLO Light 6.2-ISO 1CD光学软件
  15. Scaling SPADE to “Big Provenance”(论文阅读)
  16. (已解决)ubuntu16.04蓝牙耳机与电脑配对成功,但不出现在声音输出设备里
  17. 【Python】为图片加上数字上标
  18. 通向财富自由——斜杠青年与自由职业者
  19. JavaScript video标签使用
  20. SpringMvc自定义消息转换器

热门文章

  1. 谷歌翻译大型翻车现场:请服用“反坦克导弹”来缓解疼痛,UCLA:医生们要注意了...
  2. 如何解决多地开视频会议直播问题?
  3. 设置CentOS 6.6系统默认的语言为中文
  4. PHP 页面编码声明方法详解(header或meta)
  5. Spring MVC整合Velocity
  6. Connect(); // 2015 简要整理
  7. 缇 、 像素 、 厘米
  8. Oracle脚本批量导入时,输出日志文件
  9. Mac OS Terminal 几个快捷键
  10. 在PHPStorm中支持ThinkPHP代码提示