apache_2.2.4+tomcat6 集群和负载均衡
名词解释:
Apache:apache是web服务器,tomcat是应用服务器,是一个servlet容器,是apache的扩展。Apache和tomcat都可以作为独立的web服务器运行,但是apache不能运行java程序。Apache是普通的服务器,本身只支持html静态页面。但是可以通过插件支持php,还可以与tomcat连通,既单向apache连接tomcat,通过apache访问tomcat资源。Apache和tomcat是独立的,但是可以集成。 当两者整合使用的时候,如果客户端请求的是静态页面,则只需要apache服务器响应请求,如果客户端请求动态页面,则apache服务器响应请求。
Mod_jk:也叫JK,是apache用来连接后台tomcat的模块,支持集群和负载均衡。
Ajp:是定向包协议。采用二进制格式来传输可读性文本。Web服务器(apache)通过tcp连接和servlet容器(tomcat)连接。为了减少生成的socket开销,web服务器和servlet容器之间尝试保持持久性tcp连接,即多个请求回复重用一个连接,这些请求完成之前,其他请求不能使用该连接
配置软件
Apache 2.2.4 1个
Tomcat6 2个
mod_jk-1.2.26-httpd-2.2.4.so 用来连接apache和tomcat的
安装 apache 2.2.4
配置 tomcat (tomcat1,tomcat2)
打开tomcat/conf/server.xml
1、
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatX">
Engine 节点增加节点标示 jvmRoute,参与的负载均衡的tomcat的此处jvmRoute设置不可以相同。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
参与负载均衡的 tomcat,此处HostName值必须相同。
tomcat 的session复用
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<!-- timeout="60000"-->
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
这两处的注释去除。
端口设置
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
三处的port,参与集群的tomcat不能设置相同。需要分别设置不同。其中<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 的port 在后面apache的请求分发配置中需要用到。
配置apache
将mod_jk-1.2.26-httpd-2.2.4.so 放入 apache/modules
修改httpd.conf文件
找到
<IfModule dir_module>
DirectoryIndex login.html
</IfModule>
此处修改默认目录文件,你可以根据需要修改
在httpd.conf末尾 增加如下内容
LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile conf/workers.properties
JkMount /* lbcontroller
这些是tomcat集群,负载均衡配置部分 JkMount /* lbcontroller 是指定分配给tomcat的请求。
Conf中创建workers.properties文件 此文件用于配置apache和tomcat的集成要用到的tomcat实例和负载均衡分发控制器。
比如
#分发控制器,lbcontroller值对应conf/httpd.conf中的JkMount /* lbcontroller
worker.list=lbcontroller
######Tomcat1实例配置#####
#tomcat1,对应tomcat的server.xml 中<Engine name="tomcat1" defaultHost="localhost" jvmRoute="tomcat1">的jvmRoute值
#host值对应server.xml中的<Host name="localhost" appBase="webapps">以及hosts文件中的值
worker.tomcat1.host=localhost
#port值对应server.xml中的节点<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
worker.tomcat1.port=8009
worker.tomcat1.type=ajp13
#分发权重,值越大负载越大
worker.tomcat1.lbfactor=1
#Tomcat2实例配置
worker.tomcat2.host=localhost
worker.tomcat2.port=9009
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#负载均衡分发控制器
worker.lbcontroller.type=lb
worker.lbcontroller.balance_workers=tomcat1,tomcat2
worker.lbcontroller.sticky_session=false
#worker.lbcontroller.sticky_session的值
#为false时候,一个客户端连接请求,会发向不同tomcat,不同tomcat之间复用session
#为1时,则一个客户端请求只会发向一个tomcat.
四、session复制 应用程序的配置
<web-app 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" version="2.4"> <display-name>TomcatDemo</display-name> <distributable/></web-app>
Web.xml中 添加 <distributable/>
测试 session复用:
Index.jsp
name:<%=session.getAttribute("name")%>
Writer.jsp
<%
session.setAttribute("name","yuyong");
%>
第一次 http://localhost:8888/clutom/index.jsp 打印name:null
执行 http://locahost:9090/clustom/writer.jsp 再次执行http://localhost:8888/clutom/index.jsp 打印 name:yuyong 。测试成功,实现了session复用
测试tomcat负载均衡
Index.jsp
<%
System.out.println("request....")
%>
浏览器http://localhost/clutom/
Tomcat1的控制台打印了一句request.... 再次刷新 tomcat2打印了request....
再次刷新又是tomcat1打印了。。如此。。。说明每次请求,分别请求了不同的tomcat。
apache-tomat负载均衡和集成
猜你喜欢
转载自leoyy.iteye.com/blog/1544522
今日推荐
周排行