这篇文章主要记录在MAC OSX(Yosemite)下搭建apache+tomcat集群环境的过程,其它Linux发行版除了安装apache和mod_jk不一样,其它步骤完全一样。
1.安装apache,可以参照我的另一篇博客
Linux安装Apache,目前MAC OSX(Yosemite)是自带apache的,你可以通过命令sudo apachectl start|stop|restart等方法来启动停止或重启apache服务,启动完后只需在浏览器中输入http://localhost,如果出现it works,则表明启动成功。
2.安装mod_jk,这是apache的一个模块,专门负责连接tomcat, jboss等java容器,下载地址
http://tomcat.apache.org/download-connectors.cgi,MAC OS10.10 Yosemite上安装跟官网不太一样,参考
http://pablotips.blogspot.sg/2015/01/compiling-modjk-on-mac-os-x-1010.html
3.整合apache2和mod_jk,找到apache2的安装目录下的httpd.conf文件,不同操作系统目录不一样,自己去查,MAC在/etc/apache2/目录下,在文件最后加上
# Add and load the mod_jk module
Include /etc/apache2/other/mod_jk.conf
这个mod_jk.conf是我们接下来要创建的,它的作用是打开apache的mod_jk模块
4.切换到/etc/apache2/other/目录,创建mod_jk.conf文件,内容如下
#Load mod_jk module
LoadModule jk_module /usr/libexec/apache2/mod_jk.so
#Where to find workers.properties
JkWorkersFile /etc/apache2/other/workers.properties
#Where to put jk logs
JklogFile /etc/apache2/other/mod_jk.log
#Set the jk log level[debug/error/info]
JkLogLevel info
#Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
#JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
#JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# All requests go to controller by default
JkMount /* controller
# Serve html, jpg and gif using httpd
JkUnMount /*.html controller
JkUnMount /*.jpg controller
JkUnMount /*.gif controller
关于以上配置文件中各参数含义,请参考
http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html,请注意,以上配置中包含了worker.properties文件,这个是mod_jk模块连接tomcat用的,下面我们来创建该文件
5.在/etc/apach2/other/下面创建worker.properties,内容如下
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
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1
关于以上配置文件各参数,请参考
http://tomcat.apache.org/connectors-doc/reference/workers.html,这里我只配置了两台tomcat,如果想用多台,在这边增加配置就好了。
#sticky_session这个属性需要特别注意,如果是true的话,你的所有request会一直发到同一台server上,如果这台server挂掉,request并不会转发到其它正常的server上,false时则会自动转到其它server上。
6.准备两份tomcat,我这里用的是版本是7.0.6,第一份tomcat端口保持不变,修改第二份server.xml中相应的端口号,保证跟第一份不重复,最简单的就是每个端口号加1,然后为每个tomcat指定jvmRoute,设置如下
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">,
分别为tomcat1,tomcat2,对应worker.properties中的配置,同时需要把Cluster节点的注释打开,至此,你在浏览器中输入http://localhost/项目名称,就可以访问你的项目了。
7.但上面的方案还没有实现session共享,为了实现session复制需要做两步,
(1)在项目的web.xml中<web-app>节点内添加节点<distributable/>,这是一个自闭合的空节点,告诉tomcat去分发session。
(2)将tomcat的server.xml文件中的Cluster节点修改为如下配置
<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"
address="228.0.0.4" port="45564" frequency="500" dropTime="3000" />
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" port="5000" selectorTimeout="100" maxThreads="6" />
<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|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt" />
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/"
watchEnabled="false" />
<ClusterListener
className="org.apache.catalina.ha.session.ClusterSessionListener" />
</Cluster>
以上配置来自官方文档,可直接复制到项目中,至此,配置完成