環境拓撲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
二、 使用httpd的mod_proxy_http模塊,實現Tomcat負載均衡;web
三、 使用httpd的mod_proxy_ajp模塊,實現Tomcat負載均衡;apache
四、 使用httpd的mod_jk模塊,實現Tomcat的服務均衡。vim
四種反代+負載均衡都是使用此Tomcat部署。後端
安裝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應用程序正常
除了提供的測試頁面不一樣以外,其餘設置過程都同樣
[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
[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服務器,而且實現負載均衡
動靜分離設置方法:只須要將jsp和do結尾的文件轉發到後端Tomcat服務器便可
location ~* \.(jsp|do)$ { proxy_passhttp://tomcat_host:port; }
設置nginx設置完成以後,記得關閉nginx服務,以避免影響下面的httpd測試
修改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,端口爲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依賴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,或者不設置表示開啓綁定
訪問測試便可實現負載均衡功能
訪問狀態頁面也正常