http://blog.csdn.net/kypfos/article/details/3081330
本文基本參考自 輕鬆實現Apache,Tomcat集羣和負載均衡,經由實操經歷記錄而成,碰到些出入,以及個別地方依據個人的習慣,所以在一定程度上未能保持原文的完整性,還望原著者海涵。
因原文中有較多的貼圖,如若各位讀者一時不想親自動手而直想看到配置效果,可查看原文。
一:軟件環境
1. Apache: apache 2.0.55 (由http://httpd.apache.org/進入下載)(點擊下載apache 2.0.55)
2. Tomcat: Tomcat 5.5.25 (由http://tomcat.apache.org/進入下載)(點擊下載Tomcat 5.5.25 zip版)
3. mod_jk: 在頁面 http://tomcat.apache.org/ Download 標題下找到 Tomcat Connectors 鏈接進入( 點擊下載mod_jk-apache-2.0.55.so),看起來像是個Unix/Linux下的動態庫,實際應是個Win32 的 DLL 動態庫,大概是爲保持不同平臺配置的一致性,才用了這個擴展名。
二:負載均衡
用Apache進行分流,把請求按照權重以及當時負荷分tomcat1,tomcat2...去處理
1. 安裝apache,tomcat
我把Apache安裝在D:/Apache Group/Apache2
解壓兩分Tomcat, 分別在 D:/Apache Group/Tomcat5_1,D:/Apache Group/Tomcat5_2
如果把不同版本的Tomcat進行集羣,目錄就可用Tomcat4_3(版本爲4.x的第三個tomcat服務器),Tomcat6_4(版本爲6.x的第三個tomcat服務器),這是Unmi本人的習慣。
2.修改Apache配置文件http.conf
在apache安裝目錄下conf目錄中找到http.conf,在文件最後加上下面一句話就可以了
include conf/mod_jk.conf
3. http.conf 同目錄下新建mod_jk.conf文件,內容如下
如果還要指定*.do也進行分流就再加一行
JkMount /*.do controller
如果你想對所有的請求進行分流只需要寫成
JkMount /* controller
4. 在http.conf同目錄下新建 workers.properties文件,內容如下(可能要去除 # 不在行首的註釋)
5. 修改tomcat配置文件server.xml
如果你是水平集羣,即在不同電腦上安裝tomcat,tomcat的安裝數量爲一個,可以不必修改tomcat配置文件.我這裏是在同一臺電腦上安裝兩個tomcat,實現的是垂直集羣方式,所以必須修改其中一個的設置,以避免端口衝突,按照參考文章是把原來以9開頭的端口號改爲以9開頭端口號,但是在我機器上如果以9開頭的端口號,例如9080、9082會與我的WebSphere Application Server配置衝突,所以我這裏採取的策略是把原來端口號的第三位改爲1,如8080改爲8180。
打開tomcat2/conf/server.xml文件
1) 將關閉Tomcat的監聽端口改成由8005改爲8105
即把
<Server port="8005" shutdown="SHUTDOWN">
改爲
<Server port="8105" shutdown="SHUTDOWN">
2) 把http服務端口號由8080改爲8180
找到
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<CONNECTOR port="8080"
把這裏的8080改爲8180
3) 把AJP端口號由8009改爲8109
找到
<!-- Define an AJP 1.3 Connector on port 8009 -->
<CONNECTOR port="8009"
把這裏的8009改爲8109
4) 把 HTTP 代理端口從8082改爲8182(這個配置默認是被註釋掉的,可跳過這一步)
找到
<CONNECTOR port="8082"
把這裏的8082改爲8182
5) 編寫一個測試 jsp
建立一個目錄TestCluster,裏面新建一個test.jsp,內容爲
把TestCluster放到tomcat1,tomcat2的webapps下
6) 啓動apache,tomcat1,tomcat2,進行測試
通過 http://localhost/TestCluster/test.jsp 訪問,多刷新幾次頁面,查看Tomcat1和Tomcat2的窗口,你將可以看到打印了一行行"===========================",並且從統計上來說,大約在tomcat2打印的數量是在Tomcat1中的兩倍,可以看到請求會被tomcat1,tomcat2按照不同的權重分流處理,實現了負載均衡。
作下面的集羣配置,請在workers.properties把tomcat1和tomcat2的權重改爲一樣的,使請求較平均分配,將有便於看到實驗的效果。
三:配置集羣
只配置負載均衡還不行,還要session複製,也就是說其中任何一個tomcat的添加的session,是要同步複製到其它tomcat, 集羣內的tomcat都有相同的session
1. 修改tomcat1, tomcat2的server.xml,將集羣部分配置,即對<Cluster>節點的在註釋符刪掉,並將tomcat2的4001端口改爲4002,以避免與tomcat衝突,當然,如果是兩臺電腦,是不用改端口的,去掉註釋符即可
即取消對如下處
前後的註釋標記<!-- -->,啓用該項配置,實現服務器間的Session複製。
2. 爲 Tomcat1和 Tomcat2 增加 jvmRoute(先跳過這一步,有精力可以試驗一下)
在 Tomcat1 和 Tomcat2 的 server.xml 文件,找到
<ENGINE name="Catalina" defaultHost="localhost">
分別改爲
<ENGINE name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
和
<ENGINE name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
然而實際我配置的時候還不能加jvmRoute屬性,配置了反而有問題。
刷新瀏覽器窗口總是在某一個tomcat控制檯輸出形如
SessionID:154678FA6D4D0ABD57658B750E7A3532.tomcat1 (在tomcat1窗口)
或者
SessionID:3800571A532AECEA7280F45361861AD4.tomcat2 (在tomcat2窗口)
由控制檯打印的結果可以看出,SessionID在哪個tomcat上產生,那麼後續該會話的請求將總是會這個tomcat來處理。
並且注意到SessionID的形式比通常情況多了一個後綴.tomcat1或.tomcat2,還搞不清楚是爲什麼。
配置時請視實際情況而取捨。
3. 修改測試項目 TestCluster
修改test.jsp,內容如下
4. 配置Session複製
在TestCluster目錄下新建WEB-INF目錄,WEB-INF下新建web.xml,內容如下
也就是在需要集羣的應用的web.xml中加上屬性,表明該應用可多應用分流處理,能進行Session的複製
把TestCluster複製到Tomcat1、Tomcat2的webapps目錄下,重啓apache,tomcat1,tomcat2
5. 測試Session的複製
通過 http://localhost/TestCluster/test.jsp 訪問,輸入名稱爲 name, 值爲 Unmi,提交查詢,多刷新幾次瀏覽器窗口,你將會看到在兩個Tomcat窗口都打印出相同的SessionID及其中的值,並且每次刷新後打印的結果都一樣的。
如果不爲應用的web.xml加上 ,同樣測試上面那個test.jsp頁面,每次刷新分流到不同的tomcat上都會產生不一樣的SessionID,在同一個tomcat上也是間隔出現不同的sessionID。
更切身的體驗是一定要自己動手配置一遍,並仔細觀察兩個tomcat的控制上的輸出。因本文是參考 輕鬆實現Apache,Tomcat集羣和負載均衡 的實踐經歷,該本中有較多的貼圖。
後記:
用 WebSphere Application Server ND 版配置過垂直和水平集羣,但是自己試驗集羣環境下的應用卻不想搬弄這個龐然大物。眼下急於想體驗的就是 Quartz 如何適應集羣環境,問題的焦點就是:Quartz 定時任務隨 Web 應用啓動,而 Web 應用部署在集羣環境中,如何保證同一時刻只有一個同名的任務實例在跑。
所以會考慮用Apache+Tomcat配置一個輕量級的WEB應用集羣,一般進行HTTP分流都是使用Apache,包括WAS集羣也是,很少用IIS的。雖然單純的用Tomcat的balancer應用也能配置進行負載分流,但那個性能應該好不到哪兒去。
用Apache+Tomcat配置的Web應用集羣就是部署起來麻煩些,總是要保持雙份的應用拷貝,WAS集羣則不需要,不知道Jboss做WEB應用集羣是怎麼樣一種情況。
好了,下面要進行該做的事情了,最後也希望能寫個工具能完成從下載到安裝配置,啓動,停止,重啓的全自動化,以及界面的人性化。
參考資料:1. 輕鬆實現Apache,Tomcat集羣和負載均衡
2. apache+tomcat集羣實踐(與上面方法有些異樣的配置方式)
3. Tomcat集羣與負載均衡(關於集羣與負載均衡的解釋)
4. 怎樣配製集羣/Session複製(Tomcat5自帶文檔的中文翻譯)
5. 怎樣配置負載均衡(Tomcat5自帶文檔的中文翻譯)