通過(guò)http_proxy做負(fù)載均衡有個(gè)好處,不用MOD_JK,不用寫(xiě)太多的配置文件了,而且據(jù)說(shuō)JK做負(fù)載均衡當(dāng)其中一個(gè)Tomcat節(jié)點(diǎn)死掉,Apache就不會(huì)向該節(jié)點(diǎn)發(fā)送請(qǐng)求了,而http_proxy會(huì)一直發(fā),但該死亡的Tomcat重啟后就沒(méi)事了,這個(gè)不清楚,我用的Apache版本是2.2.x,采用http_proxy時(shí),反正session正常復(fù)制,感覺(jué)不到關(guān)閉一個(gè)Tomcat節(jié)點(diǎn)后對(duì)整個(gè)負(fù)載均衡的影響,大家自己拿捏吧,下面是我的配置: 第一,(如果是安裝的windows,可以不看第一步了,往下看第二步吧)安裝Apache,我選用的版本是2.2.x,我是安裝在CentOS4.4這個(gè)Linux操作系統(tǒng)里的,之前系統(tǒng)自帶的是2.0.52,http_proxy提示"BalancerMember不識(shí)別,缺少相關(guān)的so文件",所以我重新下了個(gè)2.2.64的版本,而且聽(tīng)說(shuō)2.2.x版本修正了一些BUG和大幅提高了一些性能,下面是編譯安裝步驟。
1.解壓編譯包,tar -xzvf **.tar.gz
2.進(jìn)入解壓后的目錄,運(yùn)行configure命令,./configure --enable-modules=most --enable-mods-shared=most --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-scgi --enable-proxy-ajp --enable-proxy-balancer
3.執(zhí)行編譯命令,make
4.執(zhí)行安裝命令,make install
安裝完畢!
第二,配置Apache,使其通過(guò)http_proxy實(shí)現(xiàn)負(fù)載均衡
1.編寫(xiě)一個(gè)負(fù)載均衡的配置文件,文件名隨意吧,我寫(xiě)的是"balance.conf",內(nèi)容如下:
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
<VirtualHost *:80>
#DocumentRoot "F:\liuqiWorks\myproject\eclipsework\ciesi"
ServerName localhost2
ProxyPreserveHost On
ProxyRequests Off
ErrorLog logs/localhost2.cn-error_log
CustomLog logs/localhost2.cn-access_log common
ProxyPass / balancer://tomcat/
ProxyPassReverse / http://localhost2:8080/
ProxyPassReverse / http://localhost2:8081/
</VirtualHost>
<Proxy balancer://tomcat>
BalancerMember http://localhost2:8080 loadfactor=2
BalancerMember http://localhost2:8081 loadfactor=1
</Proxy>
2.編輯httpd.conf文件,包含剛才的配置文件balance.conf,在httpd.conf底部添加如下
include "xxx/xxx/balance.conf" # xxx/xxx/是balance.conf所在的路徑
注意,如果是編譯安裝apache,httpd.conf里好像是沒(méi)有加載各種so庫(kù)文件的,可能會(huì)啟動(dòng)不了apache,如果是這樣的話(huà)請(qǐng)?zhí)砑踊驈淖⑨尷锛せ钜韵履K,
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule setenvif_module modules/mod_setenvif.so
Apache配置完畢。
3.Tomcat集群配置,我用的是版本號(hào)是7.0.x,有2個(gè)tomcat節(jié)點(diǎn),主要是修改每個(gè)tomcat節(jié)點(diǎn)下的conf/server.xml這個(gè)文件,其實(shí)就是修改其中一個(gè)tomcat節(jié)點(diǎn)的幾個(gè)端口,這樣2個(gè)tomcat就可以同時(shí)運(yùn)行起來(lái)了,配置如下,
我把8005改成了8006:
<Server port="8006" shutdown="SHUTDOWN">
我把8080改成了8081:
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
我把8009改成了8019
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
激活tomcat集群,并注釋掉原來(lái)的默認(rèn)屬性
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
<!-- <Engine name="Catalina" defaultHost="localhost"> -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
Tomcat配置完畢,然后修改web工程的WEB-INF/web.xml文件,添加一個(gè)標(biāo)簽 <distributable/>
注意:整個(gè)工程中,所有的session里的屬性值,必須實(shí)現(xiàn)了java.io.Serializable接口,一般的變量類(lèi)型,例如String,Map,Int等肯定已經(jīng)實(shí)現(xiàn)的,沒(méi)啥問(wèn)題,但如果自定義的一個(gè)類(lèi),要想使用session.setAttribute("xxx",Your.class)的話(huà),這時(shí)你寫(xiě)的類(lèi)就必須要實(shí)現(xiàn)java.io.Serializable這個(gè)接口了,不然會(huì)報(bào)錯(cuò)!
至此Apache和Tomcat的配置都完成了,啟動(dòng)Apache和參與集群的多個(gè)Tomcat即可,這時(shí)你后臺(tái)登錄后,關(guān)掉其中有一個(gè)Tomcat的話(huà),網(wǎng)站依然運(yùn)行,因?yàn)閟ession已經(jīng)復(fù)制到了另外一個(gè)Tomcat之中。
注意:如果Linux下組播未開(kāi)啟,Tomcat是無(wú)法進(jìn)行session復(fù)制的,請(qǐng)執(zhí)行 route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0