0, 環(huán)境說明
?????? Apache? :apache_2.0.55???? 1 個(gè)
???????Tomcat:? apache-tomcat-5.5.17 (zip版) 2個(gè)
???????mod_jk:: mod_jk-apache-2.0.55.so? 1個(gè)
第一部分:負(fù)載均衡
??? 負(fù)載均衡,就是apache將客戶請(qǐng)求均衡的分給tomcat1,tomcat2....去處理
?? 1.安裝apche,tomcat
?? http://httpd.apache.org/?下載Apache 2.0.55
??? http://tomcat.apache.org/download-55.cgi?下載tomcat5.5 zip版本(解壓即可,綠色版)
?? http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/? 下載mod_jk,注意和? apache版本匹配
?? 按照jdk,我的路徑為:E:\ide\apache\Apache2
?? 解壓兩份Tomcat, 路徑分別為 E:\ide\tomcat1,E:\ide\tomcat2
下載mod_jk
2.修改Apache配置文件http.conf
?? 在apache安裝目錄下conf目錄中找到http.conf
?? 在文件最后加上下面一句話就可以了
? include "E:\ide\apache\Apache2\conf\mod_jk.conf"
2. http.conf 同目錄下新建mod_jk.conf文件,內(nèi)容如下
??
#加載mod_jk Module
LoadModule jk_module modules/mod_jk-apache-2.0.55.so
#指定 workers.properties文件路徑
JkWorkersFile conf/workers.properties
#指定那些請(qǐng)求交給tomcat處理,"controller"為在workers.propertise里指定的負(fù)載分配控制器
JkMount /*.jsp controller
3.在http.conf同目錄下新建 workers.properties文件,內(nèi)容如下
?
worker.list = controller,tomcat1,tomcat2? #server 列表
#========tomcat1========
worker.tomcat1.port=8009???????? #ajp13 端口號(hào),在tomcat下server.xml配置,默認(rèn)8009
worker.tomcat1.host=localhost? #tomcat的主機(jī)地址,如不為本機(jī),請(qǐng)?zhí)顚慽p地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1?? #server的加權(quán)比重,值越高,分得的請(qǐng)求越多
#========tomcat2========
worker.tomcat2.port=9009?????? #ajp13 端口號(hào),在tomcat下server.xml配置,默認(rèn)8009
worker.tomcat2.host=localhost? #tomcat的主機(jī)地址,如不為本機(jī),請(qǐng)?zhí)顚慽p地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1?? #server的加權(quán)比重,值越高,分得的請(qǐng)求越多
#========controller,負(fù)載均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2?? #指定分擔(dān)請(qǐng)求的tomcat
worker.controller.sticky_session=1
4.修改tomcat配置文件server.xml
如果你在不同電腦上安裝tomcat,tomcat的安裝數(shù)量為一個(gè),可以不必修改tomcat配置文件
我這里是在同一臺(tái)電腦上安裝兩個(gè)tomcat,所以需要更改其中一個(gè)的設(shè)置
打開tomcat2/conf/server.xml文件
?
5.編寫一個(gè)測(cè)試jsp
建立一個(gè)目錄test.里面新建一個(gè)test.jsp,內(nèi)容為
<%
?? System.out.println("===========================");
%>
把test放到tomcat1,tomcat2的webapps下
6.啟動(dòng)apache,tomcat1,tomcat2,進(jìn)行測(cè)試
再刷新一次,tomcat2也打印了一條,再刷新,可以看到請(qǐng)求會(huì)被tomcat1,tomcat2輪流處理,實(shí)現(xiàn)了負(fù)載均衡
?
第二部分,配置集群
?? 只配置負(fù)載均衡還不行,還要session復(fù)制,也就是說其中任何一個(gè)tomcat的添加的session,是要同步復(fù)制到其它tomcat, 集群內(nèi)的tomcat都有相同的session
1. 修改tomcat1, tomcat2的server.xml,將集群部分配置的在注釋符刪掉,并將tomcat2的4001端口改為4002,以避免與tomcat沖突,當(dāng)然,如果是兩臺(tái)電腦,是不用改端口的,去掉注釋符即可
??
2,修改測(cè)試項(xiàng)目test
修改test.jsp,內(nèi)容如下
? <%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
? out.println("<br> ID " + session.getId()+"<br>");
? // 如果有新的 Session 屬性設(shè)置
? String dataName = request.getParameter("dataName");
? if (dataName != null && dataName.length() > 0) {
???? String dataValue = request.getParameter("dataValue");
???? session.setAttribute(dataName, dataValue);
? }
? out.print("<b>Session 列表</b>");
? Enumeration e = session.getAttributeNames();
? while (e.hasMoreElements()) {
???? String name = (String)e.nextElement();
???? String value = session.getAttribute(name).toString();
???? out.println( name + " = " + value+"<br>");
???????? System.out.println( name + " = " + value);
?? }
%>
? <form action="index.jsp" method="POST">
??? 名稱:<input type=text size=20 name="dataName">
???? <br>
??? 值:<input type=text size=20 name="dataValue">
???? <br>
??? <input type=submit>
?? </form>
</body>
</html>
然后在test 新建WEB-INF目錄,WEB-INF下新建web.xml,內(nèi)容如下
注意:在你的應(yīng)用的web.xml加入? <distributable/>即可
ok,講test復(fù)制到tomcat1,tomcat2的webapps下,重啟apache,tomcat1,tomcat2,
新建一個(gè) 名稱為 xiaoluo? ,值為 cdut 的session,提交查詢,新開一個(gè)ie窗口,再提交查詢,如圖,可以看到,兩個(gè)tomcat 是負(fù)載均衡,并且session同步的
?
?
(
1
)點(diǎn)擊文件
apache_2.0.48-win32-x86-no_ssl.msi
(
2
)安裝路徑為
D:/ JIANGXI/Apache Group/Apache2
說明:
A、
需要輸入
Network Domain
、
Server Name
和
Administrator's Email Address
在
“Network Domain”
里輸入域。如果用本站的二級(jí)域名,例如
“test.dnschek.net”
,請(qǐng)輸入
“test.dnschek.net”
。如果用頂級(jí)域名,請(qǐng)輸入
“xxx.com”
。
(
1166.jx163.com
)
在
“Server Name”
里輸入服務(wù)器名。如果用本站的二級(jí)域名,請(qǐng)輸入您的域名
“test.dnschek.net”
。如果用頂級(jí)域名,請(qǐng)輸入
“www.xxx.com”
。
在
“Administrator's Email Address”
里輸入網(wǎng)站管理員的
Email
地址。
B、
選擇典型安裝。
C、
其他
采用默認(rèn)配置。
D、
如果系統(tǒng)安裝了其他
Web
服務(wù)器,如
IIS
、
WPS
等,占用了
80
端口的話,可以在
Apache
安裝的時(shí)候,選擇使用其他端口,如
8080
等。或者把
IIS
的所有
Web
站點(diǎn)停止。
?
1.1.2
??????
Modules
下添加.so文件
(
1
)下載
apache
的一個(gè)組件
Jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip
解壓縮后將
modules
目錄里面的
mod_jk2.so
文件,
copy
到
Apache
安裝目錄下
modules
文件夾里
。
需要注意參數(shù)配置如下:
(1)
在行
"# LoadModule foo_module modules/mod_foo.so",
加入如下行
:
# Load mod_jk
LoadModule jk_module modules/mod_jk.so
#
Configure mod_jkJkWorkersFile conf/workers.propertiesJkLogFile logs/mod_jk.logJkLogLevel info
?
(
2
)在參數(shù)
DocumentRoot
下加入如下行:
???
?JkMount /* loadbalancer
(
3
)編輯
Apache\Apache Group\Apache2\conf\
目錄下的
httpd.conf
文件,找到
ServerName
這一項(xiàng)參數(shù),這一行是被注釋掉的(前面有#的符號(hào))。去掉前面的在
"#"
符號(hào),并在后面填入你的
hostname
或
IP
地址,在這里設(shè)置為:
ServerName
1166.jx163.com:80
說明:詳細(xì)的配置信息,參見
.\4-WEB\Apache\Apache Group\Apache2\conf\httpd.conf
1.1.4?????????
配置參數(shù)
workers.properties
(
1
)
定義
Workers
列表:
# list the workers by name
worker.list=tomcat1, tomcat2, tomcat3,? loadbalancer
?
(
2
)
定義
Workers
的類型:
# First tomcat server
worker.tomcat1.port=
8009??????
(
Tomcat worker
主機(jī)的偵聽端口。
)
worker.tomcat1.host=
127.0.0.1??
(
偵聽
ajp13
請(qǐng)求的
Tomcat worker
主機(jī)
)
worker.tomcat1.type=
ajp13????
(說明:
其使用
ajpv13
協(xié)議與
Tomcat
進(jìn)程通訊
)
?
# Specify the size of the open connection cache.
worker.tomcat1.cachesize=
1000
(
當(dāng)在多線程的
web server
(例如
apache2.0
、
IIS
、
Netscape
)中使用
JK
時(shí),此屬性是有效的。如果將
cachesize
的值設(shè)置為較高的值,這些支持多線程的
web server
將獲得很好的處理能力。如果此屬性不被設(shè)置,則連接
cache
特性將失效。
)
#
# Specifies the load balance factor when used with
# a load balancing worker.
# Note:
#? ----> lbfactor must be > 0
#? ----> Low lbfactor means less work done by the worker.
worker.tomcat1.lbfactor=
100
(
當(dāng)此
Tomcat worker
被用于一個(gè)負(fù)載平衡
worker
使用時(shí),此屬性將被使用。它定義了此
worker
的負(fù)載平衡權(quán)值。
)
(2)??????
Second
和
3th
的
tomcat server
配置跟
First tomcat server
類似,區(qū)別的地方:
Second
和
3th
的
worker.tomcat1.port
分別為:
8019
、
8029
(
5
)
定義一個(gè)名為
“l(fā)oadbalancer”
的
worker
,其作為對(duì)多個(gè)
Tomcat
進(jìn)程的負(fù)載平衡使用:
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1, tomcat2, tomcat3
(
負(fù)載平衡類型的
worker
并不與
Tomcat worker
通訊,它負(fù)責(zé)管理這些
Tomcat worker
。
)
說明:為保障平臺(tái)的穩(wěn)定運(yùn)行,系統(tǒng)提供
3
個(gè)
tomcat
(命名
webserver-1
,
webserver-2
,
webserver-3
)運(yùn)行。
??
(
1
)在
D:/ JIANGXI/
下創(chuàng)建
webserver-1
文件夾。
(
2
)將“
5-WEB/1-Tomcat
”下的文件復(fù)制到
D:/ JIANGXI/webserver-1
。要求
Tomcat5.0
版本。
l????????
打開文件“
..\ 5-WEB\1-Tomcat\conf\server.xml
”
l????????
(
1
)
3
個(gè)
Tomcat
的
server.xml
配置需要注意項(xiàng)目如下:
A
、
Change the control port
:
配置服務(wù)器監(jiān)聽
shutdown
命令的端口
Port
:
SHUTDOWN
,
3
個(gè)
Tomcat
分別為:
<Server port="8035" shutdown="SHUTDOWN" debug="0">
<Server port="8045" shutdown="SHUTDOWN" debug="0">
<Server port="8055" shutdown="SHUTDOWN" debug="0">
?
A、
定義
Tomcat
的標(biāo)準(zhǔn)獨(dú)立服務(wù)
Service
,
3
個(gè)
Tomcat
分別為:
<Service name="tomcat1">
<Service name="tomcat2">
<Service name="tomcat3">
?
C
、定義非
SSL
的
HTTP/1.1
連接器
Connector
:
?<Connector?port="XXXX"
???????????????maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75"
???????????????enableLookups="false"?redirectPort="8443"?acceptCount="100"
???????????????debug="0"?connectionTimeout="20000"?
???????????????disableUploadTimeout="true"?/>
?
XXXX
對(duì)應(yīng)
3
個(gè)
Tomcat
分別設(shè)置為:
8060
、
8070
、
8080
?
D
、
Change the AJP13 port
:
定義
Coyote/JK2?AJP?1.3
連接器
Connector
:
<Connector port=" XXXX"
?????????????? enableLookups="false" redirectPort="YYYY" debug="0"
?????????????? protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100"? acceptCount="0"/>
YYYY
對(duì)應(yīng)
3
個(gè)
Tomcat
分別設(shè)置為:
8009
、
8019
、
8029
YYYY
對(duì)應(yīng)
3
個(gè)
Tomcat
分別設(shè)置為:
8443
、
8453
、
8463
?
E
、
Add a unique jvmRoute to the Catalina engine
:
設(shè)置容器體系中最高級(jí)別的容器,各個(gè)
Tomcat
跟
B
項(xiàng)的設(shè)置對(duì)應(yīng),
3
個(gè)
Tomcat
分別為:
將
<Engine name="Standalone" defaultHost="localhost" debug="0">
替換為:
<Engine jvmRoute="tomcat1" name="Standalone" defaultHost="localhost" debug="0">
<Engine jvmRoute="tomcat2" name="Standalone" defaultHost="localhost" debug="0">
<Engine jvmRoute="tomcat3" name="Standalone" defaultHost="localhost" debug="0">
?
F
、設(shè)置用戶圖片、用戶上傳雜志圖片存放目錄。
3
個(gè)
Tomcat
配置相同:
<Context path="/faceImage" docBase="D:\jiangxi\uploadimages\faceImage" debug="0" reloadable="false" crossContext="true">
</Context>? ? ?
<Context path="/magazineImage" docBase="D:\jiangxi\uploadimages\magazineImage" debug="0" reloadable="false" crossContext="true">
</Context>?
?
G
、此外需要的其他配置項(xiàng)有:
監(jiān)聽器:
Listener
全局
JNDI
資源:
?GlobalNamingResources
全局日志設(shè)置,除非在更低的級(jí)別上覆蓋它的設(shè)置
?
:
Logger
配置:
Realm
定義默認(rèn)的虛擬主機(jī)
:
Host
屏蔽:
A
、
屏蔽
WARP connector
?????? B
、屏蔽
standalone HTTP port
??
F
、
server.xml
配置全文:
<Server port="8035" shutdown="SHUTDOWN" debug="0">
? <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
??????????? debug="0"/>
? <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
????????? debug="0"/>
? <!-- Global JNDI resources -->
? <GlobalNamingResources>
??? <!-- Test entry for demonstration purposes -->
??? <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
??? <!-- Editable user database that can also be used by
???????? UserDatabaseRealm to authenticate users -->
??? <Resource name="UserDatabase" auth="Container"
????????????? type="org.apache.catalina.UserDatabase"
?????? description="User database that can be updated and saved">
??? </Resource>
??? <ResourceParams name="UserDatabase">
????? <parameter>
??????? <name>factory</name>
??????? <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
????? </parameter>
????? <parameter>
??????? <name>pathname</name>
??????? <value>conf/tomcat-users.xml</value>
????? </parameter>
??? </ResourceParams>
? </GlobalNamingResources>
? <!-- Define the Tomcat Stand-Alone Service -->
? <Service name="tomcat1">
??? <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
??? <Connector port="8080"
?????????????? maxThreads="800" minSpareThreads="25" maxSpareThreads="100"
?????????????? enableLookups="false" redirectPort="8443" acceptCount="0"
?????????????? debug="0" connectionTimeout="20000"
?????????????? disableUploadTimeout="true" />
?<!--Connector port="8443"??????????????
? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"????????????? ?
? enableLookups="false" disableUploadTimeout="true"??????????????
? acceptCount="100" debug="0" scheme="https" secure="true"??????????????
? clientAuth="false" sslProtocol="TLS"???????????????
? keystoreFile="conf\.keystore"???????????????
? keystorePass="changeit" /-->
??? <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
???? <Connector port="8009"
?????????????? enableLookups="false" redirectPort="8443" debug="0"
?????????????? protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100"? acceptCount="0"/>
??? <!-- You should set jvmRoute to support load-balancing via JK/JK2 ie :
??? <Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1">????????
??? -->
??? <!-- Define the top level container in our container hierarchy -->
??? <Engine jvmRoute="tomcat1" name="Standalone" defaultHost="localhost" debug="0">
????? <!-- Global logger unless overridden at lower levels -->
????? <Logger className="org.apache.catalina.logger.FileLogger"
????????????? prefix="catalina_log." suffix=".txt"
????????????? timestamp="true"/>
????? <!-- This Realm uses the UserDatabase configured in the global JNDI
?????????? resources under the key "UserDatabase".? Any edits
?????????? that are performed against this UserDatabase are immediately
?????????? available for use by the Realm.? -->
????? <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
???????????????? debug="0" resourceName="UserDatabase"/>
????? <!-- Define the default virtual host
?????????? Note: XML Schema validation will not work with Xerces 2.2.
?????? -->
????? <Host name="localhost" debug="0" appBase="webapps"
?????? unpackWARs="true" autoDeploy="true"
?????? xmlValidation="false" xmlNamespaceAware="false">
?????? <!-- <Logger className="org.apache.catalina.logger.FileLogger"
???????????????? directory="logs"? prefix="localhost_log." suffix=".txt"
??????????? timestamp="true"/>? -->
????? <Context path="/faceImage" docBase="D:\jiangxi\uploadimages\faceImage" debug="0" reloadable="false" crossContext="true">
????? </Context>? ???? ?
??????
?? <Context path="/magazineImage" docBase="D:\jiangxi\uploadimages\magazineImage" debug="0" reloadable="false" crossContext="true">
????? </Context>?
????? </Host>
??? </Engine>
? </Service>
</Server>
apache+tomcat配置負(fù)載均衡的網(wǎng)站
???????????????在網(wǎng)上找了一些文檔,還是覺得不是很清楚,自己走了些彎路,才把這個(gè)配置好,還是寫下來吧,以備后查。
1.??
目標(biāo)
使用
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
不要下載安裝版
,
下載地址
http://tomcat.apache.org
2.2.
配置
tomcat
2.2.1. ???
配置
server
的關(guān)閉口
我們需要在一臺(tái)機(jī)器上跑
2
個(gè)不同的
tomcat
,需要修改不同的
tomcat
的關(guān)閉口,避免出現(xiàn)端口被占用的情況。在
server.xml
中找到
server,
將:
改為
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
中找到:
改為:
XXXX
">
兩個(gè)
service
分別為
tomcat6
和
tomcat5
2.2.3. ???
配置
Connector
這個(gè)部分主要是要改兩個(gè)
Connector
,當(dāng)然前提是你的
tomcat
只有兩個(gè)
Connector
。
修改
ajp1.3
的端口:
找到:
改為:
XXXX
" protocol="AJP/1.3" redirectPort="8443" />
兩個(gè)
Service
的
ajp/1.3
的端口分別為:
8019
,
8029
修改
http
的端口:
找到:
?????????????? maxThreads="150" connectionTimeout="20000"
?????????????? redirectPort="8443" />
改為:
XXXX
" protocol="HTTP/1.1"
?????????????? maxThreads="150" connectionTimeout="20000"
?????????????? redirectPort="8443" />
兩個(gè)
Service
的
ajp/1.3
的端口分別為:
8060
,
8070
2.2.4. ???
配置
Engine
Engine
主要是配置
jvmRoute
屬性,找到:
改為:
兩個(gè)實(shí)例分別為:
tomcat6
和
tomcat5.
2.2.5. ???
配置公用性
Context
如果有
Context
是多個(gè)系統(tǒng)公用的,比如圖片等的存放地,可以做個(gè)配置:
在
Host
中增加:
2.2.6. ???
屏蔽文件列表
打開
tomcat
目錄下的
conf/web.xml
,
找到:
???????
default
???????
org.apache.catalina.servlets.DefaultServlet
???????
???????????
debug
???????????
0
???????
???????
???????????
listings
???????????
true
???????
???????
1
???
將
listings
參數(shù)改為
false;
2.3.
配置應(yīng)用
(web.xml)
對(duì)系統(tǒng)應(yīng)用做些控制。
配置
session
過期時(shí)間,大多數(shù)網(wǎng)站用戶都只是做些瀏覽性的操作,為了減輕服務(wù)器負(fù)載壓力,我們將
session
超時(shí)時(shí)間從默認(rèn)的
30
分鐘變?yōu)?/span>
5
分鐘。
在
web
應(yīng)用程序的
web.xml
中
servlet-mapping
之后增加如下一段:
???
5
3.??
安裝
Apache
3.1.
下載、安裝
Apache
下載地址
http://httpd.apache.org/download.cgi
下載后點(diǎn)擊安裝
msi
文件。
安裝的時(shí)候沒有什么特別需要注意的地方,按照默認(rèn)就行了。是否安裝為
service
看具體情況而定。
3.2.
下載、安裝
Apache
、
tomcat
的
Connector
http://tomcat.apache.org/download-connectors.cgi
注意,很多網(wǎng)站上都介紹是
JK2
,可能是覺得
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)然如果不需要改的話,就不用改了。正常情況無須更改。
3.3.2. ???
配置
DocumentRoot
找到
DocumentRoot
段,將其改為:
DocumentRoot "E:/MyWebsite"
這里的
"E:/MyWebsite"
指的是你的
web
程序的根路徑,視具體應(yīng)用而定。
3.3.3. ???
配置
serverName
找到
serverName
這個(gè)段,將其配置為你的
ServerName
如果沒有配置為域名,配為
IP
也可以,此處還不是很清楚,多虛擬主機(jī)的情況的配置。
3.3.4. ???
配置虛擬主機(jī)
??? 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
3.4.
配置
JK
方式的負(fù)載均衡
3.4.1. ???
配置
module
我們需要與
tomcat
做連接,所以要把
tomcat
的
connector
的模塊配置進(jìn)去。
在
LoadModule
部分加入:
LoadModule jk_module modules/mod_jk-apache-2.0.55.so
-加載模塊
這個(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ù)載平衡類型的
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í)候,就無須進(jìn)行這步操作,直接啟動(dòng)負(fù)載均衡。啟動(dòng)負(fù)載均衡見下一節(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ò)誤:
第一是沒有配置
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
之類的是系統(tǒng)設(shè)定的東西,其實(shí)都是在
workers.properties
文件中定義的,結(jié)果出現(xiàn)名字不匹配的情況。后來配置了
JkLogFile logs/mod_jk.log
之后看到錯(cuò)誤日志才明白。
3.5.
配置
Proxy
方式的負(fù)載均衡
使用
Apache2.1
以上的版本,就可以用
mod_proxy_ajp
來完成負(fù)載均衡的配置,不過到目前為止,沒有看到如何讓
Apache
負(fù)責(zé)靜態(tài)部分,
tomcat
負(fù)責(zé)動(dòng)態(tài)部分的配置方式,只能用
path
進(jìn)行區(qū)分分發(fā)請(qǐng)求。如:在虛擬主機(jī)的配置中增加:
ProxyPass / ajp://localhost:8019/
ProxyPassReverse / ajp://localhost:8019/
而形如:
ProxyPass /*.jsp ajp://localhost:8019/
ProxyPassReverse /*.jsp ajp://localhost:8019/
這樣的配置是不能通過的。
請(qǐng)高手指教。