apache+tomcat集群实现负载均衡

这篇文章主要记录在MAC OSX(Yosemite)下搭建apache+tomcat集群环境的过程,其它Linux发行版除了安装apache和mod_jk不一样,其它步骤完全一样。


[img]http://dl2.iteye.com/upload/attachment/0109/1895/d931b740-104a-3c2f-b0eb-18fcd8ed81b6.jpg[/img]


1.安装apache,可以参照我的另一篇博客[url=http://995215629-qq-com.iteye.com/blog/2219276]Linux安装Apache[/url],目前MAC OSX(Yosemite)是自带apache的,你可以通过命令sudo apachectl start|stop|restart等方法来启动停止或重启apache服务,启动完后只需在浏览器中输入http://localhost,如果出现it works,则表明启动成功。

2.安装mod_jk,这是apache的一个模块,专门负责连接tomcat, jboss等java容器,下载地址[url]http://tomcat.apache.org/download-connectors.cgi[/url],MAC OS10.10 Yosemite上安装跟官网不太一样,参考[url]http://pablotips.blogspot.sg/2015/01/compiling-modjk-on-mac-os-x-1010.html[/url]

3.整合apache2和mod_jk,找到apache2的安装目录下的httpd.conf文件,不同操作系统目录不一样,自己去查,MAC在/etc/apache2/目录下,在文件最后加上
[b]# Add and load the mod_jk module
Include /etc/apache2/other/mod_jk.conf[/b]
这个mod_jk.conf是我们接下来要创建的,它的作用是打开apache的mod_jk模块

4.切换到/etc/apache2/other/目录,创建mod_jk.conf文件,内容如下
[b]#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[/b]

关于以上配置文件中各参数含义,请参考[url]http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html[/url],请注意,以上配置中包含了worker.properties文件,这个是mod_jk模块连接tomcat用的,下面我们来创建该文件

5.在/etc/apach2/other/下面创建worker.properties,内容如下
[b]
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[/b]

关于以上配置文件各参数,请参考[url]http://tomcat.apache.org/connectors-doc/reference/workers.html[/url],这里我只配置了两台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>

以上配置来自官方文档,可直接复制到项目中,至此,配置完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值