Apache +Tomcat的負載均衡與叢集配置

yuanyuan_186發表於2016-05-01

實驗拓撲圖:

一.搭配環境

(1)。Tomcat的安裝和配置

Tomcat_a的ip:192.168.55.229

Tomcat_b的ip:192.168.55.231

Tomcat的需要安裝jdk和tomcat包(例如apache-tomcat-6.0.30.zip和jdk-6u5-linux-x64.bin)

tomcat的安裝和配置可以參考我的部落格:

http://blog.csdn.net/zhuying_linux/article/details/6583096

 

測試:分別訪問http://192.168.55.229:8080和http://192.168.55.231:8080

如果出現tom貓說明已經成功

 

(2)。Apache 的安裝:(採用原始碼編譯安裝的方式)

Apache的地址為:192.168.50.50

#tar xzvf httpd-2.2.17.tar.gz

            #cd  httpd-2.2.17

            # ./configure --with-ldap --enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache"【此選項為編譯所有的模組】

1.  測試

/usr/local/apache2/conf/httpd.conf 中設定

ServerName  localhost

#cd  /usr/local/apache2/bin

#./apachectl  start

將出現類似httpd (pid 17040) already running的輸出

訪問地址:http://192.168.50.50

It works!hehe...

說明已經成功~\(≧▽≦)/~啦啦啦,(~ o ~)~zZ

 

二.(1)mod_proxy負載均衡配置

1.載入proxy模組

所有需要載入的代理模組為mod_proxy.so,mod_proxy.ajp.so,mod_proxy.http.so,mod_proxy.ftp.so,mod_proxy.connect.so,mod_proxy.balancer.so

由於已經將所有模組載入,所以不用在配置中做修改,即為/usr/local/apache2/conf/httpd.conf檔案中的如下指令:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

2.配置虛擬主機proxyblancer

在/usr/local/apache2/conf/httpd.conf尾部新增Include conf/app1.conf

          在conf/app1.conf 中新增以下內容:

Listen 8051
<VirtualHost *:8051>

ServerAdmin angel.zhu@99bill.com# 指定伺服器管理員的E-MAIL地址,伺服器自動將錯誤報告給該地址

ServerName  localhost # web客戶端搜尋的主機名

ErrorLog    "/opt/apache_log/app1_error.log"

CustomLog   "/opt/apache_log/app1_access.log" common

ProxyPass /   balancer://cluster/  stickysession=JSESSIONID|jsessionid nofailover=On lbmethod=byrequests timeout=5 maxattempts=3

# balancer: 複製會話的方式,包括JSESSIONIDPHPSESSIONID nofailover:on 表示會話在worker出錯或停掉時會中斷當後端伺服器不支援會話複製時設為on ; lbmethod:選擇負載的排程演算法,預設byrequests表示輪詢排程(就是1:1),bytraffic表示加權重的排程,需加loadfactor指定權重值。

ProxyPassReverse / balancer://cluster/ #此指令使Apache調整HTTP重定向應答中Location, Content-Location, URI頭裡的URL。這樣可以避免在Apache作為反向代理使用時,後端伺服器的HTTP重定向造成的繞過反向代理的問題。

#The ProxyRequests directive should usually be set off when using ProxyPass.

ProxyRequests Off不允許作為正向代理

ProxyPreserveHost On# 當啟用時,此選項將把傳入請求的"Host:"行傳遞給被代理的主機,而不是傳遞在ProxyPass中指定的主機名。

<proxy balancer://cluster>

BalancerMember ajp://192.168.55.229:8009 route=tomcat_a

BalancerMember ajp://192.168.55.231:8009 route=tomcat_b

# rout 值附加在session ID 後面

</proxy>

</VirtualHost>

此時訪問http://192.168.50.50:8051,就出現了tom貓,說明apache已經來自8051埠的訪問定向到tomcat伺服器上。可是現在並看不出來是哪一臺tomcat伺服器,下面在兩臺tomcat中加入測試頁面使效果更明顯

2.在tomcat_a上面新增檔案/usr/local/apache-tomcat-6.0.30/webapps/ROOT/test.jsp,內容為<font color=red>aaaaaaaaaaaaaaaaaa</font><b>

 

另一臺tomcat_b上面新增檔案:

/usr/local/apache-tomcat-6.0.30/webapps/ROOT/test.jsp,內容為

<font color=blue>bbbbbbbbbbbbbbbbb</font><b>

 

3.分別修改server.xml檔案    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat_a">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat_b">

另: 如果是jetty應用的話,就修改$jetty_home/etc/jetty.xml

 <!-- =========================================================== -->

    <Set name="sessionIdManager">

      <New class="org.mortbay.jetty.servlet.HashSessionIdManager">

        <Set name="workerName"> tomcat_a </Set>

      </New>

    </Set>

 

此時在問http://192.168.50.50:8080 /test.jsp,就會交替出現aaaaaaaaaaaaaaaaaa和bbbbbbbbbbbbbbbbb ,則表明測試成功。

二(2):mod_jk負載均衡配置

1.       由於mod_jk 為第三方模組,需要到tomcat官網下載,url為http://mirror.bjtu.edu.cn/apache//tomcat/tomcat-connectors/jk/source/jk-1.2.31/tomcat-connectors-1.2.31-src.tar.gz 。

2.       在Apache  Server 上將jk 模組編譯進apache中:

  # tar  xvfz  tomcat-connectors-1.2.31-src.tar.gz

 

#  cd  tomcat-connectors-1.2.31-src/native/

 

./configure --with-apxs=/usr/local/apache2/bin/apxs --with-Java-home=/usr/local/jdk

make && make install

 

此時在/usr/local/apache2/modules 下會出現一個mod_jk.so,則已編譯成功。

3.       配置apache 的配置檔案

1  vi  vi /usr/local/apache2/conf/httpd.conf   新增以下內容:

LoadModule jk_module modules/mod_jk.so

 

<IfModule jk_module>

JkWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel warn

</IfModule>

 

Include conf/app2.conf

       2 建立並配置app2.conf檔案

          

Listen 8052

<VirtualHost *:8052>

DocumentRoot "/usr/local/apache2/htdocs"

ServerName localhost

ServerAdmin app2.Admin@99bill.com

ErrorLog "/usr/local/apache2/logs/app2 error_log”

TransferLog "/usr/local/apache2/logs/app2 access_log"

JkMount /* tomcatbalancer

</VirtualHost>

       3 建立並配置workers.properties檔案

worker 是一個Tomcat 例項 ,用來處理從web server 來的servlet 請求,可以一個worker 或 多個worker,來實現載入平衡或網站分割槽。 每個worker 都向web server 註冊其主機的ip 地址,埠號和通訊協議。

 

vi /usr/local/apache2/conf/workers.properties,新增以下內容:

      

worker.list=tomcattest1

worker.tomcattest1.port=8009

worker.tomcattest1.host=192.168.55.229

worker.tomcattest1.type=ajp13

worker.tomcattest1.lbfactor=2

 

worker.list=tomcattest2

worker.tomcattest2.port=8009

worker.tomcattest2.host=192.168.55.231

worker.tomcattest2.type=ajp13

worker.tomcattest2.lbfactor=1

 

worker.list=tomcatbalancer

worker.tomcatbalancer.type=lb

worker.tomcatbalancer.balance_workers=tomcattest1,tomcattest2

 

 

1.     分別修改server.xml檔案    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat_a">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat_b">

另: 如果是jetty應用的話,就修改$jetty_home/etc/jetty.xml

 <!-- =========================================================== -->

    <Set name="sessionIdManager">

      <New class="org.mortbay.jetty.servlet.HashSessionIdManager">

        <Set name="workerName"> tomcat_a </Set>

      </New>

    </Set>

 

5         測試:

此時在問http://192.168.50.50:8052/test.jsp,就會交替出現aaaaaaaaaaaaaaaaaa和bbbbbbbbbbbbbbbbb ,並且bbbbbbbbbbbbbbbbb出現的平均次數是的2倍,這是因為worker.tomcattest2.lbfactor=1

worker.tomcattest1.lbfactor=2 權重的設定

http://blog.csdn.net/zhuying_linux/article/details/6587814

相關文章