之前有研究過apache+resin+tomcat域名轉發整合,後來做了apache+resin負載均衡,最近又學習了下apache+tomcat的負載均衡配置方法.
一:準備材料.
1.apache2.2.11
2.tomcat2.0.18
3.mod_jk(我用的是:mod_jk-1.2.28-httpd-2.2.3.so,版本要匹配,比如:apache2.2.x的要用mod_jk1.2.28)
-----------------------------------------------------------------------------------------------------
二:workers.properties創建
workers.properties是用來連接apache和tomcat的連接文件,具體配置如下:
ps=/
worker.list = controller,tomcat1,tomcat2 #server 列表
#========tomcat1========
worker.tomcat1.port=8009 #ajp13 端口號,在tomcat下server.xml配置,默認8009
worker.tomcat1.host=localhost #tomcat的主機地址,如不爲本機,請填寫ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1 #server的加權比重,值越高,分得的請求越多
#========tomcat2========
worker.tomcat2.port=8010 #ajp13 端口號,在tomcat下server.xml配置,默認8009
worker.tomcat2.host=localhost #tomcat的主機地址,如不爲本機,請填寫ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 #server的加權比重,值越高,分得的請求越多
#========controller,負載均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分擔請求的tomcat
worker.controller.sticky_session=1
/**
*.這裏面用了兩個tomcat(tomcat1,tomcat2)作爲複雜均衡的容器
*.worker.tomcat1.port:爲tomcat中用來監聽apache轉發請求的端口
*.worker.tomcat1.host=localhost:localhost爲tomcat所在的ip(如果與apache在同一臺服務器則用localhost即可)
*.worker.tomcat1.type=ajp13 指定了tomcat與apache通信的方式
*.worker.tomcat1.lbfactor = 1 制定了此tomcat的加權比重,值越高,分得的請求越多
-------------------------------------
*.controller是一個虛擬的服務,用來對兩個tomcat負載均衡
*.worker.controller.type=lb是一種apache轉發給tomcat的方式,lb爲負載均衡模式(另外還有ajp13,ajp12等等)
*.worker.controller.balanced_workers=tomcat1,tomcat2制定了負載均衡要用到的服務器
*/
-------------------------------------------------------------------------------------------------------
三:tomcat配置
tomcat的conf文件中找到:server.xml並打開
1.多個tomcat在同一服務器上啓動的時候要注意端口衝突,需要注意修改以下三個端口
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />(此端口即爲tomcat與apache的通信端口)
2.在server.xml中
將
<Engine name="Catalina" defaultHost="localhost">
修改爲
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">(與workers.properties名稱對應)
3.在server.xml中
將
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
替換爲
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<!--
<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="4011"
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;.*/.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>
---------------------------------------------------------------------------------------------------------------
四:apache配置
在apache的conf文件中找到httpd.conf文件並打開
在文件的最末尾加入:
#設置Apache與Tomcat之間的連接,讓Apache遇到jsp文件時,在後臺將其交由Tomcat去處理
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so
#指定workers.properties文件
JkWorkersFile "D:/temptest/apache2.2/conf/workers.properties"
#指定apache將哪些信息交給tomcat處理
JkMount /* controller
---------------------------------------------------------------------------------------------------------------
五:不要忽略這一步
在你的web工程裏面的web.xml中添加:
<distributable/>
這樣你的工程才能支持session同步
至此apache與tomcat集羣就算完成了
此外還有個問題需要注意一下那就是數據對象的二級緩存的問題,如果數據庫方使用的第三方的二級緩存就要注意處理緩存方面的集羣問題了
寫的不對的地方歡迎大家批評指導,也歡迎大家一起交流!