轉(zhuǎn)載(【服務(wù)配置】apache+tomcat配置負(fù)載均衡的網(wǎng)站)
Posted on 2006-11-06 17:20 Coolfiry 閱讀(728) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): Java使用 apache 和 tomcat 配置一個(gè)可以應(yīng)用的 web 網(wǎng)站,要達(dá)到以下要求:
1、? Apache 做為 HttpServer ,后面連接多個(gè) tomcat 應(yīng)用實(shí)例,并進(jìn)行負(fù)載均衡。
2、? 為系統(tǒng)設(shè)定 Session 超時(shí)時(shí)間,包括 Apache 和 tomcat
3、? 為系統(tǒng)屏蔽文件列表,包括 Apache 和 tomcat
2.?? 安裝 tomcat
2.1. 下載,解壓 tomcat
不要下載安裝版 , 下載地址
2.2. 配置 tomcat
2.2.1. ??? 配置 server 的關(guān)閉口
我們需要在一臺(tái)機(jī)器上跑 2 個(gè)不同的 tomcat ,需要修改不同的 tomcat 的關(guān)閉口,避免出現(xiàn)端口被占用的情況。在 server.xml 中找到 server, 將:
<Server port="8005" shutdown="SHUTDOWN">
改為
<Server port="XXXX" shutdown="SHUTDOWN">
XXXX 在這里表示不同的端口:我的兩個(gè) tomcat 分別使用 8035 , 8045
注意:這里之所以要配置不同的 tomcat 關(guān)閉口,只是因?yàn)槲覀兪褂昧硕鄠€(gè) tomcat ,其實(shí)用一個(gè) server 多個(gè)實(shí)例也可以。
2.2.2. ??? 配置 service
我們需要對(duì)不同的 tomcat 的 service 取不同的名字,在 server.xml 中找到:
<Service name="Catalina">
改為:
<Service name="XXXX">
兩個(gè) service 分別為 tomcat6 和 tomcat5
2.2.3. ??? 配置 Connector
這個(gè)部分主要是要改兩個(gè) Connector ,當(dāng)然前提是你的 tomcat 只有兩個(gè) Connector 。
修改 ajp1.3 的端口:
找到: <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改為: <Connector port="XXXX" protocol="AJP/1.3" redirectPort="8443" />
兩個(gè) Service 的 ajp/1.3 的端口分別為: 8019 , 8029
修改 http 的端口:
找到:
<Connector port="8080" protocol="HTTP/1.1"
?????????????? maxThreads="150" connectionTimeout="20000"
?????????????? redirectPort="8443" />
改為:
<Connector port="XXXX" protocol="HTTP/1.1"
?????????????? maxThreads="150" connectionTimeout="20000"
?????????????? redirectPort="8443" />
兩個(gè) Service 的 ajp/1.3 的端口分別為: 8060 , 8070
2.2.4. ??? 配置 Engine
Engine 主要是配置 jvmRoute 屬性,找到:
<Engine name="Catalina" defaultHost="localhost">
改為:
<Engine jvmRoute="XXXX" name="Catalina" defaultHost="localhost">
兩個(gè)實(shí)例分別為: tomcat6 和 tomcat5.
2.2.5. ??? 配置公用性 Context
如果有 Context 是多個(gè)系統(tǒng)公用的,比如圖片等的存放地,可以做個(gè)配置:
在 Host 中增加:
<Context path="/image" docBase="D:\webRoot\image" debug="0" reloadable="false" crossContext="true">
</Context>
2.2.6. ??? 屏蔽文件列表
打開(kāi) tomcat 目錄下的 conf/web.xml ,
找到:
<servlet>
??????? <servlet-name>default</servlet-name>
??????? <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
??????? <init-param>
??????????? <param-name>debug</param-name>
??????????? <param-value>0</param-value>
??????? </init-param>
??????? <init-param>
??????????? <param-name>listings</param-name>
??????????? <param-value>true</param-value>
??????? </init-param>
??????? <load-on-startup>1</load-on-startup>
??? </servlet>
將 listings 參數(shù)改為 false;
2.3. 配置應(yīng)用 (web.xml)
對(duì)系統(tǒng)應(yīng)用做些控制。
配置 session 過(guò)期時(shí)間,大多數(shù)網(wǎng)站用戶都只是做些瀏覽性的操作,為了減輕服務(wù)器負(fù)載壓力,我們將 session 超時(shí)時(shí)間從默認(rèn)的 30 分鐘變?yōu)?/span> 5 分鐘。
在 web 應(yīng)用程序的 web.xml 中 servlet-mapping 之后增加如下一段:
<session-config>
??? <session-timeout>5</session-timeout>
</session-config>
3.?? 安裝 Apache
3.1. 下載、安裝 Apache
下載地址 http://httpd.apache.org/download.cgi
下載后點(diǎn)擊安裝 msi 文件。
安裝的時(shí)候沒(méi)有什么特別需要注意的地方,按照默認(rèn)就行了。是否安裝為 service 看具體情況而定。
3.2. 下載、安裝 Apache 、 tomcat 的 Connector
http://tomcat.apache.org/download-connectors.cgi
注意,很多網(wǎng)站上都介紹是 JK2 ,可能是覺(jué)得 JK2 比 JK 要新吧,其實(shí) JK2 已經(jīng)停止研發(fā)了,建議使用 jk1.2 。
下載壓縮包,之后將 module 目錄中的 mod_jk-apache****.so 文件放入 /module/ 目錄下。
3.3. 配置 Apache ( httpd.conf )
3.3.1. ??? 配置端口:
找到
Listen 80
改為
Listen **
當(dāng)然如果不需要改的話,就不用改了。正常情況無(wú)須更改。
3.3.2. ??? 配置 DocumentRoot
找到 DocumentRoot 段,將其改為:
DocumentRoot "E:/MyWebsite"
這里的 "E:/MyWebsite" 指的是你的 web 程序的根路徑,視具體應(yīng)用而定。
3.3.3. ??? 配置 serverName
找到 serverName 這個(gè)段,將其配置為你的 ServerName
如果沒(méi)有配置為域名,配為 IP 也可以,此處還不是很清楚,多虛擬主機(jī)的情況的配置。
3.3.4. ??? 配置虛擬主機(jī)
<VirtualHost *:80>
??? ServerAdmin flyffa@gmail.com
??? DocumentRoot?????? E:/MyWebsite
??? ServerName localhost
??? DirectoryIndex index.html index.htm index.jsp
??? ErrorLog logs/error_log
??? CustomLog logs/access_log common
??? ErrorDocument 404 /sys/logon.jsp
</VirtualHost>
3.4. 配置 JK 方式的負(fù)載均衡
3.4.1. ??? 配置 module
我們需要與 tomcat 做連接,所以要把 tomcat 的 connector 的模塊配置進(jìn)去。
在 LoadModule 部分加入:
LoadModule jk_module modules/mod_jk-apache-
這個(gè) so 是我下載的版本,個(gè)人可以根據(jù)自己下載的文件名加以配置
JkWorkersFile conf/workers.properties
-指定
connector
的配置文件名稱
JkLogFile logs/mod_jk.log
-指定
connector
的日志文件名稱
JkLogLevel info -指定 connector 的日志等級(jí)
3.4.2. ??? 配置 worker 列表 (conf/workers.properties)
定義列表
worker.list=tomcat6,tomcat5,loadbalancer
定義一個(gè)名為
“l(fā)oadbalancer”
的
worker
其作為對(duì)多個(gè) Tomcat 進(jìn)程的負(fù)載平衡使用:
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat5, tomcat6
( 負(fù)載平衡類(lèi)型的 worker 并不與 Tomcat worker 通訊,它負(fù)責(zé)管理這些 Tomcat worker 。 )
定義多個(gè)
worker
列表
# Set properties for tomcat6 (ajp13)
worker.tomcat6.type=ajp13
worker.tomcat6.host=localhost
worker.tomcat6.port=8019
worker.tomcat6.lbfactor=50
worker.tomcat6.cachesize=10
worker.tomcat6.cache_timeout=600
worker.tomcat6.socket_keepalive=1
worker.tomcat6.reclycle_timeout=300
# Set properties for tomcat5 (ajp13)
worker.tomcat5.type=ajp13
worker.tomcat5.host=localhost
worker.tomcat5.port=8029
worker.tomcat5.lbfactor=50
worker.tomcat5.cachesize=10
worker.tomcat5.cache_timeout=600
worker.tomcat5.socket_keepalive=1
worker.tomcat5.reclycle_timeout=300
注意:
lbfactor=
50
(
當(dāng)此
Tomcat worker
被用于一個(gè)負(fù)載平衡
worker
使用時(shí),此屬性將被使用。它定義了此
worker
的負(fù)載平衡權(quán)值。
)
cachesize= 10 ( 當(dāng)在多線程的 web server (例如 apache2.0 、 IIS 、 Netscape )中使用 JK 時(shí),此屬性是有效的。如果將 cachesize 的值設(shè)置為較高的值,這些支持多線程的 web server 將獲得很好的處理能力。如果此屬性不被設(shè)置,則連接 cache 特性將失效。 )
3.4.3. ??? 配置 Apache 到 tomcat 的橋接
在 DocumnetRoot 片段下加入
JkMount /*.jsp tomcat6
JkMount /*.do tomcat6
JkMount /*Servlet tomcat6
這里只是簡(jiǎn)單的將 apache 的請(qǐng)求轉(zhuǎn)到其中的一個(gè) tomcat 中,形成橋接,至于負(fù)載均衡的時(shí)候,就無(wú)須進(jìn)行這步操作,直接啟動(dòng)負(fù)載均衡。啟動(dòng)負(fù)載均衡見(jiàn)下一節(jié)。
3.4.4. ??? 啟動(dòng)負(fù)載均衡
在 DocumnetRoot 片段下加入
JkMount /*.jsp loadbalancer
JkMount /*.do loadbalancer
JkMount /*Servlet loadbalancer
-指定對(duì)所有的請(qǐng)求啟動(dòng)負(fù)載均衡,這里的
loadbalancer
是定義的
worker
的名字
這里我在配置的時(shí)候犯了兩個(gè)錯(cuò)誤:
第一是沒(méi)有配置 JkWorkersFile conf/workers.properties ,以為 Apache 會(huì)自動(dòng)認(rèn)識(shí)(其實(shí) apache 是自動(dòng)產(chǎn)生了一個(gè)叫做 ajp13 的 worker ,指向本機(jī)的 8009 端口)。
第二是以為 JkMount 語(yǔ)句中出現(xiàn) loadbalancer,ajp13 之類(lèi)的是系統(tǒng)設(shè)定的東西,其實(shí)都是在 workers.properties 文件中定義的,結(jié)果出現(xiàn)名字不匹配的情況。后來(lái)配置了 JkLogFile logs/mod_jk.log 之后看到錯(cuò)誤日志才明白。