亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Tomcat負載均衡和集群環境的搭建

系統 2104 0

轉載: http://kalogen.iteye.com/blog/784908

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

這兩個鏈接內容相同,第一個鏈接應該是原創,第二個可能是轉載,我是通過第二個鏈接看到這篇文章的,因此寫了兩個轉載鏈接地址。

注1:實現此集群的方法參考了網上的很多文章,但由于很多文章都表明是原創的,故無法知道整個操作流程的真正作者是誰。下面就是我用我們真實的項目去實現這個過程。同時修復這過程中一些問題。以下的所有步驟均為親自測試,截圖也是真實的。

注2:要完成集群和負載均衡配置,最簡單步驟為完成所有標有下劃線的操作。無下劃線的部分為對操作的解釋或是額外的說明。

1. 準備條件:

材料

本次搭建所用具體版本

Apache

Apache 2.2.15 (用于分發請求)

Tomcat N

apache-tomcat-6.0.26.zip 2個 (根據需求準備N個免安裝的tomcat)

Mod_jk

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

用于部署的項目

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安裝到硬盤上, 然后將2個tomcat解壓。(這里的安裝和解壓不限定具體目錄,安裝和解壓到某個目錄下即可)。

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

接著檢查apache是否能正常啟動。

Tomcat負載均衡和集群環境的搭建

3. 對apache 配置負載均衡

?

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

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

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

即調用conf目錄下的mod_jk.conf這個配置文件。當然,apache conf目錄下原來是沒有這個文件的。我們需要自己新建這個文件。

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

#加載mod_jk Module

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

#指定 workers.properties文件路徑

JkWorkersFile conf/workers.properties

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

JkMount /*.jsp controller

第2行中的mod_jk-1.2.30-httpd-2.2.3.so,就是我們之前放到modules目錄下的那個.so文件。這里的名字就根據放進去的實際名字來寫。版本不同,名字也就不一樣。當然,mod_jk-1.2.30-httpd-2.2.3.so這個文件允許自己重命名。重命名后,只要在這里相應的配置上重命名后的名字,不會影響這個插件的功能。

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

第6行的作用就是配置apache對哪些請求進行轉發。這里我按照網絡上的教程,配置了對所有jsp頁面的請求的轉發。那么,當有jsp請求到達apache時,apache就會根據當時的負載情況,從worker中挑出負載低的那個worker,將這個jsp請求轉發給他。(這里需要注意,當部署到tomcat上的項目有更多類型的請求的時候,需要在這里配置更多的請求規則)。而controller會在workers.peroperties中被配置。總的來說,轉發規則的格式如下:

JkMount + 過濾請求類型 + 處理器

(4)接著,我們在conf目錄下新建workers.properties內容如下:

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

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

worker.tomcat1.port=8009 #ajp13 端口號,在tomcat下server.xml配置,默認8009

worker.tomcat1.host=localhost #tomcat的主機地址,如不為本機,請填寫ip地址

worker.tomcat1.type=ajp13 #定向包協議

worker.tomcat1.lbfactor = 1 #server的加權比重,值越高,分得的請求越多

worker.tomcat1.redirect = tomcat2

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

worker.tomcat2.port=18009 #ajp13 端口號,在tomcat下server.xml配置,默認8009

worker.tomcat2.host=localhost #tomcat的主機地址,如不為本機,請填寫ip地址

worker.tomcat2.type=ajp13 #定向包協議

worker.tomcat2.lbfactor = 1 #server的加權比重,值越高,分得的請求越多

worker.tomcat2.redirect = tomcat1

#========controller,負載均衡控制器========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2 #指定分擔請求的tomcat

worker.controller.sticky_session=1

第一行,worker.list,列出了worker的列表。Tomcat1, tomcat2就是我們為2個tomcat的命名。而controller相當于包工頭。他負責對2個(或者更多)的worker進行負載分配。在上面提到的Mod_jk.conf文件中配置的對jsp請求的處理器就是controller.在這里再由controller具體將任務分配給某一個tomcat.

下面幾行就是分別對worker的配置。Port, host等屬性都需要根據tomcat的實際配置來填。

實際上,這里對tomcat還有一個屬性可以進行配置,即worker.tomcat2.activation = disabled 。就是對某一個tomcat的活動性進行禁用。這句配置的意思是,負載均衡啟動的時候,其實負載都到tomcat1上面去。Tomcat2默認不參與負載。當tomcat1當掉的時候,通過worker.tomcat1.redirect = tomcat2 ,tomcat2就會自己啟動起來,接替tomcat1繼續工作。當然,這樣就和負載均衡沒有關系了。

(5)到此,對apache的配置基本告一段落。 如果集群中有更多的tomcat的話,請在worker.properties中進行配置。(注:當有6個tomcat進行集群的時候,為了提高性能, worker.properties中的 redirect和activation就可以起到作用。我們可以對tomcat兩兩配對,兩兩互相設置redirect,兩個其中一個設置activation. 形成3對,這樣,就可以處理意外宕機的情況,保證6臺集群可以繼續運行下去。)

4. Tomcat 集群配置

將2個tomcat分別解壓后,分別打開apache-tomcat-6.0.26 \conf\server.xml文件。

(1) 修改端口:

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

Tomcat負載均衡和集群環境的搭建

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

(2) 修改集群設置:

在<Engine>或<Host>元素下添加以下內容均可。

<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官方文檔上面的說法,對于tomcat6要做集群的話,只需要將<Engine>元素下的

<!--

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

-->

的注釋符號去掉,啟用這句配制就可以正常使用集群了。不過由于我搭建的測試環境2個tomcat是在同一臺機子上面,因此只啟用這個<Cluster>的話,這個元素下的默認Receiver port就會沖突。因此必須補全這些配置。

另外,按照官方文檔里說明的<Cluster>的默認配置,<Membership>元素下的address屬性默認值為228.0.0.4 . 這個配置在我的系統上始終會出現2個tomcat無法交換數據包的問題。需改成224.0.0.1才能正常使用。

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

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

2個tomcat, jvmRoute分別配置成tomcat1和tomcat2,即和apache/conf里worker.properites配置文件中配置的worker名稱對應。

5. Tlcom 集群配置:

?

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

Tomcat負載均衡和集群環境的搭建

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

這個定義

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

這里因為我沿用原來在tomcat上的開發方式,并不直接把項目放到tomcat/webapp目錄下,而是通過將rone.xml和tlcom.xml兩個配置文件放到apache-tomcat-6.0.26 A\conf\Catalina\localhost目錄下

Tomcat負載均衡和集群環境的搭建

(3) 分別啟動兩個tomcat

可以在tomcat\bin目錄下執行

來啟動,也可以通過在eclipse中先將server配置好(配置對應的2個tomcat server),在eclipse中啟動。

啟動tomcat1:

和正常eclipse中啟動一樣,加載插件:

RONE初始化:

成功啟動:

Tomcat負載均衡和集群環境的搭建

啟動tomcat2:

啟動過程和tomcat1一樣,值得注意的是,在tomcat2啟動的時候,tomcat1會打印出集群中加入member的提示:

(4) 啟動apache. 通過IP訪問apache. 比如我的是 http://10.188.182.43 (這里80端口寫不寫是一樣的)。

你會發現可能RONE都登陸不了,或者登陸了頁面都無法正常打開。原因在于我們一開始配置的Mod_jk.conf文件。文件末尾的請求轉發。我們只轉發了jsp頁面的請求,就是說apache只會把jsp頁面的請求轉發到2個tomcat上去。因此我們需要修改過濾的規則。我沒有找到資料具體的各種規則應該怎么寫,只能寫一個大的過濾:

JkMount /* controller

JkMount /*.do controller

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

(5) 測試:

Tomcat負載均衡和集群環境的搭建

我們進行一下傳輸配置的驗證。可以看到tomcat2的consol開始打印信息。那么這次操作負載均衡器就把請求發送到tomcat2上面去了。

Tomcat負載均衡和集群環境的搭建

驗證完成

Tomcat負載均衡和集群環境的搭建

直接把tomcat2停止掉。可以在tomcat1的控制臺中看到關于集群成員關閉的信息:

不要刷新頁面,直接再次點擊“全部驗證”。可以看到,tomcat1上開始了驗證業務。頁面上沒有出現異常,登陸用戶的session也還在。業務處理透明地從tomcat2上轉移到了tomcat1上去了。

Tomcat負載均衡和集群環境的搭建

6. 非本地訪問apache

我這里會出現本地可以正常通過 http://10.188.182.43/rone/portal 訪問apache,而從別的PC無法訪問的情況。經檢查是windows防火墻的配置問題。當然,我們不能直接去禁用防火墻,只能為防火墻新建一條規則開放80端口在可信的網絡域中。

Tomcat負載均衡和集群環境的搭建


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品午夜波多野结衣性色 | 亚洲男女在线 | 九九艹 | 欧美精品国产一区二区 | 日本一区二区三区免费看 | 青青青爽在线视频观看 | 五月天婷婷一区二区三区久久 | 五月天婷亚洲天综合网精品偷 | 日韩成人在线网站 | 久热国产在线视频 | 国产日韩亚洲欧洲一区二区三区 | 男人懂的网站 | 毛片一| 亚洲国产高清一区二区三区 | 国产一区曰韩二区欧美三区 | 成人欧美一区二区三区黑人妖 | 亚洲天堂一区二区 | 26uuu欧美 | 免费香蕉视频 | 玖玖精品在线视频 | 亚洲欧洲国产精品 | 欧美成人午夜 | 国产精品高清一区二区三区 | 香蕉青草久久成人网 | 精品91自产拍在线观看一区 | 欧洲做视频在线观看 | 欧美一及| 中国jizz妇女jizz妇女 | 九九热线精品视频18 | 99精品视频只99有精品 | 国产成人久久精品二区三区 | 91久久精品午夜一区二区 | 欧美日韩免费在线 | 天天操中文字幕 | 国产色在线 | 亚洲 国产色在线视频 | 日韩不卡一区二区三区 | 97视频网站| 久久青青草原精品影院 | 中文字幕三级在线不卡 | 亚洲国产一区二区三区 | 尤物福利 |