Tomcat負載均衡和集羣配置


1、準備
a) Tomcat 6.0.26 解壓版。解壓到D:\tomcat1和D:\tomcat2
b) Apache2.2.15安裝版。安裝到D:\apache2.
2、配置
1.1 httpd.conf配置
把下面的註釋去掉。
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
修改APACHE的配置文件D:\Apache2.2 \conf\httpd.conf
將以下Module的註釋去掉,這裏並沒有使用mod_jk.so進行apache和tomcat的鏈接,從2.X以後apache自身已集成了mod_jk.so的功能。只需簡單的把下面幾行去掉註釋,就相當於以前用mod_jk.so比較繁瑣的配置了。這裏主要採用了代理的方法。
     LoadModule proxy_module modules/mod_proxy.so
     LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
     LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
     LoadModule proxy_connect_module modules/mod_proxy_connect.so
     LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
     LoadModule proxy_http_module modules/mod_proxy_http.so
然後回到httpd.conf,在文檔最下面加上
ProxyRequests Off 
<proxy balancer://cluster> 
       BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
       BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2
</proxy>
ProxyRequests Off 是告訴Apache需要使用反向代理,ip地址和端口唯一確定了tomcat節點和配置的ajp接受端口。loadfactor是負載因子,Apache會按負載因子的比例向後端tomcat節點轉發請求,負載因子越大,對應的tomcat服務器就會處理越多的請求,如兩個tomcat都是1,Apache就按1:1的比例轉發,如果是2和1就按2:1的比例轉發。這樣就可以使配置更靈活,例如可以給性能好的服務器增加處理工作的比例,如果採取多臺服務器,只需要修改ip地址和端口就可以了。route參數對應後續tomcat配置中的引擎路徑(jvmRoute)。

1.2、httpd-vhosts.conf設置
接下來進行虛擬主機的設置。APACHE的虛擬主機設置如下:
在文件(extra/httpd-vhosts.conf)最下面加入 
<VirtualHost *:80> 
         ServerAdmin [email protected](這裏是你安裝apache填寫的)
         ServerName localhost(這裏是你安裝apache填寫的)
         ServerAlias localhost (這裏是你安裝apache填寫的)
         ProxyPass /  balancer://cluster/ stickysession=jsessionid nofailover=On 
         ProxyPassReverse /  balancer://cluster/ 
         ErrorLog "logs/dummy-host2.hepx.com-error.log"
         CustomLog "logs/dummy-host2.hepx.com-access.log" common

 </VirtualHost>
ProxyPass爲代理轉發的Url,即將所有訪問/的請求轉發到羣集balancer://cluster


2 配置 tomcat 
2.1. 配置 server 的關閉
我們需要在一臺機器上跑 2 個不同的 tomcat ,需要修改不同的 tomcat 的關閉口,避免出現端口被佔用的情況。
Tomcat_1\conf下的 server.xml中的<Server port="8005" shutdown="SHUTDOWN"> 不作修改保持默認,
Tomcat_2\conf下的server.xml中的<Server port="8005" shutdown="SHUTDOWN"> 修改爲: 
<Server port="9005" shutdown="SHUTDOWN"> 

2.2. 配置 Engine
把tomcat_1和tomcat_2下原來的配置註釋掉,如下:
<!-- <Engine name="Catalina" defaultHost="localhost"> --> 
把下面一句去掉註釋。(jvmRoute的值對應apache/conf/httpd.conf中的BalancerMember的成員)
Tomcat_1: 
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">         
Tomcat_2:
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm2"> 

2.3. 配置 Connector 
Connector 是apache和tomcat鏈接的關鍵,前臺apache就是通過AJP協議與tomcat進行通信的,以完成負載均衡的作用。也可以用HTTP協議。
tomcat_1不作修改。保持默認。如下:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
tomcat_2修改成:
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
其中的端口對應,tomcat_1 的ajp端口port:8009、tomcat_2 的ajp端口port:9009一定要與apache/conf/httpd.conf的BalancerMember配置的一致。同時也要把保持redirectPort的值唯一。

2.5.配置Cluster(每個tomcat中都要修改)
   向下找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>,去掉註釋,這裏的配置是爲了可以在集羣中的所有tomcat節點間共享會話(Session)。如果僅僅爲了獲得一個可用的tomcat集羣,Cluster只需要這麼配置就可以了。
3、測試負載均衡和集羣
我在tomcat1和tomcat2下的webapps下加入test工程。新建一個index.jsp作爲測試頁面。在test目錄下繼續新建WEB-INF目錄和web.xml,在<web-app>節點下加入<distributable />,這一步非常重要,是爲了通知tomcat服務器,當前應用需要在集羣中的所有節點間實現Session共享。如果tomcat中的所有應用都需要Session共享,也可以把conf/context.xml中的
<Context>改爲<Context distributable="true">,這樣就不需對所有應用的web.xml再進行單獨配置。
1、啓動服務,測試tomcat(啓動順序:apache、tomcat1、tomcat2)
在瀏覽器中輸入:http://localhost/test/index.jsp如下:
Tomcat負載均衡和集羣配置 - hepanxi - hepanxi的博客
同時看到後臺的tomcat1打印了信息:如下:
Tomcat負載均衡和集羣配置 - hepanxi - hepanxi的博客
我們再刷新一下頁面.此時tomcat2打印信息了:如下:
Tomcat負載均衡和集羣配置 - hepanxi - hepanxi的博客
我們在頁面當中輸入內容然後查看後臺打印的信息。我們輸入如下內容:
Tomcat負載均衡和集羣配置 - hepanxi - hepanxi的博客
點擊提交看後臺打印的信息:(tomcat1打印)
Tomcat負載均衡和集羣配置 - hepanxi - hepanxi的博客
我們再回到頁面輸入tomcat2 ,9090 提交後如下:(tomcat2打印)
Tomcat負載均衡和集羣配置 - hepanxi - hepanxi的博客
結果告訴我們兩個tomcat之間共享了session的內容
我們在試着停掉其中的一臺tomcat,然後再請求。沒問題還是可以正常工作的。只是所有工作都交給了這一臺tomcat執行了。
總結:是不是很簡單。可以動手試試哦!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章