在負責的項目中遇到了TOMCAT集羣的應用,特寫下來這個實例。
一、系統環境
1、使用APACHE+TOMCAT方法來實現集羣
2、Clustery主機爲Centos5.6 ,tomcat 主機爲Centos一臺(與APACHE爲同一臺)、一臺Asianux、一臺WIN,查看一下APACHE版本與JDK版本:
[root@localhost ~]# httpd -version Server version: Apache/2.2.3 [root@localhost ~]# java -version java version "1.6.0_17" OpenJDK Runtime Environment (IcedTea6 1.7.5) (rhel-1.16.b17.el5-i386) OpenJDK Server VM (build 14.0-b16, mixed mode) ##各TOMCAT主機JDK版本應儘量一致2、時間的因素 所有節點的操作系統時間必須一致!不然會出現節點之間Session同步困難的現象,從而網站會很慢,從同一臺NTP獲取時間是個不錯的主意。
二、具體配置 1、APACHE配置
[root@localhost ~]# vi /etc/httpd/conf.d/mod_jk.conf <ifmodule !jk_module> LoadModule jk_module modules/mod_jk-1.2.23-apache-2.2.x-linux-i686.so ##下載mod_jk放到/etc/httpd/modules下, 注意版本,TOMCAT官網有下載 </ifmodule> <ifmodule jk_module> JkWorkersFile conf/workers.properties JkMount /* controller </ifmodule>建立conf/workers.properties
[root@localhost ~]# vi workers.properties worker.list=controller,tomcat01,tomcat02,tomcat03 worker.tomcat01.port=8009 worker.tomcat01.host=localhost worker.tomcat01.type=ajp13 worker.tomcat01.lbfactor=1 ##權重,值越大分到的請求越多 worker.tomcat02.port=8019 worker.tomcat02.host=192.168.1.190 worker.tomcat02.type=ajp13 worker.tomcat02.lbfactor=1 worker.tomcat03.port=8029 worker.tomcat03.host=192.168.1.188 worker.tomcat03.type=ajp13 worker.tomcat03.lbfactor=1 worker.controller.type=lb worker.controller.balanced_workers=tomcat01,tomcat02,tomcat03 #worker.controller.sticky_session=1 ##粘性session,本例用複製session;2、TOMCAT 配置 2.1.三個tomcat的AJP 端口與workers.properties中要一致
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />2.2.Engine配置
[root@localhost ~]# vi tomcat/conf/server.xml <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat01">##jvmRoute爲本tomcat在workers.properties中的名字2.3.Cluster配置 (sessions的配置)
[root@localhost ~]# vi tomcat/conf/server.xml <cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="10"> ##異步模式下完成完成Session的拷貝並效驗 <manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <channel className="org.apache.catalina.tribes.group.GroupChannel"> <membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" ##組播地址 port="45564" frequency="500" dropTime="3000"/> <receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4031" autoBind="100" selectorTimeout="1000" maxThreads="6"/> <!-- timeout="60000"--> <sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" /> </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;"/>##過濾一些不需要同步session的文件,提高反應速度; <valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <clusterlistener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <clusterlistener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </cluster>三、web應用程序中session複製配置 session複製配置則是在發佈的web應用程序中的web.xml中添加
<display -name>Tomcat</display> <distributable /> ##在兩者之間加入這句 </web-app>