文档章节

Apache+Tomcat cluster 实践

woodo
 woodo
发布于 2014/07/16 18:04
字数 1107
阅读 832
收藏 8

近来我们的程序部署给客户,不过有些客户提出了更高的性能,以及更好的利用客户的硬件资源的要求. 我们的程序很简单, Java写的基于spring框架的webservice,部署在tomcat7上。

程序后台可以访问数据库,程序也有逻辑来维护额外的session信息,所以我想尝试下session可用度。

Cluster配置还是比较简单的,我基于如下文章和官方帮助。

http://snowolf.iteye.com/blog/743611


简单说有3块,


1。 配置Apache的load balance, 可以试用mod_jk或mod_proxy, 我还没有试验过nginx,以后有机会尝试。

     配置以后,mod_jk可以把请求进行负载均衡,通信使用ajp协议,跳转到相应的tomcat节点.

     如果web程序是有session的,在配置中要把stickySession设置为true

2. tomcat 这边最重要的是web app中,加上<distributable/> element在web.xml中。

3。配置1和2后,程序可以做到load balance,但是还做不到high availability,因为session仍然是某一个节点的独有资源,一旦该节点挂掉,那么Apache就会把请求分配给其它节点,此时该请求被作为新请求,原来session信息丢失。


  解决方法是session replication.这个tomcat cluster的功能,涉及大堆信息和配置。一般使用multicast,来动态发现新的节点。可能我的两台机器都在不同网段,所以死活不能互相发现,session复制不工作。郁闷。。。暂时放弃,毕竟不是生产环境。


  我还尝试了静态节点的方式,就是直接配置节点ip和端口,时间不多,没有尝试成功。


思考1,对于特殊的session管理部分(管理session,时间,用户登录状态等),如何让这些信息也被复制呢,是不是需要特别的接口,来程序调用呢? 


---待续(2)

今天尝试了在同一天机器上配置多个tomcat7的实例,配置如下:

在磁盘的任何位置,创建一个目录作为tomcat instance2, 复制如下目录:

    • conf contains configuration files and related DTDs. The most important file located here is server.xml.

    • logs holds log and output files.

    • webapps is where you put the applications.

    • work – Tomcat translates and converts any JavaServer Pages (JSP) into servlets and stores them here.

    • temp is used for temporary files.

 然后修改 server.xml,主要是一些端口,避免和instance1重叠。

    <Server port="XXXX" shutdown="SHUTDOWN">
    <Connector port="XXXX" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="XXXX" protocol="AJP/1.3" redirectPort="8443" />

当然了,此时apache的httpd.conf,需要修改tomcat2的节点配置。

哦克了,启动,可以看到如下log,证明multicast组可以工作了

INFO: Received member disappeared:org.apache.catalina.tribes.membership.MemberIm
pl[tcp://{155, 35, 104, 217}:4000,{155, 35, 104, 217},4000, alive=1981323, secur
ePort=-1, UDP Port=-1, id={-78 108 -27 15 35 6 65 -39 -74 -45 -13 47 98 -106 -35
 49 }, payload={}, command={66 65 66 89 45 65 76 69 88 ...(9)}, domain={}, ]
Jul 18, 2014 5:33:41 PM org.apache.catalina.ha.tcp.SimpleTcpCluster memberAdded

INFO: Replication member added:org.apache.catalina.tribes.membership.MemberImpl[
tcp://{155, 35, 104, 217}:4000,{155, 35, 104, 217},4000, alive=1015, securePort=
-1, UDP Port=-1, id={120 69 126 41 -80 -91 76 -60 -128 7 -15 -108 -37 3 25 127 }
, payload={}, command={}, domain={}, ]

不过故事还没有完,启动会发现log有一个错误:

Unable to process request in NioReceiver 
java.net.SocketException: Invalid argument: no further information 
at sun.nio.ch.Net.setIntOption0(Native Method) 
at sun.nio.ch.Net.setSocketOption(Net.java:261) 
at sun.nio.ch.SocketChannelImpl.setOption(SocketChannelImpl.java:162) 
at sun.nio.ch.SocketAdaptor.setIntOption(SocketAdaptor.java:296) 
at sun.nio.ch.SocketAdaptor.setTrafficClass(SocketAdaptor.java:391) 
at org.apache.catalina.tribes.transport.nio.NioReceiver.listen(NioReceiver.java:273) 
at org.apache.catalina.tribes.transport.nio.NioReceiver.run(NioReceiver.java:353) 
at java.lang.Thread.run(Thread.java:717)

解决方案:把jdk1.7.0_01换成jdk1.6.0_30一切就正常了。 

至此,Load Balance 和 High Availability应该工作了。

测试:访问:http://localhost/test/test.jsp,返回:

Server Info: localhost : 80

ID A300BA1E92D168A5902BB488AF24C9DC.tomcat1
155.35.104.217 This is responsed by 198.126.0.1
Host Name : mywork2
Time : Fri Jul 18 17:44:16 GMT+08:00 2014

这时,停掉tomcat1, 继续访问这个网址,会发现反应迟钝,然后最后还是返回了,观察session Id没有变化,说明session replication 和 migration成功。

思考2

实践证明,对于有额外session信息的应用,如我们的应用, web service要绑定session 和用户信息,并有一些validation的操作,这些信息tomcat是不知道的。那么就需要人为复制了,有些文章里说,可以存储在另一个中央server上,比如某mysql,mongodb上等,然后每次validating是从这些server同步信息,这是一个策略。

我的另一个想法应该也可行,那就是配置session复制的额外信息,然后程序收到复制的信息,及时恢复session信息。不知道谁有经验?

© 著作权归作者所有

共有 人打赏支持
woodo
粉丝 5
博文 57
码字总数 32118
作品 0
朝阳
高级程序员
私信 提问
加载中

评论(2)

woodo
woodo

引用来自“PaulWong”的评论

用MEMCACHED或MONGODB作为SESSION的存储即可。
谢谢你的建议,有机会尝试配置一个。 不知道轻量级的跟随复制可行吗?按道理spring应该可以收到复制过来的session吧,然后我把额外信息业复制过来,怎么样?
PaulWong
PaulWong
用MEMCACHED或MONGODB作为SESSION的存储即可。
Windows下Apache+Tomcat实现应用集群

Windows下Apache+Tomcat实现应用集群 1 环境依赖:windows、jdk1.6、Apache2.2、tomcat6.0 2 Jdk1.6安装 2.1 略 3 安装Apache(2.2.27) 3.1 下载:从Apache官网http://httpd.apache.org/dow......

城邑耕夫
2014/07/28
0
2
Apache+Tomcat集群配置

本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置。 准备环境 Apache Apache是http服务器,我们利用其对Tomcat进行负载均衡...

嘻哈开发者
2015/07/02
0
1
Tomcat -- apache+tomcat集群

主要参考了这篇文章 http://blog.csdn.net/flyliuweisky547/article/details/21293071?utmsource=tuicool&utmmedium=referral 这位博主在tomcat方面讲得十分清楚,感谢该博主分享。 环境信息...

求是科技
2016/09/21
48
0
如何搭建apache+tomcat集群

TomcatApacheMySQLXML应用服务器 由于公司的一个应用跑在集群服务器上老出问题,所以在测试机上也搭建了一个集群,有助于提前发现问题,以下是具体的配置步骤,先记下,方便以后配置直接Ctr...

liangxiao
2012/07/06
0
0
Apache+Tomcat集群配置(转载)

http://www.iteye.com/topic/1017961 本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置。 准备环境 Apache Apache是http服...

QAllen
2012/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java8之stream流的基本操作

一、stream流简介 Stream流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。 Stream的优点:声明性,可复合,可并行。这三个特性使得stream操作更简洁,更灵活,更高效。 Stre...

嘴角轻扬30
25分钟前
1
0
Docker 可视化管理工具 Panama

Panamax 是一个开源的项目,可以通过简单的拖拉操作就可以实现发布复杂的 Docker 容器应用。Panamax 为 Docker, Fleet & CoreOS 提供友好的管理界面。 容器技术是下一代的虚拟机,但使用该技...

linuxprobe16
26分钟前
2
0
scala中hdfs文件的操作

对于org.apache.hadoop.fs.Path来说, path.getName只是文件名,不包括路径 path.getParent也只是父文件的文件名,同样不包括路径 path.toString才是文件的全路径名 创建文件 hdfs.createNew...

hblt-j
41分钟前
2
0
Eureka 和 zookeeper 的比较

小小小施爷
50分钟前
0
0
c++ 开源算法库 (持续更新)

最近在做算法方面的研究,发现很难找到一个全面而优质的科学计算算法库。不过还是找到一些,在此记录一下,将来也许自己写一个把所有这些整合在一起。本列表会持续不定期更新。 GSL http://w...

propagator
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部