Apache 做為 HttpServer ,后面連接多個(gè) tomcat 應(yīng)用實(shí)例,并進(jìn)行負(fù)載均衡
1.安裝JDK6.0
2.安裝Tomcat6.0.14和Tomcat6.0.20
3.下載并安裝
Apache HTTP Server2.2.14,下載地址:http://hitech.onlinedown.net/down/apache_2.2.14-win32-x86-no_ssl.zip
此處注意,如果你本機(jī)已經(jīng)裝了iis并且占用80端口,務(wù)必先在服務(wù)中將iis停止或禁用。軟件默認(rèn)安裝即可。安裝過程中設(shè)置Network Domain和Server Name為localhost,設(shè)置你的email地址,下方會(huì)讓你選擇only for the current user或for all users。默認(rèn)選擇for all users。這樣
Apache就會(huì)占用80端口,并且做為一個(gè)系統(tǒng)服務(wù)開機(jī)自運(yùn)行。
安裝完成之后,你在瀏覽器中輸入http://localhost,將會(huì)看到
Apache的成功頁面“It works!”
4..配置
Apache:
修改
Apache配置文件\Apache2.2\conf\httpd.conf
1)將以下6個(gè)Module的注釋去掉:
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_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
apache2.x以前配置
apache和tomcat可能需要用到mod_jk.so進(jìn)行
apache和tomcat的鏈接。apache2.x中集成了mod_jk.so的功能,只需簡單的把上面6個(gè)module的注釋打開。
2)在DirectoryIndex后面增加index.jsp,改完以后是:
- <IfModule dir_module>
- DirectoryIndex index.html index.jsp
- </IfModule>
<IfModule dir_module>DirectoryIndex index.html index.jsp</IfModule>
3)在文件httpd.conf的最后加入以下內(nèi)容:
- ProxyRequests Off
- <proxy balancer://cluster>
- BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=jvm1
- BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm2
- </proxy>
ProxyRequests Off<proxy balancer://cluster>BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=jvm1BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm2</proxy>
4)設(shè)置apache2.2虛擬主機(jī)
a>.先在conf\httpd.conf中引入配置虛擬主機(jī)的控制文件,將配置文件中默認(rèn)注釋掉的配置信息放開就可以了:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
b>.修改conf/extra/httpd-vhosts.conf文件,在最下面加入虛擬主機(jī)的配置信息
- <VirtualHost *:80>
- ServerAdmin bjyzxxds@javaeye.com
- ServerName localhost
- ServerAlias localhost
- ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
- ProxyPassReverse / balancer://cluster/
- </VirtualHost>
<VirtualHost *:80>ServerAdmin bjyzxxds@javaeye.comServerName localhostServerAlias localhostProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=OnProxyPassReverse / balancer://cluster/</VirtualHost>
其中的域名和路徑的值依照安裝
apache http server2.2時(shí)設(shè)置的域名和路徑,保持一致即可。
5.配置tomcat
1).配置tomcat的啟動(dòng)和關(guān)閉端口
若是在同一臺(tái)機(jī)器上同時(shí)運(yùn)行多個(gè)tomcat,則需要修改tomcat 的啟動(dòng)端口和關(guān)閉端口。
a>.啟動(dòng)端口修改:將每個(gè)tomcat的server.xml文件作如下修改
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
改為
- <Connector port="xxxx" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
<Connector port="xxxx" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
如果需要用到tomcat的共享線程池,其端口值也設(shè)置為xxxx,保持一致(線程池缺省是被注釋掉的):
- <Connector executor="tomcatThreadPool"
- port="xxxx" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
<Connector executor="tomcatThreadPool"port="xxxx" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
b>.設(shè)置tomcat的關(guān)閉端口:
將<Server port="8005" shutdown="SHUTDOWN">修改為
<Server port="yyyy" shutdown="SHUTDOWN">每個(gè)tomcat的端口yyyy不同就行。
2).配置engine
tomcat默認(rèn)的engine配置為:
<Engine name="Catalina" defaultHost="localhost">
為了通過AJP來支持負(fù)載均衡,需要配置engine的jvmRoute屬性。將server.xml的默認(rèn)engine配置注釋掉,按給出的jvmRoute示例做如下配置:
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">
注:關(guān)于engine的name屬性值的設(shè)置,不同版本的tomcat里面server.xml中給出的配置例子不同,比如tomcat6.0.14中的例子為:
- <!-- You should set jvmRoute to support load-balancing via AJP ie :
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
- -->
<!-- You should set jvmRoute to support load-balancing via AJP ie :<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">-->
tomcat6.0.20中例子為:
- <!-- You should set jvmRoute to support load-balancing via AJP ie :
- <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">
- -->
<!-- You should set jvmRoute to support load-balancing via AJP ie :<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">-->
一般按照tomcat中給的例子的name屬性值設(shè)置即可(Catalina或Standalone或aaa,任意都行),新安裝的tomcat在第一次啟動(dòng)后,將在tomcat的\conf\目錄下創(chuàng)建一個(gè)與engine中name屬性值一樣的文件夾。
不過在我配置時(shí)發(fā)現(xiàn)6.0.14版本的tomcat在啟動(dòng)后并沒有在\conf\目錄下新建文件夾,而且查看啟動(dòng)日志也沒發(fā)現(xiàn)異常。6.0.14版的tomcat是安裝exe的形式注冊(cè)服務(wù)的,6.0.20版的tomcat是解壓然后手動(dòng)注冊(cè)服務(wù)的,安裝形式不同,可能這是這個(gè)地方存在差異的原因吧。
3)配置AJP Connector
將server.xml中的缺省配置
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改為
- <Connector port="zzzz" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="zzzz" protocol="AJP/1.3" redirectPort="8443" />
port的值z(mì)zzz與apache2.2中的文件httpd.conf中<proxy balancer://cluster></proxy>之間配置的均衡器成員的端口一致,一一對(duì)應(yīng);上面在配置的jvmRoute的值(如jvm1)應(yīng)該與httpd.conf中<proxy balancer://cluster></proxy>之間配置的均衡器成員的route屬性的值一致,且必須唯一。
4)配置Cluster
打開tomcat的server.xml,默認(rèn)的Cluster配置如下,缺省被注釋掉了:
<Cluster className="org.
apache.catalina.ha.tcp.SimpleTcpCluster"/>
如何配置<Cluster,可以參考\webapps\docs\cluster-howto.html,直接將說明文檔中“Configuration Example”后面的一段復(fù)制過來,即可滿足基本的使用,內(nèi)容如下:
- <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="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;.*\.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>
<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="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;.*\.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>
若啟動(dòng)時(shí)出現(xiàn)這樣的錯(cuò)誤提示:
2009-11-17 13:02:55 org.
apache.catalina.ha.deploy.FarmWarDeployer start
嚴(yán)重: FarmWarDeployer can only work as host cluster subelement!
則將以下部分注釋掉即可:
- <!--
- <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
- tempDir="/tmp/war-temp/"
- deployDir="/tmp/war-deploy/"
- watchDir="/tmp/war-listen/"
- watchEnabled="false"/>
- -->