一:安装下载 上apache官网下载apache最新版本的apache版本就行 这里用的是最新的apache2.4.18 解压到任意盘后在CMD中安装 比如到D:\apache\Apache24\bin下打命令 httpd -k install
之后上tomcat里下载JK JK就是tomcat给HTTP服务的应用,之后解压在D:\apache\Apache24\modules中即可
之后需要安装tomcat了 复制N份(N=你需要负载的多少)需要注意的是 tomcat 版本需要一致 不要一个是tomcat6 一个是tomcat7
二:配置
1.先配置apache配置文件 D:\apache\Apache24\conf (这是我的路径)下的httpd.conf
先在LoadModule加载最下面加上加载下载的JK LoadModule jk_module modules/mod_jk.so
之后将LoadModule rewrite_module modules/mod_rewrite.so前面#去掉。
下一步在把
<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkMount /* controller
JkLogFile logs/mod_jk.log #这条和下面这条可以取消删掉
JkLogLevel warn
</IfModule>
加到配置最下面即可
并且把apache这些配置打开
AcceptFilter http none
AcceptFilter https none
EnableSendfile Off
EnableMMAP off
2.在D:\apache\Apache24\conf 新建一个workers.properties文件
worker.list = controller
#========tomcat1========
worker.tomcat1.port=8009 #指定tomcat2服务器AJP的端口,默认为8009
worker.tomcat1.host=localhost #指定tomcat2服务器IP或域名
worker.tomcat1.type=ajp13 #指定tomcat2与apache AJP通讯协议
worker.tomcat1.lbfactor=1 #指定负载平衡因数,只有启用了负载平衡才有用.
#========tomcat2========
worker.tomcat2.port=8010
worker.tomcat2.host=172.168.1.31 #也可以用远程
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========controller负载平衡控制器========
worker.controller.type=lb #指定controller类型
worker.controller.balanced_workers=tomcat1,tomcat2 #指定负载平衡的tomcat
worker.controller.sticky_session=true #指定是否粘性session
worker.controller.sticky_session_force=false
worker.connection_pool_size=3000
worker.connection_pool_minsize=50
worker.connection_pool_timeout=50000
# session配置说明:
#当sticky_session,sticky_session_force都为true时不复制session,
#sticky_session_force=false指集群中某台服务器多次请求没有响应,则转发到其它服务器处理,
#sticky_session=false不使用粘性session,同时配置不复制session时,注意转发请求后可能会找不到原来的session.
在D:\apache\Apache24\conf 新建一个uriworkermap.properties文件
/*=controller !/*.html=controller
3.修改每个tomcat的conf/server.xml
先修改<Server port="10934" shutdown="SHUTDOWN"> shutdown的端口每一个改成不一样的 否则 tomcat不能同时开启
之后修改tomcat端口
<Connector port="10922" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8" />
使每个tomcat端口不一致并且没有占用
<Connector port="10888" protocol="AJP/1.3" redirectPort="8443" />之后把ajp端口修改成与workers中的端口一致
下一步把
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> 注释打开 把tomcat1自己的起的名填上 并且把他下面的那条注释或删除
<Engine name="Catalina" defaultHost="localhost" >
并且把下面的 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>注释打开就是可以打开简单的Tcp集群;
tomcat最后一步 在
D:\apache\apache-tomcat-11\conf\Catalina\localhost 下建立目录连接本地项目demo.xml
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="D:\apache\wx" reloadable="true" path="/wx" />
4.修改web应用里面WEB-INF目录下的web.xml文件,加入标签
<distributable/>
直接加在</web-app>之前就可以了 因为加上这个就是可分配的
之后就大功告成。
补充 session共享 在不同局域网 中apache可能也共享 可以配置tomcat下的 server.xml 中的
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" >下配置
<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="127.0.0.1"
port="4001" //每个tomcat端口不同
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<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"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*.gif|.*.js|.*.jpeg|.*.jpg|.*.png|.*.htm|.*.html|.*.css|.*.txt"/>
<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>
这样就可以解决了