####### Apache整合Tomcat start ####### #此處mod_jk的文件為你下載的文件 LoadModule jk_module modules/mod_jk.so #指定tomcat監(jiān)聽(tīng)配置文件地址 JKWorkersFile conf/workers.properties #指定日志存放位置 JkLogFile logs/mod_jk.log JkLogLevel info <VirtualHost localhost> ServerAdmin localhost DocumentRoot "D:\www" ServerName localhost SetEnv force-proxy-request-1.0.1 SetEnv proxy-nokeepalive 1 DirectoryIndex index.html index.htm index.jsp index.action ErrorLog logs/shsc-error_log.txt CustomLog logs/shsc-access_log.txt common JkMount /*WEB-INF ajp13 JkMount /*j_spring_security_check ajp13 JkMount /*.action ajp13 JkMount /servlet/* ajp13 JkMount /*.jsp ajp13 JkMount /*.do ajp13 JkMount /*.action ajp13 JkMount /*fckeditor/editor/filemanager/connectors/*.* ajp13 JkMount /fckeditor/editor/filemanager/connectors/* ajp13 </VirtualHost> ####### Apache整合Tomcat end #######
ps= worker.list=ajp13 #模塊版本 worker.ajp13.port=8009 #工作端口,若沒(méi)占用則不用修改 worker.ajp13.host=localhost #本機(jī),若上面的Apache主機(jī)不為localhost,作相應(yīng)修改 worker.ajp13.type=ajp13 #類(lèi)型 #worker.ajp13.lbfactor=1 #代理數(shù),不用修改
<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=" 192.168.67.143" port=" 4001" 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;" /> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" /> <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.JvmRouteSessionIDBinderListener" /> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
tomcat的集群部署修改動(dòng)作都比較簡(jiǎn)單,但實(shí)際在運(yùn)行過(guò)程中會(huì)出現(xiàn)一系列的問(wèn)題,我這里列舉我在配置后使用過(guò)程中出現(xiàn)的一些問(wèn)題和要點(diǎn),供大家參考: 1、用戶(hù)存入SESSION中的數(shù)據(jù)的問(wèn)題 使用tomcat集群進(jìn)行SESSION復(fù)制,必須要保證你的session中存放的所有對(duì)象都是實(shí)現(xiàn)了java.io.Serializable接口 的,因?yàn)閟ession復(fù)制就是序列化對(duì)象到其他WEB應(yīng)用服務(wù)器上的,所以如果沒(méi)有實(shí)現(xiàn)該接口,那么SESSION同步將會(huì)失敗。另外一點(diǎn),就是如果要 同步的機(jī)器比較多的話,那么要注意保證SESSION中存放的數(shù)據(jù)比較小,不要什么都存放到SESSION中,因?yàn)閺?fù)制SESSION也是需要開(kāi)銷(xiāo)的,數(shù) 據(jù)越大開(kāi)銷(xiāo)也越大。 2、Tomcat執(zhí)行SESSION復(fù)制的觸發(fā)條件 我們?cè)趖omcat的server.xml文件中集群部分cluster標(biāo)簽中可以看到屬性:useDirtyFlag, 如果這個(gè)設(shè)置為true(默認(rèn)的),那么只有當(dāng)使用setAttribute往session中設(shè)置數(shù)據(jù)的時(shí)候才會(huì)同步其他WEB服務(wù)器的 SESSION,如果為false,那么每一次請(qǐng)求的sesison都會(huì)被同步到其他服務(wù)器上。因此在操作SESSION的時(shí)候要特別注意,避免出現(xiàn) SESSION無(wú)法同步的問(wèn)題。 舉個(gè)簡(jiǎn)單的例子,比如我們?cè)趩螜C(jī)應(yīng)用情況下修改SESSION中用戶(hù)的某一個(gè)數(shù)據(jù),那么通常就是:
這樣我們就是直接存取出來(lái),然后進(jìn)行修改,雖然在單機(jī)情況下沒(méi)有問(wèn)題,但是在集群條件下,這樣就導(dǎo)致了多臺(tái)WEB服務(wù)器上的SESSION不同步的問(wèn) 題,因?yàn)镾ESSION并沒(méi)有改變,Tomcat無(wú)法監(jiān)視session中某個(gè)數(shù)據(jù)的值是否發(fā)生了變化。因此,我們還需要執(zhí)行如下操作以保證 SESSION的同步:
所以,我們?cè)诓僮鱏ESSION的時(shí)候要特別注意!另外的建議就是,我們應(yīng)該盡可能的不要修改SESSION中的數(shù)據(jù)。 因?yàn)門(mén)omcat的SESSION復(fù)制通信是通過(guò)組播功能來(lái)實(shí)現(xiàn)不同服務(wù)器之間的交互的,所以需要在服務(wù)器上開(kāi)通組播功能,windows默認(rèn)情況下是開(kāi)通組播服務(wù)的,而Linux系統(tǒng)下默認(rèn)是沒(méi)有開(kāi)通的,我們需要通過(guò)如下命令來(lái)開(kāi)通其組播功能:
如果需要服務(wù)器啟動(dòng)時(shí)即開(kāi)通組播需在/etc/sysconfig/static-routes文件內(nèi)加入eht0 net 224.0.0.0 netmask 240.0.0.0。具體組播概念請(qǐng)查閱CCNP相關(guān)內(nèi)容。
|
|
來(lái)自: 集微筆記 > 《負(fù)載均衡》