<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    安靜的等待

    茹呲綄鎂
    posts - 51, comments - 9, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Apache+JK+Tomcat負(fù)載平衡配置

    Posted on 2007-07-18 10:11 ricki 閱讀(456) 評(píng)論(0)  編輯  收藏 所屬分類: 負(fù)載均衡配置

    網(wǎng)上關(guān)于Apache + JK + Tomcat的集群配置例子很多,按著例子配置下來(lái),基本都能運(yùn)行,不過,在一些重要的地方卻沒有進(jìn)一步的說(shuō)明。這次公司一個(gè)產(chǎn)品就是采用Apache+JK+Tomcat集群,在整個(gè)配置、測(cè)試過程中,遇到了許多的問題,經(jīng)過不斷測(cè)試、摸索,最后總算是搞定了,性能也達(dá)到了預(yù)期的目標(biāo)。針對(duì)網(wǎng)上的例子,感覺有必要再詳細(xì)的介紹一下我的配置過程,對(duì)一些要特別注意的地方進(jìn)行補(bǔ)充。

    集群有別于分布式的解決方案,它采用的是每臺(tái)服務(wù)器運(yùn)行相同應(yīng)用的策略,由負(fù)責(zé)平衡的服務(wù)器進(jìn)行分流,這對(duì)提高整個(gè)系統(tǒng)的并發(fā)量及吞吐量是更有效的辦法。而集群對(duì)請(qǐng)求的處理又有兩種不同的方式:負(fù)載平衡、狀態(tài)復(fù)制(即集群),狀態(tài)復(fù)制需要在各服務(wù)器間復(fù)制應(yīng)用狀態(tài),而負(fù)載平衡則不用,每臺(tái)服務(wù)器都是獨(dú)立的。實(shí)踐證明,在各應(yīng)用服務(wù)器之間不需要狀態(tài)復(fù)制的情況下,負(fù)載平衡可以達(dá)到性能的線性增長(zhǎng)及更高的并發(fā)需求。

    對(duì)于集群的其它基礎(chǔ)知識(shí),在此就不再做累贅。以下就這次Apache + JK + Tomcat的負(fù)載平衡配置進(jìn)行總結(jié),重點(diǎn)關(guān)注整個(gè)配置及注意事項(xiàng)。

    準(zhǔn)備軟件

    1、 Tomcat或JBoss(本文檔中采用的是JBoss4.0.2);

    2、 apache2.0.54是開源的Web服務(wù)器,下載地址為: http://www.apache.org/dist/httpd/binaries/

    3、 mod_jk-1.2.14-apache-2.0.54.so模塊,jk是mod_jserv的替代者,它是Tomcat-Apache插件,為Apache和Tomcat的連接器,處理Tomcat和Apache之間的通信,在集群配置中充當(dāng)負(fù)載均衡器的作用,當(dāng)前的最新版本為1.2.15,不過不同JK版本與不同的Apache版本之間的搭配有一些差異,有的甚至配不起來(lái)。JK2是符合apache2.x系列的新品,但由于其配置太過麻煩,使用的人很少,所以目前已停止開發(fā),所以我們采用了jk連接器,下載地址:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/

    集群與負(fù)載平衡

    使用mod_jk默認(rèn)的以輪循方式進(jìn)行平衡負(fù)載,假設(shè)有四個(gè)服務(wù)器節(jié)點(diǎn),有10個(gè)請(qǐng)求,則四個(gè)節(jié)點(diǎn)分別接受請(qǐng)求編號(hào)如下:

    節(jié)點(diǎn)1

    節(jié)點(diǎn)2

    節(jié)點(diǎn)3

    節(jié)點(diǎn)4

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

     

     

    而集群方式也是使用這種方法進(jìn)行平衡。Tomcat中的集群原理是通過組播的方式進(jìn)行節(jié)點(diǎn)的查找并使用TCP連接進(jìn)行會(huì)話的復(fù)制。

        集群不同于負(fù)載平衡的是,由于集群服務(wù)需要在處理請(qǐng)求之間不斷地進(jìn)行會(huì)話復(fù)制,復(fù)制后的會(huì)話將會(huì)慢慢變得龐大,因此它的資源占用率是非常高的,如果在并發(fā)量大的應(yīng)用中,復(fù)制的會(huì)話大小會(huì)變得相當(dāng)大,而使用的總內(nèi)存更是會(huì)迅速升高。

        但集群的會(huì)話復(fù)制,增加了系統(tǒng)的高可用性。由于在每臺(tái)服務(wù)器都保存有用戶的Session信息,如果服務(wù)器群中某臺(tái)當(dāng)機(jī),應(yīng)用可以自動(dòng)切換到其它服務(wù)器上繼續(xù)運(yùn)行,而用戶的信息不會(huì)丟失,這提高了應(yīng)用的冗錯(cuò)性。

    具體采用負(fù)載平衡還是集群,這要看應(yīng)用的需求了。

    安裝配置Apache

    1、下載Apache的安裝程序apache_2.0.54-win32-x86-no_ssl.exe后,安裝很簡(jiǎn)單,一路回車,就此略過。

    2、安裝完畢后,將下載的mod_jk-1.2.14-apache-2.0.54.so復(fù)制到Apache安裝目錄下的modules子目錄中。

    3、然后進(jìn)入Apache安裝目錄下的conf子目錄中,打開httpd.conf配置文件,在最后插入以下一行:

    Include conf/mod_jk.conf

    4、 在conf子目錄下,建立一個(gè)新的配置文件:mod_jk.conf,此文件為Apache加載連接器的配置文件,文件名可修改,但要與httpd.conf中Include的文件名一致,內(nèi)容如下:

    # Load mod_jk module. Specify the filename

    # of the mod_jk lib you’ve downloaded and

    # installed in the previous section

    #加載mod_jk模塊

    LoadModule jk_module modules/mod_jk-1.2.14-apache-2.0.54.so

    # Where to find workers.properties

    JkWorkersFile conf/workers2.properties

    # Where to put jk logs

    JkLogFile logs/mod_jk.log

    # Set the jk log level [debug/error/info]

    JkLogLevel info

    # Select the log format

    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

    # JkOptions indicate to send SSL KEY SIZE,

    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

    # JkRequestLogFormat set the request format

    JkRequestLogFormat "%w %V %T"

    # 請(qǐng)求分發(fā)配置,可以配置多項(xiàng)

    JkMount /* loadbalancer

    #關(guān)掉主機(jī)Lookup,如果為on,很影響性能,可以有10多秒鐘的延遲。
    HostnameLookups Off

    注:藍(lán)色加粗的兩行是重點(diǎn),第一句是Apache加載JK模塊用的;第二句為配置哪些URL請(qǐng)求將由負(fù)載平衡器來(lái)處理。

    5、 在conf子目錄下,建立一個(gè)新的配置文件:workers2.properties,此文件為負(fù)載平衡的配置文件,文件名不能修改,這是JK默認(rèn)的名字,內(nèi)容如下:

    worker.list=loadbalancer

    # Define the first node...

    worker.server99.port=8009

    worker.server99.host=192.168.11.99

    worker.server99.type=ajp13

    worker.server99.lbfactor=1

    worker.server99.local_worker=1

    worker.server99.cachesize=1000

    worker.server99.cache_timeout=600

    worker.server99.socket_keepalive=1

    worker.server99.socket_timeout=0

    worker.server99.reclycle_timeout=300

    worker.server99.retries=3

    # Define the second node...

    worker.server202.port=8009

    worker.server202.host=192.168.11.202

    worker.server202.type=ajp13

    worker.server202.lbfactor=1

    worker.server202.local_worker=1

    worker.server202.cachesize=1000

    worker.server202.cache_timeout=600

    worker.server202.socket_keepalive=1

    worker.server202.socket_timeout=0

    worker.server202.reclycle_timeout=300

    worker.server202.retries=3

    # Now we define the load-balancing behaviour

    worker.loadbalancer.type=lb

    worker.retries=3

    worker.loadbalancer.balance_workers=server99 ,server202

    worker.loadbalancer.sticky_session=true

    worker.loadbalancer.sticky_session_force=true

    注:以上定義了兩個(gè)worker,一個(gè)為server99,另一個(gè)為server202,定義了一個(gè)負(fù)載平衡服務(wù)器loadbalancer,其中標(biāo)藍(lán)色的為重點(diǎn)配置項(xiàng),相關(guān)的詳細(xì)說(shuō)明可以看官方的網(wǎng)站文檔:http://tomcat.apache.org/connectors-doc/,其它節(jié)點(diǎn)的定義可以直接Copy,修改一下節(jié)點(diǎn)名及IP就好了。
    A、worker.list=loadbalancer

    設(shè)定工作的負(fù)載平衡器,各Tomcat節(jié)點(diǎn)不能加入此列表。

        B、worker.server99.lbfactor

    負(fù)載平衡的權(quán)重比,如果此權(quán)重比越大,則分配到此節(jié)點(diǎn)的請(qǐng)求越多,如以上兩個(gè)節(jié)點(diǎn)的權(quán)重比為1:1,則為平均分配。

    C、worker.loadbalancer.balance_workers=server99,server202

       指定此負(fù)載平衡器負(fù)責(zé)的Tomcat應(yīng)用節(jié)點(diǎn)。

    D、worker.loadbalancer.sticky_session=true

       此處指定集群是否需要會(huì)話復(fù)制,如果設(shè)為true,則表明為會(huì)話粘性,不進(jìn)行會(huì)話復(fù)制,當(dāng)某用戶的請(qǐng)求第一次分發(fā)到哪臺(tái)Tomcat后,后繼的請(qǐng)求會(huì)一直分發(fā)到此Tomcat服務(wù)器上處理;如果設(shè)為false,則表明需求會(huì)話復(fù)制。

    E、worker.loadbalancer.sticky_session_force=true

       如果上面的sticky_session設(shè)為true時(shí),建議此處也設(shè)為true,此參數(shù)表明如果集群中某臺(tái)Tomcat服務(wù)器在多次請(qǐng)求沒有響應(yīng)后,是否將當(dāng)前的請(qǐng)求,轉(zhuǎn)發(fā)到其它Tomcat服務(wù)器上處理;此參數(shù)在sticky_session=true時(shí),影響比較大,會(huì)導(dǎo)致轉(zhuǎn)發(fā)到其它Tomcat服務(wù)器上的請(qǐng)求,找不到原來(lái)的session,所以如果此時(shí)請(qǐng)求中有讀取session中某些信息的話,就會(huì)導(dǎo)致應(yīng)用的null異常。

    6、Apache服務(wù)器的配置文件httpd.conf中,默認(rèn)有三個(gè)參數(shù)對(duì)性能的影響比較大,但根據(jù)不同的性能要求,參數(shù)的表現(xiàn)又不一樣,太小并發(fā)提不上去,太大性能反而不好,建議根據(jù)項(xiàng)目的需要,實(shí)際做個(gè)測(cè)試,如并發(fā)要求800的話,可以設(shè)定為:

    #一個(gè)連接的最大請(qǐng)求數(shù)量

    MaxKeepAliveRequests 1000(值為0,則不限制數(shù)量)

    #每個(gè)進(jìn)程的線程數(shù),最大1920。NT只啟動(dòng)父子兩個(gè)進(jìn)程,不能設(shè)置啟動(dòng)多個(gè)進(jìn)程

    ThreadsPerChild    1000(最大為1920)

    #每個(gè)子進(jìn)程能夠處理的最大請(qǐng)求數(shù)

    MaxRequestsPerChild   1000(值為0,則不限制數(shù)量)

    這三個(gè)參數(shù)要根據(jù)不同的需求,不同的服務(wù)器進(jìn)行調(diào)整。

    安裝配置Tomcat或JBoss

    1、對(duì)于Tomcat或JBoss的安裝,這里不做說(shuō)明,目前我們是采用Apache+JBoss,不過,JBoss也是用的Tomcat,所以這里的配置也是適合Tomcat的;

    2、對(duì)于JBoss的配置,很簡(jiǎn)單,只需要改兩個(gè)地方就可以了:

    第一個(gè)地方:進(jìn)入jboss-4.0.2\server\default\deploy\jbossweb-tomcat55.sar,打開server.xml,大約在第32行左右,有,在其中加入一個(gè)參數(shù),變?yōu)椋?/p>

    第二個(gè)地方:進(jìn)入jboss-4.0.2\server\default\deploy\jbossweb-tomcat55.sar\META-INF目錄,打開jboss-service.xml,大約在110行,有false,將其改為:

    true

    這里有一個(gè)需要特別注意的地方,JBoss的Tomcat中,關(guān)于AJP連接協(xié)議的默認(rèn)配置,對(duì)于大并發(fā)量是不夠用的,要做一些修改,進(jìn)入jboss-4.0.2\server\default\deploy\jbossweb-tomcat55.sar,打開server.xml,找到的地方,這里是定義AJP連接器的地方,它的配置中沒有maxThreads項(xiàng),默認(rèn)為200,我們可以做修改:

             emptySessionPath="true" enableLookups="false" redirectPort="8443"

             protocol="AJP/1.3" maxThreads="3000"/>

    maxThreads的值要看你的并發(fā)量多大,設(shè)置太大也不好。

    運(yùn)行

    至此,整個(gè)配置全部完成,注意一點(diǎn)是,在各JBoss節(jié)點(diǎn),重啟或新增加一個(gè)JBoss節(jié)點(diǎn)時(shí),需要重新啟動(dòng)Apache,而對(duì)于服務(wù)器群中某個(gè)JBoss節(jié)點(diǎn)shutdown,Apache會(huì)自動(dòng)偵測(cè),不用重新啟動(dòng)。

    如果在運(yùn)行過程中,群中的某個(gè)JBoss節(jié)點(diǎn)shutdown,則已登錄到此服務(wù)器上的用戶的請(qǐng)求將出錯(cuò),此服務(wù)器負(fù)責(zé)的session將丟失,但Apache會(huì)自動(dòng)偵測(cè)到此服務(wù)器已shutdown,后繼的新請(qǐng)求將不會(huì)再引導(dǎo)到此節(jié)點(diǎn)。

    對(duì)于負(fù)責(zé)請(qǐng)求分發(fā)的Apache服務(wù)器,需要消耗大量的CPU資源,因此如果在測(cè)試過程中出現(xiàn)一些Service Temporarily Unavailable或Server  has shut down the connection prematurely這樣的錯(cuò)誤,這一般都是服務(wù)器配置不夠好引起的,或者是Apache、Tomcat、及應(yīng)用中的某些配置不夠使用,這時(shí)候就要考慮換更好的機(jī)器或優(yōu)化應(yīng)用中的配置。

    常見問題

    一、cannot connect to server:無(wú)法連接到服務(wù)器。這種情況是服務(wù)器的配置有問題,服務(wù)器無(wú)法承受過多的并發(fā)連接了,需要優(yōu)化服務(wù)器的配置:

    如操作系統(tǒng)采用更高版本,如windows 2003 server,

    優(yōu)化tomcat配置:maxThreads="500" minSpareThreads="400" maxSpareThreads="450"

    但是tomcat 最多支持500個(gè)并發(fā)訪問

    優(yōu)化apache配置:

    ThreadsPerChild 1900

    MaxRequestsPerChild  10000

    二、 Action.c(10): Error -27791: Server  has shut down the connection prematurely

    HTTP Status-Code=503 (Service Temporarily Unavailable)
    一般都是由于服務(wù)器配置不夠好引起的,需要優(yōu)化硬件和調(diào)整程序了。

    三、無(wú)法處理請(qǐng)求:

    當(dāng)我們輸入 ***.do 命令后,apache卻返回錯(cuò)誤信息,而連接tomcat卻沒有問題。原因是沒有把.do命令轉(zhuǎn)發(fā)給tomcat處理。解決方法如下:

    在apache配置文件中配置如下內(nèi)容:

    JkMount /*.jsp loadbalancer

    JkMount /*.do loadbalancer


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲欧洲∨国产一区二区三区| 日韩在线永久免费播放| 国产亚洲综合精品一区二区三区| 亚洲资源最新版在线观看| 91亚洲国产成人久久精品网址| 亚洲色偷偷偷网站色偷一区| 亚洲制服中文字幕第一区| 亚洲日韩图片专区第1页| 亚洲日本乱码一区二区在线二产线| 久久久亚洲AV波多野结衣| 亚洲视频小说图片| 亚洲a级成人片在线观看| 亚洲色成人四虎在线观看| 国产午夜亚洲精品不卡| 一级毛片aaaaaa视频免费看| 本免费AV无码专区一区| 久久九九全国免费| 天天影视色香欲综合免费| 毛片大全免费观看| 国产伦一区二区三区免费| 亚洲国产天堂久久久久久| 亚洲日韩中文字幕在线播放| 亚洲国产综合精品中文第一区| 亚洲字幕在线观看| 亚洲av成人无码网站…| 国产黄在线观看免费观看不卡| 国产va在线观看免费| 午夜国产精品免费观看| 国产gav成人免费播放视频| 久久久久亚洲av成人无码电影| 亚洲日韩欧洲乱码AV夜夜摸| 中文字幕在线观看亚洲| 亚洲女子高潮不断爆白浆| 一级毛片免费在线观看网站| 免费看搞黄视频网站| 成年18网站免费视频网站| 亚洲精品国产电影| 亚洲综合一区二区精品久久| 国产成人亚洲毛片| 午夜免费福利视频| 四虎永久成人免费|