apache+tomcat负载均衡以及session复制
1.tomcat的server.xml//jvmRoute 指定名字是apache认识的唯一表示 <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2"> <!-- <Engine name="Catalina" defaultHost="localhost"> --> 第二个tomcat: <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1"> jvmRoute的值将在workers.properties中体现
2.下载apache:http://archive.apache.org/dist/httpd/binaries/win32/apache_2.2.4-win32-x86-no_ssl.msi
安装如果启动不起来,点击Test Configuration看看。最有可能起不起来的80端口被占用特别是iis。
3.下载mod_jk-1.2.26-httpd-2.2.4.so :::::其实是mod_jk2.so放到apache的modules下
http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.26/
下载时主义版本2.2.4
4.配置workers.properties:
在 Apache 配置目录 Apache2.2\conf 创建 workers.properties 配置文件,该文件主要用于配置 Apache 与 Tomcat 的集成要用到的 Tomcat 实例和负载均衡分发控制器。
#配置tomcat。。tomcat1,tomcat2就是server.xml中配的jvmRoute worker.list=tomcat2,tomcat1,loadBalancer # ------------------------ # secound tomcat server # ------------------------ #端口号,是Define an AJP 1.3 Connector on port 8009的端口号,如果host相同可换掉8009 worker.tomcat2.port=8009 #服务器ip worker.tomcat2.host=192.168.1.18 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=100 # ------------------------ # First tomcat server # ------------------------ worker.tomcat1.port=8009 worker.tomcat1.host=192.168.1.29 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=100 # ------------------------ # Load Balancer worker # ------------------------ worker.loadBalancer.type=lb #也要制定tomcat worker.loadBalancer.balanced_workers=tomcat2,tomcat1 # # END workers.properties
worker.tomcat1.lbfactor=100分发权重 值越大负载越大
5.建立mod_jk2.conf文件。。在conf下
# Load mod_jk2 module #指定mod_jk-1.2.26-httpd-2.2.4.so 位置,一下改了下名字。 LoadModule jk_module modules/mod_jk2.so # Where to find workers.properties JkWorkersFile conf/workers.properties # Where to put jk logs JkLogFile logs/mod_jk2.log # Set the jk log level JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" # Send JSPs for context / to worker named loadBalancer JkMount /*.jsp loadBalancer # Load mod_jk2 module
6.配置httpd.conf
# Various default settings #Include conf/extra/httpd-default.conf # Secure (SSL/TLS) connections #Include conf/extra/httpd-ssl.conf #就是这一句话指定了配置文件位置 Include conf/mod_jk2.conf # Note: The following must must be present to support # starting without SSL on platforms with no /dev/random equivalent # but a statically compiled-in mod_ssl. # <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule>
7.测试页面
<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> <% out.println("<br> ID " + session.getId()+"<br>"); // 如果有新的 Session 属性设置 String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.print("<b>Session 列表</b>"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"<br>"); System.out.println( name + " = " + value); } %> <form action="index.jsp" method="POST"> 名称:<input type=text size=20 name="dataName"> <br> 值:<input type=text size=20 name="dataValue"> <br> <input type=submit> </form> </body> </html>
有个默认的tomcat相应
http://192.168.1.18/testtom/index.jsp
下面是每一个tomcat
http://192.168.1.29:8087/testtom/index.jsp
http://192.168.1.18:8087/testtom/index.jsp
以上就达到了负载均衡,访问http://192.168.1.18/testtom/index.jsp 当一个tomcat down掉了就由另一个工作。
一下给其加入session复制
修改server.xml
<!--默认情况下Cluster是被注销的,我们现在去掉其注销, 两个tomcat都要作此动作,其中 Receiver 的 tcpListenPort 要不同,端口是唯一的。(默认是4001) --> <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" managerClassName="org.apache.catalina.cluster.session.DeltaManager" expireSessionsOnShutdown="false" useDirtyFlag="true" notifyListenersOnReplication="true"> <Membership className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="228.0.0.4" mcastPort="45564" mcastFrequency="500" mcastDropTime="3000"/> <Receiver className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddress="auto" tcpListenPort="4002" tcpSelectorTimeout="100" tcpThreadCount="6"/> <Sender className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" replicationMode="pooled" ackTimeout="15000" waitForAck="true"/> <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/> </Cluster> <!-- -->
修改web.xml
<?xml version="1.0" encoding="utf-8"?> <web-app version="2.4" xmlns="http://JAVA.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/xmlSchema-instance" xsi:schemaLocation="http://JAVA.sun.com/xml/ns/j2ee http://JAVA.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- 只需要加入这个标签就ok了 --> <distributable/> .......其他的配置
现在都ok。
http://192.168.1.29:8087/testtom/index.jsp
http://192.168.1.18:8087/testtom/index.jsp
他们的的session是共享的
页:
[1]