一.配置虛拟主機
<VirtualHost *:80>
DocumentRoot /home/afocus/apush/web
ServerName apush.afocus.com.cn
DirectoryIndex index.jsp
<Directory /home/afocus/apush/web>
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
ErrorLog logs/apush_error-log
CustomLog logs/apush_access-log combined
JkMount /*.* controller
</VirtualHost>
二.配置 jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
第一句說明 将mod_jk.so 加入到httpd 中, 是以需要将 tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x.zip 内的mod_jk.so檔案放入到 E:/work/test/Apache24/modules 目錄下
第二句是說明 apach關聯的tomcat伺服器有哪些。session共享的設定。 要求 在conf目錄下建立 workers.properties 檔案
第三句 是說明 apach要攔截那些請求,那些請求讓tomcat處理。要求 在conf目錄下建立 uriworkermap.properties 檔案
第四句 是日志檔案
第五句 是日志級别
三.配置 workers.properties
ps=/
worker.list=controller,loadbalancer,jkstatus,apushtomcat,tomcat1,tomcat2
#worker.apushtomcat.port=8069
#worker.apushtomcat.host=localhost
#worker.apushtomcat.type=ajp13
#========apache-tomcat-1========
worker.tomcat1.port=8069
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
#========apache-tomcat-2========
worker.tomcat2.port=8070
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========controller========
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2
worker.controller.sticky_session=true
worker.controller.sticky_session_force=false
worker.jkstatus.type=status
說明:
個人了解的 worker.list=controller,status 是有哪些攔截類型,如contorller是tomcat,status是httpd。
1、其中worker.tomcat1.host中,tomcat1代表節點名,host值為節點IP, 如果有更多節點,順序定義更多的node段,并在worker.controller.balance_workers後全部列出。
2、lbfactor是負載配置設定權重,值越大配置設定的負載越多。
3、worker.controller.sticky_session,設定為1或true使用粘着session,設定為0或false不使用粘着session。如果sticky_session設為true時,建議sticky_session_force設為false,
此參數表明如果叢集中某台伺服器在多次請求沒有響應後,将轉發目前的請求到其它伺服器上處理;sticky_session=false時,影響比較大,會導緻轉發到其它伺服器上的請求,找不到原來的session,
是以如果此時請求中有讀取session中某些資訊的話,就會導緻應用的null異常。sticky_session、sticky_session_force的預設值分别為true,false。
sticky_session sticky_session_force 含義
true false SESSION會複制,有粘性
true true SESSION不複制,有粘性
false false SESSION會複制,無粘性
false true SESSION會複制,無粘性
4、worker.status.type=status 用于檢視 叢集資訊
四.配置uriworkermap.properties
/*=controller
/jkstatus=status
!/*.gif=controller
!/*.jpg=controller
!/*.png=controller
!/*.css=controller
!/*.js=controller
!/*.htm=controller
!/*.html=controller
說明:
即 tomcat 攔截所有的請求 (controller代表tomcat叢集) 下面的配置是特殊情況 apache隻負責攔截 /jkstatus 的請求和 靜态資源 如果不想用 apach處理,
可以把 下面的去除掉。網上有人寫攔截 /*.jsp 然後也沒有配不攔截的資源,導緻頁面顯示不完整。
還可以在workers.properties 中把 worker.list=controller,status,tomcat1,tomcat2,tomcat3
然後将攔截的内容 為 /*.jsp /*.do 分别交給不同的伺服器處理。
五.修改tomcat的server.xml
在同一台機器上部署兩個及以上,要修改 server.xml 中的端口,讓他們不一樣
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="9090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="11009" protocol="AJP/1.3" redirectPort="8443" />
這三個的端口 port protocol="AJP/1.3" 的 port 要和 workers.properties 内的配置一緻
修改
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
在 Engine 标簽内添加 jvmRoute="tomcat2" 且 要和 workers.properties 内的配置一緻
然後啟動httpd,tomcat 在浏覽器内鍵入 http://localhost:80/jkstatus 檢視叢集的資訊。
六.在部署的項目的web.xml 中的<web-app>标簽内添加 <distributable/>标簽
曾經碰到的問題
1. Unable to receive message through TCP channel
登陸的時候,将使用者資訊放入session 發現能夠登陸單個的tomcat,但是不能通過apache進入,修改 workers.properties 就可以了,這個網上沒找到答案,暫時這樣。
worker.controller.sticky_session_force=false
2.所有的要放入session的内容必須實作Serializable接口否則會報錯,java.io.NotSerializableException
3.apache httpd 找不到tomcat 可能原因是 mod_jk 的版本不比對,我剛開始用的是 tomcat-connectors-1.2.39-windows-x86_64-httpd-2.4.x.zip 發現連結不上tomcat 但是換為tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x.zip 後就可以了。
4.将靜态資源放到httpd 的E:\work\test\Apache24\htdocs目錄下, 結構要和 jsp檔案中寫的路徑一緻。
一定要注意的問題:
切記将定時任務單獨部署,否則會執行多次。
本文轉自陳繼松 51CTO部落格,原文連結http://blog.51cto.com/chenjisong/1753435:,如需轉載請自行聯系原作者