1. 程式人生 > 實用技巧 >Apache+Tomcat實現負載均衡

Apache+Tomcat實現負載均衡

一、規劃

前端Apache:192.168.10.135

後端tomcat:192.168.10.132

192.168.10.133


二、配置Tomcat

①配置server.xml

12345#vi/usr/local/tomcat/conf/server.xml##位於103行TomcatA:<Enginename="Catalina"defaultHost="localhost"jvmRoute="TomcatA">TomcatB:<Enginename="Catalina"defaultHost="localhost"jvmRoute="TomcatB">


②配置測試頁

123#cd/usr/local/tomcat/webapps/ROOT#mvindex.jspindex.jsp.bak#viindex.jsp

TomcatA:

123456789101112131415161718<%@pagelanguage="java"%><html><head><title>TomcatA</title></head><body><h1><fontcolor="green">TomcatA</font></h1><tablealign="centre"border="1"><tr><td>SessionID</td><%session.setAttribute("abc","abc");%><td><%=session.getId()%></td></tr><tr><td>Createdon</td><td><%=session.getCreationTime()%></td></tr></table></body></html>

TomcatB:

123456789101112131415161718<%@pagelanguage="java"%><html><head><title>TomcatB</title></head><body><h1><fontcolor="yellow">TomcatB</font></h1><tablealign="centre"border="1"><tr><td>SessionID</td><%session.setAttribute("abc","abc");%><td><%=session.getId()%></td></tr><tr><td>Createdon</td><td><%=session.getCreationTime()%></td></tr></table></body></html>


三、基於mod_jk實現

①配置mod_jk配置檔案

123456789#vi/etc/httpd/conf/mod_jk.confJkWorkersFile/etc/httpd/conf/workers.properties##指出mod_jk工作所需檔案位置JkLogFilelogs/mod_jk.log##指定日誌輸出檔案位置JkLogLeveldebug##指定日誌級別JkLogStampFormat"[%a%b%d%H:%M:%S%Y]"JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectoriesJkRequestLogFormat"%w%V%T"JkMount/*lbcluster1##指定負載均衡器名稱JkMount/status/stat1##指定狀態資訊


②配置worker.properties

123456789101112131415161718192021222324#vi/etc/httpd/conf/workers.properties#workers列表worker.list=lbcluster1,stat1#-------------------------------------------------#tomcat例項1#-------------------------------------------------worker.TomcatA.type=ajp13##定向包協議worker.TomcatA.host=192.168.10.132##tomcat主機地址worker.TomcatA.port=8009##TomcatA例項埠worker.TomcatA.lbfactor=1##負載均衡權重為1#-------------------------------------------------#tomcat例項2#-------------------------------------------------worker.TomcatB.type=ajp13worker.TomcatB.host=192.168.10.133worker.TomcatB.port=8009worker.TomcatB.lbfactor=1#-------------------------------------------------#loadbalancerworker--負載均衡控制器#------------------------------------------------worker.lbcluster1.type=lb##負載均衡work,lb內建類worker.lbcluster1.sticky_session=0##會話是否繫結worker.lbcluster1.balance_workers=TomcatA,TomcatB##指定叢集擁有例項worker.stat1.type=status##狀態資訊


③配置httpd

123#vi/etc/httpd/conf/httpd.confLoadModulejk_modulemodules/mod_jk.so##載入mod_jk模組Include/etc/httpd/conf/mod_jk.conf##指定mod_jk配置檔案


④測試

輸入前端Apache地址檢視

wKiom1ZdOcOjDIokAABAAvfnK0g188.png

重新整理後繼續檢視

wKioL1ZdOn3wA8b5AAA9Fe3hO0I996.png

前端輸入http://localhost/status/檢視叢集狀態

wKiom1ZdO0uw0VG-AADo26b4w50081.png


⑤實現會話複製

a.在 <Engine>或 <Host>元素節點下新增以下內容:

12345678910111213141516171819202122232425262728293031323334#vi/usr/local/tomcat/conf/server.xml<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"channelSendOptions="8"><ManagerclassName="org.apache.catalina.ha.session.DeltaManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="true"/><ChannelclassName="org.apache.catalina.tribes.group.GroupChannel"><MembershipclassName="org.apache.catalina.tribes.membership.McastService"address="228.0.0.4"port="45564"frequency="500"dropTime="3000"/><ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"address="auto"port="4000"autoBind="100"selectorTimeout="5000"maxThreads="6"/><SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter"><TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/></Sender><InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/><InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/></Channel><ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/><ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/><DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/"watchEnabled="false"/><ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/></Cluster>



b.在啟用叢集功能的web應用程式的web.xml中新增<distributable/>以實現叢集功能

12345678#vi/usr/local/tomcat/conf/web.xml<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><distributable/>#cp/usr/local/tomcat/conf/web.xml/usr/local/tomcat/webapps/ROOT/WEB-INF/

詳情:http://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html


c.測試

輸入前端Apache地址檢視

wKiom1ZdQTnRlDV3AAA8pASSL6Q252.png

重新整理後繼續檢視

wKioL1ZdQd7z5XdyAAA7hZX59Tg745.png

TomcatA和TomcatB已經實現了會話共享



四、基於mod_proxy實現

①檢視相關代理模組是否裝載(其中balancer為叢集實現模組)

1234567891011#httpd-DDUMP_MODULES|grepproxyproxy_module(shared)proxy_ajp_module(shared)proxy_balancer_module(shared)proxy_connect_module(shared)proxy_express_module(shared)proxy_fcgi_module(shared)proxy_fdpass_module(shared)proxy_ftp_module(shared)proxy_http_module(shared)proxy_scgi_module(shared)

②配置httpd

12345678910111213#vi/etc/httpd/conf/httpd.conf<VirtualHost*:80>ServerAdminlocalhostServerNamelocalhostProxyPass/balancer://cluster1/stickysession=jsessionidProxyPa***everse/balancer://cluster1/</VirtualHost>ProxyRequestsOff<proxybalancer://cluster1>BalancerMemberajp://192.168.10.132:8009loadfactor=1route=TomcatABalancerMemberajp://192.168.10.133:8009loadfactor=1route=TomcatBProxySetlbmethod=bytraffic</Proxy>

注:

ProxySet lbmethod={byrequests|bytraffic|bybusyness}:負載均衡的實現方式

byrequests:按照請求次數負載均衡(預設)

bytraffic:按照流量負載均衡

bybusyness:安裝繁忙程度負載均衡(總是分配給活躍請求數最少的伺服器)


③測試

輸入TomcatA地址檢視:

wKiom1ZcAKqBLZ2UAABMw_G486o846.png

輸入TomcatB地址檢視:

wKioL1ZcAtqzasDDAABINR85g5A444.png

輸入前端Apache地址檢視:

wKioL1ZcAyvgB05RAABVAZUc8xQ510.png

重新整理繼續檢視:

wKiom1ZcAxTxnqZ6AABRKV1Eb6U541.png



本文出自 “記事本” 部落格,請務必保留此出處http://wangzhijian.blog.51cto.com/6427016/1718502


轉載於:https://blog.51cto.com/lucifer119/1732365