写在前面:
Disc:最近研究了一下tomcat集群搭建,这里只是作为个人整理,其中参见了很多优秀的网络资源会在后面列出,如果你想快速的完成配置可以参见本文,如果想了解更多内容可以参见下面的资源列表,那里会给你更多有用的内容。
Context:Apache2.2、Tomcat6.0(非安装版)、mod_jk.so(1.2.37)、windows
res-list:
Ps:关于搭建环境所用的apache、tomcat、mod_jk.so最好自己去官网下、好处自己想去吧
安装步骤:
1、安装apache2.2
2、安装Tomcat6.0
2.1修改Tomcat配置使Tomcat各个实例能同事正常工作
3、正式开始集群配置
3.1apache配置
3.2tomca配置
1.安装apache2.2
apache的安装很方便根据自己的系统到http://httpd.apache.org/下载安装即可。安装完启动访问http://localhost能看到It works!就ok啦。
2.Tomcat6.0安装
Tomcat6.0选择非安装到http://tomcat.apache.org/ 选择自己合适的版本下载。
2.1修改Tomcat配置使Tomcat各个实例能同事正常工作
这里做集群环境首先要保证你的tomcat实例能够同事运行,此实验室在同一台机器上跑多个Tomcat实例所以很重要的一步是避免端口冲突。建议规则在必要的端口上保持实例递增(列:Tomcat_1监听端口为8080,Tomcat_2监听端口为8081,Tomcat_3端口为8082。。。),此测试使用2个Tomcat 实例。
Tomcat_1配置保持默认,Tomcat_2修改service.xml内容如下:
Tomcat_1:
<Server port="8005" shutdown="SHUTDOWN">
Tomcat_2:
<Server port="8006" shutdown="SHUTDOWN">
Tomcat_1:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
Tomcat_2:
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" />
Tomcat_1:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Tomcat_2:
<Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
做完上述修改同时启动Tomcat_1和Tomcat_2保证两个实例能同时工作,分别访问http://localhost:8080和http://localhost:8081测试小猫飞起来了。完成这些只是最基本的工作,真正的还没开始,下面进入重点!
3、apache配置
3.1apache 配置
在apache的安装目录中找到conf/httpd.conf进行如下修改:
1)修改默认项目部署路径
DocumentRoot "apche安装目录/htdocs" #注释掉加入下面内容,这个是我们要放项目的目录 DocumentRoot "c:/www"
2)mod_jk.so配置
LoadModule jk_module modules/mod_jk.so JKWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log <VirtualHost *> DocumentRoot c:/www <Directory "c:/www/hello"> AllowOverride None Order allow,deny Allow from all </Directory> <Directory "c:/www/hello/WEB-INF"> Order deny,allow Deny from all </Directory> ServerAdmin localhost DocumentRoot c:/www/ ServerName localhost:80 DirectoryIndex index.html index.htm index.jsp index.action ErrorLog logs/shsc-error_log.txt CustomLog logs/shsc-access_log.txt common JkMount /* controller JkMount /*WEB-INF controller JkMount /*j_spring_security_check controller JkMount /*.action controller JkMount /servlet/* controller JkMount /*.jsp controller JkMount /*.do controller JkMount /*.action controller JkMount /*fckeditor/editor/filemanager/connectors/*.* controller JkMount /fckeditor/editor/filemanager/connectors/* controller </VirtualHost>
3)workers.properties配置 (在apache安装目录下conf下建立新的workers.prooerties)worker.list = controller #tomcat1 worker.tomcat1.port=8009 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=1 #tomcat2 worker.tomcat2.port=8010 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 #========controller======== worker.controller.type=lb worker.controller.balance_workers=tomcat1,tomcat2 #注意对应关系 worker.lbcontroller.sticky_session=0 worker.controller.sticky_session_force=true worker.connection_pool_size=3000 worker.connection_pool_minsize=50 worker.connection_pool_timeout=50000
3.2tomcat 配置
注意:确保你已经做了2.1中相关端口的修改
1)在tomcat安装目录的conf/service.xml中找到
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">tomcat_1:修改为<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">tomcat_2:修改为<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2">注意:这里所修改的值是根据workers.properties中的配置进行对应的
2) 在1)中修改内容(即:<Engine ......>)的后面加入如下内容<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" bind="127.0.0.1" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4001" selectorTimeout="100" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" timeout="60000"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
注意:每个tomcat实例都要加入,并且注意Receiver port="4001" 此端口不能重复基本内容到这里就结束了
4.测试配置
如果你已经完成上述配置应该就可以实现tomcat的集群了,分别启动Tomcat_1,Tomcat_2
Tomcat_1:
Tomcat_2:
2)启动apache,apache能正常启动就ok啦
3)这是一个很简单的测试项目hello,只是打印一下session,在tomcat每个实例中的webapps中部署hello,别忘了在apache中也部署(d:/www我们前面修改过的)发挥你的想象进行各种测试吧。。。。。。
注意注意:在测试项目的web.xml中加入 <distributable/>
1:
2: