Tomcat反向代理+負載均衡的四種方法配置

環境拓撲html

環境說明:前端


IP地址
功能描述
nginx or httpd
172.16.4.100
代理服務器,將用戶請求分發到後端的Tomcat服務器實現反向代理和負載均衡
Tomcat-01
172.16.4.101
後端實際提供服務的服務器
Tomcat-02
172.16.4.102
後端實際提供服務的服務器

系統環境都以下所示:
java

[root@nginx ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@bogon ~]# uname -rm
2.6.32-504.el6.x86_64 x86_64


此文章一共有四個實驗:linux

一、         使用nginx服務器實現反向代理Tomcat並實現負載均衡;nginx

二、         使用httpdmod_proxy_http模塊,實現Tomcat負載均衡;web

三、         使用httpdmod_proxy_ajp模塊,實現Tomcat負載均衡;apache

四、         使用httpdmod_jk模塊,實現Tomcat的服務均衡。vim


後端Tomcat配置

四種反代+負載均衡都是使用此Tomcat部署。後端

Tomcat-01部署

安裝jdktomcat

[root@tomcat-1 ~]# rpm -ivh jdk-7u67-linux-x64.rpm

設置Java的環境變量

[root@tomcat-1 ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest   #設置家目錄
export PATH=$JAVA_HOME/bin:$PATH    #設置命令路徑
[root@tomcat-1 ~]# . /etc/profile.d/java.sh

使用-version輸出Java的版本號若是能夠輸出那麼表示Java環境部署ok

[root@tomcat-1 ~]# java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04,mixed mode)

安裝tomcat,並添加一個應用程序實例

[root@tomcat-1 ~]#tar xf apache-tomcat-8.0.23.tar.gz -C /usr/local/
[root@tomcat-1 ~]#cd /usr/local/
[root@tomcat-1 local]# ln -s apache-tomcat-8.0.23/tomcat
[root@tomcat-1 local]# cd tomcat/
[root@tomcat-1 tomcat]# mkdir -p/usr/local/tomcat/webapps/testapp/{WEB-INF,classes,lib,META-INF}
[root@tomcat-1 tomcat]# vim/usr/local/tomcat/webapps/testapp/index.jsp
<%@ page language="java" %>
<html>
 <head><title>TomcatA</title></head>
 <body>
   <h1><fontcolor="red">TomcatA.xmfb.com</font></h1>
    <tablealign="centre" border="1">
     <tr>
       <td>Session ID</td>
    <%session.setAttribute("xmfb.com","xmfb.com"); %>
       <td><%= session.getId() %></td>
     </tr>
     <tr>
       <td>Created on</td>
       <td><%= session.getCreationTime() %></td>
    </tr>
   </table>
 </body>
</html>

設置tomcat環境變量

[root@tomcat-1 tomcat]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
[root@tomcat-1 tomcat]# . /etc/profile.d/tomcat.sh

設置完成啓動服務

[root@tomcat-1 tomcat]# catalina.sh start

訪問testapp應用程序正常

Tomcat-02部署

除了提供的測試頁面不一樣以外,其餘設置過程都同樣

[root@tomcat-2 tomcat]# vim/usr/local/tomcat/webapps/testapp/index.jsp
<%@ page language="java" %>
<html>
 <head><title>TomcatB</title></head>
 <body>
   <h1><font color="blue">TomcatB.xmfb.com</font></h1>
    <tablealign="centre" border="1">
      <tr>
       <td>Session ID</td>
    <%session.setAttribute("xmfb.com","xmfb.com"); %>
       <td><%= session.getId() %></td>
     </tr>
     <tr>
       <td>Created on</td>
       <td><%= session.getCreationTime() %></td>
    </tr>
   </table>
  </body>
</html>

設置完成訪問結果以下

Nginx反向代理+負載均衡Tomcat

安裝nginx

[root@nginx ~]# yum -y install nginx

啓動服務

[root@nginx ~]# service nginx start

訪問nginx可否正常訪問

http字段定義upstream,設置後端Tomcat主機和端口,並設置健康狀態檢查

[root@nginx ~]# vim /etc/nginx/nginx.conf
    upstreamupservers {
      server172.16.4.101:8080 max_fails=2 fail_timeout=1;
      server172.16.4.102:8080 max_fails=2 fail_timeout=1;
}

轉發設置將訪問nginx的請求轉發至upstream

[root@nginx ~]# vim /etc/nginx/conf.d/default.conf
    location/ {
       #root   /usr/share/nginx/html;
       proxy_pass http://upservers/;
       index  index.jsp index.htmlindex.htm;
    }


設置完成以後,訪問nginx服務器的地址,就會將請求轉發到後端Tomcat服務器,而且實現負載均衡

動靜分離設置方法:只須要將jspdo結尾的文件轉發到後端Tomcat服務器便可

location ~* \.(jsp|do)$ {
    proxy_passhttp://tomcat_host:port;
}

設置nginx設置完成以後,記得關閉nginx服務,以避免影響下面的httpd測試

基於httpd實現反向代理+負載均衡

基於mod_proxy實現反向代理+負載均衡

修改httpd主配置文件註銷中心主機

[root@httpd ~]# vim /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html"

設置負載均衡相關信息

[root@httpd ~]# vim /etc/httpd/conf.d/mod_proxy.conf
<Proxy balancer://tcsrvs>                  
 BalancerMember http://172.16.4.101:8080 loadfactor=1
 BalancerMember http://172.16.4.102:8080 loadfactor=1
</Proxy>
 
NameVirtualHost *:80
 
<VirtualHost *:80>
  ServerNamewww.a.com
  ProxyVia On
 ProxyRequests Off
 ProxyPreserveHost On
  <Proxy*>
    Orderdeny,allow
    Allowfrom all
 </Proxy>
  ProxyPass/status !
  ProxyPass /balancer://tcsrvs/
 ProxyPa***everse / balancer://tcsrvs/
 <Location />
     Orderdeny,allow
     Allowfrom all
 </Location>
</VirtualHost>

設置完成以後啓動服務,訪問httpd地址就會出現負載均衡效果

 

基於ajp協議實現負載均衡

只要修改訪問後端服務器的協議爲ajp,端口爲8009便可

 [root@httpd~]# vim /etc/httpd/conf.d/mod_proxy.conf
<Proxy balancer://tcsrvs>
 BalancerMember ajp://172.16.4.101:8009 loadfactor=1
 BalancerMember ajp://172.16.4.102:8009 loadfactor=1
</Proxy>
 
NameVirtualHost *:80
 
<VirtualHost *:80>
  ServerNamewww.a.com
  ProxyVia On
 ProxyRequests Off
 ProxyPreserveHost On
  <Proxy*>
    Orderdeny,allow
    Allowfrom all
 </Proxy>
  ProxyPass/status !
  ProxyPass /balancer://tcsrvs/
 ProxyPa***everse / balancer://tcsrvs/
 <Location />
     Orderdeny,allow
     Allowfrom all
 </Location>
</VirtualHost>

設置完成重啓httpd,便可實現負載均衡效果

設置狀態頁面

 [root@httpd~]# vim /etc/httpd/conf.d/mod_proxy.conf
<Proxy balancer://tcsrvs>
 BalancerMember ajp://172.16.4.101:8009 loadfactor=1
 BalancerMember ajp://172.16.4.102:8009 loadfactor=1
</Proxy>
 
NameVirtualHost *:80
 
<VirtualHost *:80>
  ServerNamewww.a.com
  ProxyVia On
  ProxyRequests Off
 ProxyPreserveHost On
  <Proxy*>
    Orderdeny,allow
    Allowfrom all
 </Proxy>
  ProxyPass/status !
  ProxyPass/balancer-manager !
  ProxyPass /balancer://tcsrvs/
 ProxyPa***everse / balancer://tcsrvs/
 <Location />
     Orderdeny,allow
     Allowfrom all
 </Location>
 <Location /balancer-manager>
   SetHandler balancer-manager
    Proxypass!
    OrderDeny,Allow
    Allowfrom all
 </Location>
</VirtualHost>

訪問狀態頁面能夠正常訪問


基於mod_jk的負載均衡

編譯mod_jk依賴httpd的開發包

[root@httpd ~]# yum -y install httpd-devel

編譯安裝mod_jk

tar xf tomcat-connectors-1.2.40-src.tar.gz
cd tomcat-connectors-1.2.40-src/native/
whereis apxs
./configure --with-apxs=/usr/sbin/apxs
make && make install

說明:若是不知道apxs文件路徑,可使用whereis查找

[root@http native]# whereis apxs
apxs: /usr/sbin/apxs /usr/share/man/man8/apxs.8.gz

編譯完成就有以下提示

chmod 755 /usr/lib64/httpd/modules/mod_jk.so

配置負載均衡

設置tomcat路由信息

[root@tomcat-1 ~]# vim/usr/local/tomcat/conf/server.xml
   <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">
[root@tomcat-2 ~]# vim/usr/local/tomcat/conf/server.xml
   <Engine name="Catalina" defaultHost="localhost"jvmRoute="TomcatB" >

修改前端httpd配置文件,設置mod_jk相關配置

[root@http conf.d]# cat mod_jk.conf
LoadModule jk_modulemodules/mod_jk.so     
JkWorkersFile/etc/httpd/conf.d/workers.properties
JkLogFilelogs/mod_jk.log
JkLogLevelinfo
JkMount/status !
JkMount /*tcsrvs    #表示將請求轉發到tcsrvs列表
JkMount/status StatA

設置workers.properties,定義負載均衡相關信息

[root@http conf.d]# cat workers.properties
worker.list=tcsrvs,StatA       #定義tcsrvs列表
worker.TomcatB.host=172.16.4.101
worker.TomcatB.port=8009
worker.TomcatB.type=ajp13
worker.TomcatB.lbfactor=1    #設置權重
worker.TomcatA.host=172.16.4.102
worker.TomcatA.port=8009
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.StatA.type=status
worker.tcsrvs.type=lb      #代理方式爲lb,也就是負載均衡
worker.tcsrvs.balance_workers=TomcatA,TomcatB   #說明tcsrvs列表包含,tomcatA和TomcatB
worker.tcsrvs.sticky_session=0   #關閉基於session的綁定,不然會一直定位到一臺服務器,若是設置的值爲1,或者不設置表示開啓綁定

訪問測試便可實現負載均衡功能

 

訪問狀態頁面也正常


相關文章
相關標籤/搜索