apache伺服器和tomcat的連接配接方法其實有三種:mod_jk、http_proxy和ajp_proxy。
采用ajp代理模式配置apache+tomcat實作負載均衡(從2.x以後apache自身已內建了mod_jk.so的功能)
使用這種協定,具有更高的性能,因為它采用的是二進制傳輸。比http的文本傳輸要有更高的效率。在apache中要使用mod_proxy和mod_proxy_ajp,在tomcat中則要開啟ajp服務。
apahce 2.2.4下載下傳位址
http://archive.apache.org/dist/httpd/binaries/win32/apache_2.2.4-win32-x86-no_ssl.msi
安裝後配置
1.httpd.conf配置
将下面的内容去掉注釋:(其實注釋掉前面三行也就行了,因為采用的是ajp代理)
loadmodule proxy_module modules/mod_proxy.so
loadmodule proxy_ajp_module modules/mod_proxy_ajp.so
loadmodule proxy_balancer_module modules/mod_proxy_balancer.so
loadmodule proxy_connect_module modules/mod_proxy_connect.so
loadmodule proxy_http_module modules/mod_proxy_http.so
loadmodule proxy_ftp_module modules/mod_proxy_ftp.so
loadmodule status_module modules/mod_status.so
loadmodule info_module modules/mod_info.so //這兩個是叢集監控用的
再找到<ifmodule dir_module></ifmodule>加上index.jsp修改成
<ifmodule dir_module>
directoryindex index.html index.jsp
</ifmodule>
找到include conf/extra/httpd-vhosts.conf,去掉前面的注釋符。
apache監控必須在負載均衡之前配置
#過濾server-stauts監控頁面
proxypass /server-status !
#過濾balancer-manager監控頁面
proxypass /balancer-manager !
<location /server-status>
sethandler server-status
order deny,allow
deny from all
allow from 127.0.0.1
</location>
<location /balancer-manager >
sethandler balancer-manager
order deny,allow
deny from all
allow from 127.0.0.1
負載均衡實作:
在httpd.conf 最下面加入,proxyrequests off 是告訴apache需要使用反向代理
proxyrequests off
<proxy balancer://cluster>
balancermember ajp://127.0.0.1:8109 loadfactor=1 route=jvm1
balancermember ajp://127.0.0.1:8209 loadfactor=1 route=jvm2
</proxy>
配置虛拟主機
修改conf/extra/httpd-vhosts.conf檔案
在檔案最下面加入 删除其他無用的<virtualhost>
<virtualhost *:80>
serveradmin [email protected]
servername localhost
serveralias localhost
proxypass / balancer://cluster/ stickysession=jsessionid nofailover=on #重定向
proxypassreverse / balancer://cluster/ #反向代理
</virtualhost>
注:
session replication 會話複制
session共享,多個伺服器session拷貝儲存,一台當機不會影響使用者的登入狀态;
session sticky 會話不複制
即目前使用者的請求都集中定位到一台伺服器中,這樣單台伺服器儲存了使用者的session登入資訊,如果當機,則等同于單點部署,會丢失;
nofailover (無故障切換) 預設值off
如果設為‘on’,當工作單元被禁用或者出錯時,會話則立即中斷。可以将該值設為on,如果後端伺服器不支援會話複制(session replication)。
配置tomcat
我們需要在一台機器上跑2個不同的tomcat ,需要修改不同的tomcat的關閉口,避免出現端口被占用的情況
分别為
1.配置關閉端口
<server port="8105" shutdown="shutdown">
<server port="8205" shutdown="shutdown">
2.配置 engine
把原來的配置注釋掉
<!-- <engine name="catalina" defaulthost="localhost"> -->
<engine name="standalone" defaulthost="localhost" jvmroute="jvm1">
3.配置connector的端口
<connector port="8080" protocol="http/1.1"
connectiontimeout="20000"
redirectport="443" uriencoding="utf-8"/>
<connector port="9080" protocol="http/1.1"
4.配置 ajp 1.3 connector
<connector port="8109" protocol="ajp/1.3" redirectport="443" />
<connector port="8209" protocol="ajp/1.3" redirectport="443" />
5.配置cluster(每個tomcat中都要修改,這裡的配置是為了可以在叢集中的所有tomcat節點間共享會話(session))
<!--
<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"/>
<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="5001" 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>
項目的web.xml檔案中<web-app>節點下添加 <distributable/>
主要是添加<distributable/>,distributable元素用來告訴servlet容器,程式将部署在分布式web容器中
最後啟動apache ,tomcat1 ,tomcat2
删除環境變量中的catalina_home=d:\program files\apache-tomcat-7.0.62,
不然多個tomcat在同一台機器上使用的是同一個配置檔案,端口沖突無法啟動