本文基本參考自 輕鬆實現apache,tomcat集群和負載均衡,經由實操經歷記錄而成,碰到些出入,以及個別地方依據個人的習慣,所以在一定程度上未能保持原文的完整性,還望原著者海涵。
一:軟體環境
二:負載均衡
用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檔案,內容如下
#載入mod_jk module loadmodule jk_module modules/mod_jk-apache-2.0.55.so #指定 workers.properties檔案路徑 jkworkersfile conf/workers.properties #指定那些請求交給tomcat處理,"controller"為在workers.propertise裡指定的負載分配控制器 jkmount /*.jsp controller
如果還要指定*.do也進行分流就再加一行
jkmount /*.do controller
如果你想對所有的請求進行分流只需要寫成
jkmount /* controller
4. 在http.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的加權比重,值越高,分得的請求越多 #*****===tomcat2*****=== worker.tomcat2.port=8109 #ajp13 埠號,在tomcat下server.xml配置,預設8009 worker.tomcat2.host=localhost #tomcat的主機位址,如不為本機,請填寫ip位址 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 2 #server的加權比重,值越高,分得的請求越多 #*****===controller,負載均衡控制器*****=== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 #指定分擔請求的tomcat worker.controller.sticky_session=1
5. 修改tomcat配置檔案server.xml
改為8105" shutdown="shutdown">
2) 把http服務埠號由8080改為8180
找到8080"
把這裡的8080改為8180
3) 把ajp埠號由8009改為8109
找到8009"
把這裡的8009改為8109
4) 把 http **埠從8082改為8182(這個配置預設是被注釋掉的,可跳過這一步)
找到8082"
把這裡的8082改為8182
5) 編寫乙個測試 jsp
建立乙個目錄testcluster,裡面新建乙個test.jsp,內容為
<% system.out.println("*************************=="); %>
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,將集群部分配置,即對節點的在注釋符刪掉,並將tomcat2的4001埠改為4002,以避免與tomcat衝突,當然,如果是兩台電腦,是不用改埠的,去掉注釋符即可
即取消對如下處
前後的注釋標記,啟用該項配置,實現伺服器間的session複製。
2. 為 tomcat1和 tomcat2 增加 jvmroute(
先跳過這一步,有精力可以試驗一下)
在 tomcat1 和 tomcat2 的 server.xml 檔案,找到
分別改為
jvmroute="tomcat1">
和jvmroute="tomcat2">
然而實際我配置的時候還不能加jvmroute屬性,配置了反而有問題。
重新整理瀏覽器視窗總是在某乙個tomcat控制台輸出形如
sessionid:154678fa6d4d0abd57658b750e7a3532.tomcat1 (在tomcat1視窗)
或者sessionid:3800571a532aecea7280f45361861ad4.tomcat2 (在tomcat2視窗)
由控制台列印的結果可以看出,sessionid在哪個tomcat上產生,那麼後續該會話的請求將總是會這個tomcat來處理。
並且注意到sessionid的形式比通常情況多了乙個字尾.tomcat1或.tomcat2,還搞不清楚是為什麼。
配置時請視實際情況而取捨。
3. 修改測試專案 testcluster
修改test.jsp,內容如下
<% system.out.println("sessionid:" + session.getid()); %> server info: <% out.println(request.getservername() + " : " + request.getserverport()+"
");%> <% out.println("
id " + session.getid()+"
"); // 如果有新的 session 屬性設定 string dataname = request.getparameter("dataname"); if (dataname != null && dataname.length() > 0) out.print("session 列表
"); enumeration e = session.getattributenames(); while (e.hasmoreelements()) %>
4. 配置session複製
在testcluster目錄下新建web-inf目錄,web-inf下新建web.xml,內容如下
通過 http://localhost/testcluster/test.jsp 訪問,輸入名稱為 name, 值為 unmi,提交查詢,多重新整理幾次瀏覽器視窗,你將會看到在兩個tomcat視窗都列印出相同的sessionid及其中的值,並且每次重新整理後列印的結果都一樣的。
如果不為應用的web.xml加上 ,同樣測試上面那個test.jsp頁面,每次重新整理分流到不同的tomcat上都會產生不一樣的sessionid,在同乙個tomcat上也是間隔出現不同的sessionid。
更切身的體驗是一定要自己動手配置一遍,並仔細觀察兩個tomcat的控制上的輸出。因本文是參考 輕鬆實現apache,tomcat集群和負載均衡 的實踐經歷,該本中有較多的貼圖。
結合Apache和Tomcat實現集群和負載均衡
一 軟體環境 二 負載均衡 用apache進行分流,把請求按照權重以及當時負荷分tomcat1,tomcat2.去處理 1.安裝apache,tomcat 我把apache安裝在d apache group apache2 解壓兩分tomcat,分別在 d apache group tomcat5 ...
Apache和PHP結合 Apache預設虛擬主機
apache和php結合 1 先禁用之前的php7的模組 2 檢視下是否禁用php7模組 root centos7 usr local apache2.4 bin apachectl m rewrite module shared php5 module shared 只有乙個,說明禁用了 synt...
Karrigell和apache的結合
原文 因為python並不是特別為web開發而生,所以現在很多的python使用者都在開發能夠讓python執行於web的框架.karrigell就是現在為數眾多的python web框架之一.本文將對karrigell做簡要的介紹.簡介 karrigell是乙個功能強大且靈活的python web...