分类: Java
2012-02-06 10:24:45
最近学习了tomcat的集群配置,也在网上看了一些配置,现总结如下:
一、需要下载并安装相应的软件。包括
Apache 2.2
Tomcat-6
mod_jk-1.2.31-httpd-2.2.3.so
二、修改相应的配置文件:
1、复制mod_jk-1.2.31-httpd-2.2.3.so到apache的modules目录下
2、修改apache安装目录下conf目录下的httpd.conf
去掉下面几行前的#(注释符)号,可以让apache在启动时自动加载代理(proxy)模块(这几行相邻)
LoadModule
proxy_module modules/mod_proxy.so
LoadModule
proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule
proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule
proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module
modules/mod_proxy_ftp.so
LoadModule
proxy_http_module modules/mod_proxy_http.so
3、向下拉动文档找到
继续下拉文档找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符。
继续下拉文档找到Include conf/extra/httpd-mpm.conf,去掉前面的注释符。
4、打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上如下节点
ServerAdmin webmaster@dummy-host.czs.gov.cn
DocumentRoot "D:\chenzhouMH\WebRoot"
ServerName
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
ErrorLog "logs/test -error.log"
CustomLog "logs/test -access.log" common
这里balancer://是告诉Apache需要进行负载均衡的代理,后面的cluster是集群名,可以随意取,两个日志引擎ErrorLog负责记录错误,CustomLog负责记录所有的http访问以及返回状态,日志名可以自己取,现取为test。httpd-vhosts.conf配置完毕,回到httpd.conf,在文档最下面加上如下的内容和节点
ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=30 maxattempts=3
ProxyPassReverse / balancer://cluster/
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2
5、在apache安装目录下增加conf/jk目录,在此目录下新建mod_jk.conf文件,文件内容是:
#加载mod_jk Module
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
#指定 workers.properties文件路径
JkWorkersFile conf/jk/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMountFile conf/jk/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkShmFile logs/mod_jk.shm
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkRequestLogFormat "%w %V %T"
JkMount /* controller
继续在这个目录下新建uriworkermap.properties文件,文件内容如下:
/*=controller
#!/*.gif=controller
#!/*.jpg=controller
#!/*.png=controller
#!/*.css=controller
#!/*.js=controller
#!/*.htm=controller
#!/*.html=controller
/jkstatus=status
感叹号表示接下来的 URI 不要由 JK 进行处理,也就是 Apache 直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件
继续在此目录下新建workers.properties文件,文件内容如下:
worker.list = controller,status,jvm1,jvm2
worker.template.type=ajp13
worker.template.ping_mode=A
worker.template.ping_timeout=20000
worker.template.connection_pool_size=2048
worker.template.socket_keepalive=true
worker.template.socket_connect_timeout=20000
worker.jvm1.reference=worker.template
worker.jvm1.port=8009
worker.jvm1.host=127.0.0.1
worker.jvm2.reference=worker.template
worker.jvm2.port=9009
worker.jvm2.host=127.0.0.1
worker.controller.type=lb
worker.controller.balanced_workers=jvm1,jvm2
worker.controller.sticky_session=false
worker.status.type=status
worker.status.read_only=true
6、修改httpd-mpm.conf文件,在apache安装目录下的conf/extra目录下:
MinSpareServers 5 允许最小的空闲进程
MaxSpareServers 10 允许最大的空闲进程
StartServers 5 HTTP服务启动时创建的http进程数量
ServerLimit 4000 使得无须重编译Apache就可以加大MaxClients
MaxClients 150这个是服务器最大连结数,如果超过150联结的话系统就有等待情况,如果繁忙的话150是不够的
MaxRequestsPerChild 0 这个建立设置10000,apache避免程序有异常,定义一个子进程完成多少个请求以后退出,如果是0就是永远不退出。如果对自己程序比较难把我的话建议设置一个稍大的值而不是0
三、tomcat的配置
首先要将tomcat解压为两份,一个为tomcat1,另一个为tomcat2。如果在同一台机器上使用,tomcat1尽量不要改动,只需改动tomcat2即可。如果在不同机器上运行,则不需要对tomcat的端口进行改动。
1、 配置关闭端口:
Tomcat1不变,tomcat2的port改为9005。
2、配置connector端口:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
tomcat1不变,tomcat2改为9080
3、配置AJP 1.3 Connector:
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
tomcat1不变,tomcat2改为9009。注意,这里的端口对应Apache httpd.conf中BalancerMember中配置的ajp连接端口。
4、继续向下配置引擎,找到
(注:此时测试时并不能轮流访问tomcat,但如果把tomcat1的jvmRoute改为jvm2,tomcat2的jvmRoute改为jvm1就可以轮流访问了。不过不知道为什么这样设定,盼高手解答。。。。)
5、Tomcat内存配置:在bin目录下找到catalina.bat文件,在些文件中加入一行代码:set JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
6、讲以下代码的注释去掉:
至此,server.xml的配置修改完毕。
四、web项目的配置
在D盘下新建test目录,在test目录下新建test.jsp,源代码如下:
在test目录下新建WEB-INF目录,在WEB-INF目录下新建web.xml,代码如下:
xmlns:xsi="" version="2.4"
xsi:schemaLocation=" /web-app_2_4.xsd">
最后将这个web项目部署到tomcat上。分别在tomcat1和tomcat2的server.xml文件中的Host节点内(即上的一行)增加如下的一行:
到此全部的配置就都已结束。启动apache,分别启动tomcat1和tomcat2,在浏览器中输入如下的地址:(或者将localhost替换为127.0.0.1)
输入对应的名称和值进行提交,可以发现提交时两个tomcat在交替处理。
在配置自己的项目时,可以在tomcat的server.xml文件的Host节点结束前添加如下代码:
此处的path是指输入url时的地址,docBase是指项目所在的实际位置(注意要写到项目的WebRoot目录下)。
写在最后的话:对于tomcat集群的配置,经过几番努力,最终算是成功了。在配置
时,一开始理解不够,tomcat1上的jvmRoute我就配置成了jvm1,tomcat2上的jvmRoute配成了jvm2。后来通过查找资料明白了此处的jvmRoute是用来指定session的黏贴对象。为此我专门验证了下。设置了三个tomcat,
情形一:tomcat1的jvmRoute设置为jvm2,tomcat2的jvmRoute设置为jvm3,tomcat3的jvmRoute设置为jvm1。然后进行测试,结果发现三个tomcat轮流相应请求。
情形二:tomcat1的jvmRoute设置为jvm2,tomcat2的jvmRoute设置为jvm3,tomcat3的jvmRoute设置为jvm3。然后进行测试,结果发现当请求发到tomcat3时,以后的请求都是由tomcat3进行处理。不在转发给其他的tomcat。