Java, Only Java!

          統(tǒng)計

          留言簿(20)

          積分與排名

          好友空間

          文檔技巧

          閱讀排行榜

          評論排行榜

          Apache+Apusic集成配置負(fù)載均衡

          1. 為何要做負(fù)載均衡?
          一般是對性能和價格比的需要,為了能夠共享應(yīng)用服務(wù)器的計算能力,用戶會采購多個CPU的金蝶阿帕斯應(yīng)用服務(wù)器(Kingdee Apusic Application Server,KAAS)中間件產(chǎn)品,并且安裝到多臺計算機(jī)中,然后將多個應(yīng)用統(tǒng)一部署在這些KAAS之上。
          還有就是保護(hù)KAAS安全,現(xiàn)在網(wǎng)絡(luò)攻擊太嚴(yán)重了,因此用戶想把服務(wù)器放在防火墻后面,前端放一個Apache服務(wù)器或者硬件的負(fù)載均衡器,哪怕前端被攻擊,至少可以保證主頁內(nèi)容不會被篡改。
          2. 如何用Apache+Apusic實(shí)現(xiàn)LB?
          實(shí)現(xiàn)前我們需要了解一個概念,LB到底由哪些部分組成,相互之間的關(guān)系如何?配置負(fù)載均衡需要兩個部分組成:負(fù)載均衡器和應(yīng)用服務(wù)器集群。負(fù)載均衡器不了解具體業(yè)務(wù),只知道有哪些KAAS,然后依據(jù)一種分配機(jī)制將客戶請求分配給相應(yīng)的KAAS。而KAAS接到用戶請求,處理完成后就將結(jié)果返回給負(fù)載均衡器,再返回到客戶端。但是HTTP請求都是無狀態(tài)的,如果用戶使用Session機(jī)制保存了狀態(tài),那么下次再訪問時可以通過兩種方法處理:
          ⑴ 利用負(fù)載均衡器的會話保持(Session Stick)技術(shù),負(fù)載均衡器會記錄SessionID和服務(wù)器IP,然后將下次請求仍然轉(zhuǎn)發(fā)到上次處理的服務(wù)器上,但是這種方式如果服務(wù)器宕機(jī)了,就會使客戶丟失信息;
          ⑵ 利用KAAS的集群功能,將一起工作的服務(wù)器配置成集群,相互之間利用會話復(fù)制(Session Copy)技術(shù),所有服務(wù)器上的會話內(nèi)容完全相同,請求不需要轉(zhuǎn)發(fā)給相同的服務(wù)器就可以得到正確響應(yīng),但是這種方式會給網(wǎng)絡(luò)帶來較大的負(fù)載壓力,甚至引起網(wǎng)絡(luò)風(fēng)暴。
          下面分別是這兩種方法的配置過程:
          ⑴ 配置均衡均衡的會話保持
          #httpd.conf(Apache的配置文檔,如果想了解Apache相關(guān)配置參數(shù),請看參考文獻(xiàn))
          #載入重要的模塊
          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_http_module modules/mod_proxy_http.so
          LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
          #設(shè)置負(fù)載均衡分配用的服務(wù)器
          <Proxy balancer://apusicBalance>
          ??? BalancerMember http://1.2.3.4:6888/
          ??? BalancerMember http://1.2.3.5:6888/
          </Proxy>
          #設(shè)置代理服務(wù)器轉(zhuǎn)發(fā)方式,stickysession就是會話保持,JSESSIONID就是Apusic的會話ID,nofailover就是說服務(wù)器沒有做集群
          ProxyPass / balancer://apusicBalance stickysession=JSESSIONID nofailover=On
          ProxyPassReverse / balancer://apusicBalance

          ⑵ 利用KAAS的集群功能,只提供了WEB模塊Session復(fù)制的例子,其它例子請參考Apusic集群管理文檔,在apusic.conf增加的配置如下
          <!-- 將應(yīng)用服務(wù)器增加到集群中 -->
          <SERVICE
          ??? CLASS="com.apusic.cluster.ClusterService"
          ??? >
          ??? <ATTRIBUTE NAME="ClusterName" VALUE="ApusicCluster"/>
          ??? <ATTRIBUTE NAME="LoadWeight" VALUE="100"/>
          </SERVICE>
          <!-- 使WEB容器的Session支持復(fù)制 -->
          <SERVICE CLASS="com.apusic.servlet.http.session.SessionService">
          ??? <ATTRIBUTE NAME="DefaultSessionTimeout" VALUE="3600"/>
          ??? <ATTRIBUTE NAME="MaxSessionsInCache" VALUE="1024"/>
          ??? <ATTRIBUTE NAME="SessionInvalidateCheckInterval" VALUE="60"/>
          ??? <ATTRIBUTE NAME="SessionSwapCheckInterval" VALUE="30"/>
          ??? <ATTRIBUTE NAME="Distributable" VALUE="True"/>
          ??? <ATTRIBUTE NAME="Replicable" VALUE="True"/>
          </SERVICE>

          3. 使用Apache實(shí)現(xiàn)LB還有哪些功能?
          ⑴ 支持緩沖。mod_cache模塊。
          Sample httpd.conf
          #
          # Cache配置的例子
          # 下面的Cache默認(rèn)采用disk作為緩存,如果想調(diào)整成mem,必須先將disk用#注釋,然后刪除mem的#注釋。
          LoadModule cache_module modules/mod_cache.so
          LoadModule disk_cache_module modules/mod_disk_cache.so
          #LoadModule mem_cache_module modules/mod_mem_cache.so
          <IfModule mod_cache.c>
          ?<IfModule mod_disk_cache.c>
          ??CacheRoot c:/cacheroot
          ??CacheEnable disk /
          ??CacheDirLevels 5
          ??CacheDirLength 3
          ?</IfModule>
          ?<IfModule mod_mem_cache.c>
          ??CacheEnable mem /
          ??MCacheSize 4096
          ??MCacheMaxObjectCount 100
          ??MCacheMinObjectSize 1
          ??MCacheMaxObjectSize 2048
          ?</IfModule>
          # 當(dāng)Apache作為Proxy時,不緩存安全部分的代碼。下面的例子實(shí)際使用時請改成應(yīng)用自身的情況
          CacheDisable http://security.update.server/update-list/
          </IfModule>
          ⑵ 不同的分配機(jī)制。
          除了已經(jīng)知道的循環(huán)分配機(jī)制,將請求依次派發(fā)給每個應(yīng)用服務(wù)器;還可以通過loadfactor來進(jìn)行權(quán)重分配,事先依據(jù)每個應(yīng)用服務(wù)器的計算能力,將請求依據(jù)權(quán)重分發(fā)給服務(wù)器;還可以通過lbmethod流量的壓力進(jìn)行統(tǒng)計,然后將請求分發(fā)給服務(wù)器。

          ⑶ 分別在不同的網(wǎng)絡(luò)層進(jìn)行代理,一般可以在四層和七層。
          這種方法我沒有進(jìn)行實(shí)驗(yàn),待以后補(bǔ)充。

          4. 在應(yīng)用開發(fā)階段要注意哪些事情來滿足LB需要?
          開發(fā)階段需要注意的內(nèi)容其實(shí)很多,主要就是Session復(fù)制和資源死鎖的問題。以前項目開發(fā),能夠把功能實(shí)現(xiàn)就算是完工了,但是用戶的需求也在增加,特別是J2EE為分布式計算提供了很好的模型,為開發(fā)符合LB標(biāo)準(zhǔn)的程序提供了有利的條件,但是在開發(fā)階段仍然有些工作必須要做,例如:
          ⑴ 所有保存在Sesion中的類必須要實(shí)現(xiàn)Serialable接口,當(dāng)然還要把Object實(shí)現(xiàn)的方法重載,保證你的類被正確序列化了,但是如果沒有實(shí)現(xiàn),至少保證系統(tǒng)進(jìn)行Session復(fù)制時不會報錯;
          ⑵ 盡量不要進(jìn)行長事務(wù)操作,盡量不要對數(shù)據(jù)庫進(jìn)行表級鎖,盡量把申請得到的資源進(jìn)行歸還,盡量使用finally保證資源被正確釋放,等等…
          ⑶ 以后繼續(xù)補(bǔ)充

          參考文獻(xiàn):
          1. mod_proxy - Apache 2.2 中文版參考手冊,
          http://doc.chinahtml.com/Manual/ApacheManual/mod/mod_proxy.html
          2. mod_cache - Apache 2.2 中文版參考手冊
          http://doc.chinahtml.com/Manual/ApacheManual/mod/mod_cache.html
          3. Apusic集群管理文檔
          http://infocenter.apusic.com/help/index.jsp?topic=/com.apusic.studio.doc.server/output/eclipse/cluster_management.html

          posted on 2008-03-02 23:30 zYx.Tom 閱讀(1916) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 芜湖县| 资源县| 梓潼县| 文成县| 武安市| 荆门市| 铁岭县| 聊城市| 龙门县| 日喀则市| 本溪| 根河市| 包头市| 佳木斯市| 福贡县| 塔河县| 固原市| 施秉县| 乐陵市| 九江市| 河北区| 雅江县| 北碚区| 调兵山市| 克山县| 昆明市| 三江| 镇康县| 嘉定区| 榆林市| 海盐县| 阳山县| 阿克苏市| 利辛县| 宣恩县| 九龙县| 长沙市| 治县。| 信阳市| 宁海县| 锡林郭勒盟|