日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Tomcat負(fù)載均衡和集群環(huán)境的搭建

系統(tǒng) 2322 0

轉(zhuǎn)載: http://kalogen.iteye.com/blog/784908

http://blog.163.com/xysygy_2005/blog/static/4209511020101020105520537/

這兩個(gè)鏈接內(nèi)容相同,第一個(gè)鏈接應(yīng)該是原創(chuàng),第二個(gè)可能是轉(zhuǎn)載,我是通過(guò)第二個(gè)鏈接看到這篇文章的,因此寫(xiě)了兩個(gè)轉(zhuǎn)載鏈接地址。

注1:實(shí)現(xiàn)此集群的方法參考了網(wǎng)上的很多文章,但由于很多文章都表明是原創(chuàng)的,故無(wú)法知道整個(gè)操作流程的真正作者是誰(shuí)。下面就是我用我們真實(shí)的項(xiàng)目去實(shí)現(xiàn)這個(gè)過(guò)程。同時(shí)修復(fù)這過(guò)程中一些問(wèn)題。以下的所有步驟均為親自測(cè)試,截圖也是真實(shí)的。

注2:要完成集群和負(fù)載均衡配置,最簡(jiǎn)單步驟為完成所有標(biāo)有下劃線(xiàn)的操作。無(wú)下劃線(xiàn)的部分為對(duì)操作的解釋或是額外的說(shuō)明。

1. 準(zhǔn)備條件:

材料

本次搭建所用具體版本

Apache

Apache 2.2.15 (用于分發(fā)請(qǐng)求)

Tomcat N 個(gè)

apache-tomcat-6.0.26.zip 2個(gè) (根據(jù)需求準(zhǔn)備N(xiāo)個(gè)免安裝的tomcat)

Mod_jk

mod_jk-1.2.30-httpd-2.2.3.so (注意,這個(gè)需要和apache的版本匹配。2.2.3的mod_jk用于匹配Apache 2.2.X版本)

用于部署的項(xiàng)目

Tlcom 1.2.6 sp3

材料

下載地址

Apache2.2

http://httpd.apache.org/download.cgi

Tomcat6.0.26

http://tomcat.apache.org/download-60.cgi

Mod_jk-1.2.30

http://tomcat.apache.org/download-connectors.cgi

2. 安裝apache 和 tomcat

將apache安裝到硬盤(pán)上, 然后將2個(gè)tomcat解壓。(這里的安裝和解壓不限定具體目錄,安裝和解壓到某個(gè)目錄下即可)。

這里我將apache2.2安裝到D:\Apache Software Foundation\。2個(gè)tomcat也解壓到同一個(gè)目錄下。

接著檢查apache是否能正常啟動(dòng)。

Tomcat負(fù)載均衡和集群環(huán)境的搭建

3. 對(duì)apache 配置負(fù)載均衡

?

(1)取出下載的mod_jk-1.2.30-httpd-2.2.3.so。將其放置到Apache2.2\modules目錄下。

(2)打開(kāi)Apache2.2\conf\ httpd.conf 文件。在其末尾添加上一行:

include "D:\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"

即調(diào)用conf目錄下的mod_jk.conf這個(gè)配置文件。當(dāng)然,apache conf目錄下原來(lái)是沒(méi)有這個(gè)文件的。我們需要自己新建這個(gè)文件。

(3)在conf目錄下新建Mod_jk.conf內(nèi)容如下:

#加載mod_jk Module

LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so

#指定 workers.properties文件路徑

JkWorkersFile conf/workers.properties

#指定那些請(qǐng)求交給tomcat處理,"controller"為在workers.propertise里指定的負(fù)載分配控制器

JkMount /*.jsp controller

第2行中的mod_jk-1.2.30-httpd-2.2.3.so,就是我們之前放到modules目錄下的那個(gè).so文件。這里的名字就根據(jù)放進(jìn)去的實(shí)際名字來(lái)寫(xiě)。版本不同,名字也就不一樣。當(dāng)然,mod_jk-1.2.30-httpd-2.2.3.so這個(gè)文件允許自己重命名。重命名后,只要在這里相應(yīng)的配置上重命名后的名字,不會(huì)影響這個(gè)插件的功能。

第4行中conf/workers.properties文件也是不存在的,也需要我們自己建立。這個(gè)文件的作用是對(duì)用于均衡負(fù)載的 負(fù)載器進(jìn)行具體的登記。(比如我們用的2個(gè)tomcat).換句話(huà)說(shuō),workers.properties就是對(duì)幾個(gè)worker的登記表。我們的2個(gè)tomcat就作為2個(gè)worker被登記在這個(gè)文件中。而具體要如何進(jìn)行登記,下面再具體說(shuō)。

第6行的作用就是配置apache對(duì)哪些請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)。這里我按照網(wǎng)絡(luò)上的教程,配置了對(duì)所有jsp頁(yè)面的請(qǐng)求的轉(zhuǎn)發(fā)。那么,當(dāng)有jsp請(qǐng)求到達(dá)apache時(shí),apache就會(huì)根據(jù)當(dāng)時(shí)的負(fù)載情況,從worker中挑出負(fù)載低的那個(gè)worker,將這個(gè)jsp請(qǐng)求轉(zhuǎn)發(fā)給他。(這里需要注意,當(dāng)部署到tomcat上的項(xiàng)目有更多類(lèi)型的請(qǐng)求的時(shí)候,需要在這里配置更多的請(qǐng)求規(guī)則)。而controller會(huì)在workers.peroperties中被配置。總的來(lái)說(shuō),轉(zhuǎn)發(fā)規(guī)則的格式如下:

JkMount + 過(guò)濾請(qǐng)求類(lèi)型 + 處理器

(4)接著,我們?cè)赾onf目錄下新建workers.properties內(nèi)容如下:

worker.list = controller,tomcat1,tomcat2 #server 列表

#========tomcat1========

worker.tomcat1.port=8009 #ajp13 端口號(hào),在tomcat下server.xml配置,默認(rèn)8009

worker.tomcat1.host=localhost #tomcat的主機(jī)地址,如不為本機(jī),請(qǐng)?zhí)顚?xiě)ip地址

worker.tomcat1.type=ajp13 #定向包協(xié)議

worker.tomcat1.lbfactor = 1 #server的加權(quán)比重,值越高,分得的請(qǐng)求越多

worker.tomcat1.redirect = tomcat2

#========tomcat2========

worker.tomcat2.port=18009 #ajp13 端口號(hào),在tomcat下server.xml配置,默認(rèn)8009

worker.tomcat2.host=localhost #tomcat的主機(jī)地址,如不為本機(jī),請(qǐng)?zhí)顚?xiě)ip地址

worker.tomcat2.type=ajp13 #定向包協(xié)議

worker.tomcat2.lbfactor = 1 #server的加權(quán)比重,值越高,分得的請(qǐng)求越多

worker.tomcat2.redirect = tomcat1

#========controller,負(fù)載均衡控制器========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2 #指定分擔(dān)請(qǐng)求的tomcat

worker.controller.sticky_session=1

第一行,worker.list,列出了worker的列表。Tomcat1, tomcat2就是我們?yōu)?個(gè)tomcat的命名。而controller相當(dāng)于包工頭。他負(fù)責(zé)對(duì)2個(gè)(或者更多)的worker進(jìn)行負(fù)載分配。在上面提到的Mod_jk.conf文件中配置的對(duì)jsp請(qǐng)求的處理器就是controller.在這里再由controller具體將任務(wù)分配給某一個(gè)tomcat.

下面幾行就是分別對(duì)worker的配置。Port, host等屬性都需要根據(jù)tomcat的實(shí)際配置來(lái)填。

實(shí)際上,這里對(duì)tomcat還有一個(gè)屬性可以進(jìn)行配置,即worker.tomcat2.activation = disabled 。就是對(duì)某一個(gè)tomcat的活動(dòng)性進(jìn)行禁用。這句配置的意思是,負(fù)載均衡啟動(dòng)的時(shí)候,其實(shí)負(fù)載都到tomcat1上面去。Tomcat2默認(rèn)不參與負(fù)載。當(dāng)tomcat1當(dāng)?shù)舻臅r(shí)候,通過(guò)worker.tomcat1.redirect = tomcat2 ,tomcat2就會(huì)自己?jiǎn)?dòng)起來(lái),接替tomcat1繼續(xù)工作。當(dāng)然,這樣就和負(fù)載均衡沒(méi)有關(guān)系了。

(5)到此,對(duì)apache的配置基本告一段落。 如果集群中有更多的tomcat的話(huà),請(qǐng)?jiān)趙orker.properties中進(jìn)行配置。(注:當(dāng)有6個(gè)tomcat進(jìn)行集群的時(shí)候,為了提高性能, worker.properties中的 redirect和activation就可以起到作用。我們可以對(duì)tomcat兩兩配對(duì),兩兩互相設(shè)置redirect,兩個(gè)其中一個(gè)設(shè)置activation. 形成3對(duì),這樣,就可以處理意外宕機(jī)的情況,保證6臺(tái)集群可以繼續(xù)運(yùn)行下去。)

4. Tomcat 集群配置

將2個(gè)tomcat分別解壓后,分別打開(kāi)apache-tomcat-6.0.26 \conf\server.xml文件。

(1) 修改端口:

2個(gè)tomcat, 為了避免端口沖突,其中一個(gè)端口使用默認(rèn)的,而另一個(gè)得修改。必須修改的端口如下:

Tomcat負(fù)載均衡和集群環(huán)境的搭建

以上3個(gè)地方都在前面加上一個(gè)“1”.就可以避免2個(gè)tomcat端口沖突。(注:這是tomcat6需要修改的端口。其他版本的tomcat可能不止要修改這些端口。總之沖突的端口均需要修改)

(2) 修改集群設(shè)置:

在<Engine>或<Host>元素下添加以下內(nèi)容均可。

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="224.0.0.1"

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4001"

autoBind="100"

selectorTimeout="5000"

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"/>

</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

<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"/>

</Cluster>

按照apache tomcat官方文檔上面的說(shuō)法,對(duì)于tomcat6要做集群的話(huà),只需要將<Engine>元素下的

<!--

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

-->

的注釋符號(hào)去掉,啟用這句配制就可以正常使用集群了。不過(guò)由于我搭建的測(cè)試環(huán)境2個(gè)tomcat是在同一臺(tái)機(jī)子上面,因此只啟用這個(gè)<Cluster>的話(huà),這個(gè)元素下的默認(rèn)Receiver port就會(huì)沖突。因此必須補(bǔ)全這些配置。

另外,按照官方文檔里說(shuō)明的<Cluster>的默認(rèn)配置,<Membership>元素下的address屬性默認(rèn)值為228.0.0.4 . 這個(gè)配置在我的系統(tǒng)上始終會(huì)出現(xiàn)2個(gè)tomcat無(wú)法交換數(shù)據(jù)包的問(wèn)題。需改成224.0.0.1才能正常使用。

需要而外注意的是,2個(gè)tomcat里添加到上面這段<Cluster>配置,其<Receiver>下的Port元素必需配置成不同的。如其中一個(gè)是4001,一個(gè)是4002.(tomcat默認(rèn)可以檢測(cè)到4000~4100之間的端口)。

(3)修改<Engine>的屬性。

2個(gè)tomcat, jvmRoute分別配置成tomcat1和tomcat2,即和apache/conf里worker.properites配置文件中配置的worker名稱(chēng)對(duì)應(yīng)。

5. Tlcom 集群配置:

?

(1) 修改tlcom的web.xml,添加 < Context distributable= "true" />

Tomcat負(fù)載均衡和集群環(huán)境的搭建

所有需要集群的web項(xiàng)目,其web.xml中都必須添加<Context distributable= "true" />

這個(gè)定義

(2) 將tlcom分別部署到2個(gè)tomcat中:

這里因?yàn)槲已赜迷瓉?lái)在tomcat上的開(kāi)發(fā)方式,并不直接把項(xiàng)目放到tomcat/webapp目錄下,而是通過(guò)將rone.xml和tlcom.xml兩個(gè)配置文件放到apache-tomcat-6.0.26 A\conf\Catalina\localhost目錄下

Tomcat負(fù)載均衡和集群環(huán)境的搭建

(3) 分別啟動(dòng)兩個(gè)tomcat

可以在tomcat\bin目錄下執(zhí)行

來(lái)啟動(dòng),也可以通過(guò)在eclipse中先將server配置好(配置對(duì)應(yīng)的2個(gè)tomcat server),在eclipse中啟動(dòng)。

啟動(dòng)tomcat1:

和正常eclipse中啟動(dòng)一樣,加載插件:

RONE初始化:

成功啟動(dòng):

Tomcat負(fù)載均衡和集群環(huán)境的搭建

啟動(dòng)tomcat2:

啟動(dòng)過(guò)程和tomcat1一樣,值得注意的是,在tomcat2啟動(dòng)的時(shí)候,tomcat1會(huì)打印出集群中加入member的提示:

(4) 啟動(dòng)apache. 通過(guò)IP訪(fǎng)問(wèn)apache. 比如我的是 http://10.188.182.43 (這里80端口寫(xiě)不寫(xiě)是一樣的)。

你會(huì)發(fā)現(xiàn)可能RONE都登陸不了,或者登陸了頁(yè)面都無(wú)法正常打開(kāi)。原因在于我們一開(kāi)始配置的Mod_jk.conf文件。文件末尾的請(qǐng)求轉(zhuǎn)發(fā)。我們只轉(zhuǎn)發(fā)了jsp頁(yè)面的請(qǐng)求,就是說(shuō)apache只會(huì)把jsp頁(yè)面的請(qǐng)求轉(zhuǎn)發(fā)到2個(gè)tomcat上去。因此我們需要修改過(guò)濾的規(guī)則。我沒(méi)有找到資料具體的各種規(guī)則應(yīng)該怎么寫(xiě),只能寫(xiě)一個(gè)大的過(guò)濾:

JkMount /* controller

JkMount /*.do controller

將mod_jk.conf末尾改成上面這樣。重啟apache,你就可以看到RONE登陸界面了

(5) 測(cè)試:

Tomcat負(fù)載均衡和集群環(huán)境的搭建

我們進(jìn)行一下傳輸配置的驗(yàn)證。可以看到tomcat2的consol開(kāi)始打印信息。那么這次操作負(fù)載均衡器就把請(qǐng)求發(fā)送到tomcat2上面去了。

Tomcat負(fù)載均衡和集群環(huán)境的搭建

驗(yàn)證完成

Tomcat負(fù)載均衡和集群環(huán)境的搭建

直接把tomcat2停止掉。可以在tomcat1的控制臺(tái)中看到關(guān)于集群成員關(guān)閉的信息:

不要刷新頁(yè)面,直接再次點(diǎn)擊“全部驗(yàn)證”。可以看到,tomcat1上開(kāi)始了驗(yàn)證業(yè)務(wù)。頁(yè)面上沒(méi)有出現(xiàn)異常,登陸用戶(hù)的session也還在。業(yè)務(wù)處理透明地從tomcat2上轉(zhuǎn)移到了tomcat1上去了。

Tomcat負(fù)載均衡和集群環(huán)境的搭建

6. 非本地訪(fǎng)問(wèn)apache

我這里會(huì)出現(xiàn)本地可以正常通過(guò) http://10.188.182.43/rone/portal 訪(fǎng)問(wèn)apache,而從別的PC無(wú)法訪(fǎng)問(wèn)的情況。經(jīng)檢查是windows防火墻的配置問(wèn)題。當(dāng)然,我們不能直接去禁用防火墻,只能為防火墻新建一條規(guī)則開(kāi)放80端口在可信的網(wǎng)絡(luò)域中。

Tomcat負(fù)載均衡和集群環(huán)境的搭建


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 华蓥市| 朔州市| 延安市| 湘阴县| 房产| 榆社县| 通海县| 康平县| 颍上县| 内黄县| 黎城县| 玛纳斯县| 萍乡市| 阜康市| 施秉县| 灵宝市| 新沂市| 乐东| 饶平县| 定安县| 禹城市| 嘉荫县| 宣汉县| 牙克石市| 甘孜| 溧水县| 桂平市| 江安县| 鹤庆县| 开远市| 新蔡县| 疏勒县| 黑河市| 临汾市| 南召县| 盘山县| 乳源| 内丘县| 孝义市| 眉山市| 荣成市|