Apache2.2.4 + Tomcat7集群配置-阿里云开发者社区

开发者社区> 开发与运维> 正文

Apache2.2.4 + Tomcat7集群配置

简介: apache服务器和tomcat的连接方法其实有三种:mod_JK、http_proxy和ajp_proxy。 采用ajp代理模式配置Apache+tomcat实现负载均衡(从2.X以后apache自身已集成了mod_jk.so的功能) 使用这种协议,具有更高的性能,因为它采用的是二进制传输。比HTTP的文本传输要有更高的效率。在Apache中要使用mod_proxy和mod_prox
apache服务器和tomcat的连接方法其实有三种:mod_JK、http_proxy和ajp_proxy。

采用ajp代理模式配置Apache+tomcat实现负载均衡(从2.X以后apache自身已集成了mod_jk.so的功能)

使用这种协议,具有更高的性能,因为它采用的是二进制传输。比HTTP的文本传输要有更高的效率。在Apache中要使用mod_proxy和mod_proxy_ajp,在Tomcat中则要开启ajp服务。

APAHCE 2.2.4下载地址  
http://archive.apache.org/dist/httpd/binaries/win32/apache_2.2.4-win32-x86-no_ssl.msi


安装后配置
1.httpd.conf配置
将下面的内容去掉注释:(其实注释掉前面三行也就行了,因为采用的是ajp代理)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule status_module modules/mod_status.so
LoadModule info_module modules/mod_info.so //这两个是集群监控用的


 再找到<IfModule dir_module></IfModule>加上index.jsp修改成
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>

找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符。


apache监控必须在负载均衡之前配置
#过滤server-stauts监控页面
ProxyPass /server-status !
#过滤balancer-manager监控页面
ProxyPass /balancer-manager  !

<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Location>

<Location /balancer-manager >
    SetHandler balancer-manager
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>




负载均衡实现:

在httpd.conf 最下面加入,ProxyRequests Off 是告诉Apache需要使用反向代理
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8109 loadfactor=1 route=jvm1
BalancerMember ajp://127.0.0.1:8209 loadfactor=1 route=jvm2
</proxy>





配置虚拟主机
修改conf/extra/httpd-vhosts.conf文件



在文件最下面加入  删除其他无用的<VirtualHost>
<VirtualHost *:80>
         ServerAdmin 934033381@qq.com
         ServerName localhost
         ServerAlias localhost
         ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On    #重定向
         ProxyPassReverse / balancer://cluster/                                   #反向代理
</VirtualHost>

注:
session replication  会话复制

session共享,多个服务器session拷贝保存,一台宕机不会影响用户的登录状态;

session sticky  会话不复制  

即当前用户的请求都集中定位到一台服务器中,这样单台服务器保存了用户的session登录信息,如果宕机,则等同于单点部署,会丢失;


nofailover (无故障切换) 默认值off
如果设为‘On’,当工作单元被禁用或者出错时,会话则立即中断。可以将该值设为On,如果后端服务器不支持会话复制(Session replication)。



配置tomcat
我们需要在一台机器上跑2个不同的tomcat ,需要修改不同的tomcat的关闭口,避免出现端口被占用的情况
分别为
1.配置关闭端口
<Server port="8105" shutdown="SHUTDOWN">
<Server port="8205" shutdown="SHUTDOWN">

2.配置 Engine
把原来的配置注释掉
<!--   <Engine name="Catalina" defaultHost="localhost"> -->

<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">         


3.配置Connector的端口
  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443"   URIEncoding="UTF-8"/>
  <Connector port="9080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443"   URIEncoding="UTF-8"/>

4.配置 AJP 1.3 Connector
<Connector port="8109" protocol="AJP/1.3" redirectPort="443" />

<Connector port="8209" protocol="AJP/1.3" redirectPort="443" />


5.配置Cluster(每个tomcat中都要修改,这里的配置是为了可以在集群中的所有tomcat节点间共享会话(Session))

  <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    -->


修改为
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"
  mapSendOptions="6"/>
<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="5001"  selectorTimeout="100"
  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"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<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.ClusterSessionListener"/>
</Cluster>


项目的web.xml文件中<web-app>节点下添加 <distributable/>
主要是添加<distributable/>,distributable元素用来告诉servlet容器,程序将部署在分布式Web容器中

最后启动apache ,tomcat1 ,tomcat2
删除环境变量中的CATALINA_HOME=D:\Program Files\apache-tomcat-7.0.62,
不然多个tomcat在同一台机器上使用的是同一个配置文件,端口冲突无法启动

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章