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地址檢視
重新整理後繼續檢視
前端輸入http://localhost/status/檢視叢集狀態
⑤實現會話複製
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地址檢視
重新整理後繼續檢視
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地址檢視:
輸入TomcatB地址檢視:
輸入前端Apache地址檢視:
重新整理繼續檢視:
本文出自 “記事本” 部落格,請務必保留此出處http://wangzhijian.blog.51cto.com/6427016/1718502
轉載於:https://blog.51cto.com/lucifer119/1732365