天天看點

Apache2.2.4 + Tomcat7叢集配置

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在同一台機器上使用的是同一個配置檔案,端口沖突無法啟動

繼續閱讀