论坛首页 Java企业应用论坛

apache+tomcat配置

浏览 7148 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-28  
我开始的目的是 提高网站的访问速度
由于网站用的是TOMCAT  所以开始的目标错误了 本来以为用apache+tomcat集群能大幅度提高性能
不过后面才知道 原来只是提高了稳定性
(不过在访问量很大的时候 优势还是很明显的。用集群系统通过功能整合和故障过渡技术实现系统的高可用性和高可靠性,集群技术还能够提供相对低廉的总体拥有成本和强大灵活的系统扩充能力。)

所谓负载均衡(loadbalance)所指的是,将请求按照多个服务器不同的负载能力,把这些请求合理的分配。
(负载均衡是一种策略,它能让多台服务器或多条链路共同承担一些繁重的计算或I/O任务,从而以较低成本消除网络瓶颈,提高网络的灵活性和可靠性。)

呵呵 出发点 错误  

下面说说集成方法 

还好网上关于集成的文章很多  大部分都一样 我一般不看官方文档 (1.英语不是很好,看起来费力,正在改进中2.版本问题,一不小心看了旧的文档 那就 晕了)
Apache Module mod_proxy 英文文档地址(http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass)
中文文档地址
(http://shiningray.cn/proxypass-directive-in-apache.html)
首先 实现负载均衡的方式

听说有3种
1使用DNS轮询.2.使用Apache R-proxy方式。3.使用Apache mod_jk方式.
DNS没搞过。 Apache R-proxy方式和Apache mod_jk方式.效果差不多 但是mod_jk已经停止开发了
所以没用那个(用mod_jk需要下载mod_jk.so) 但是mod_jk的可配置性高于R-proxy


2 ,实现负载均衡的策略

听说也有3种
1) 轮询均衡策略的配置
2) 按权重分配均衡策略的配置
3) 权重请求响应负载均衡策略的配置

前两种 就是看 loadfactor=1 的设置 

第三种 在ProxyPass / balancer://proxy/ lbmethod=bytraffic 中
lbmethod=bytraffic  可以是byrequests,进行加权请求计数,或者是bytraffic,进行加权流量字节计数均衡。默认按byrequests,

3,负载均衡配置
我用的是proxy
我配置的版本是ApacheHTTPServerV2·2·4
              apache-tomcat-6.0
              JDK1.6
   3.1  apache的配置  找到 conf/httpd.conf

将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
文件前的注释去掉

DocumentRoot "D:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps"//将apache的站点目录htdocs转移到tomcat目录

修改
<IfModule dir_module>
    DirectoryIndex index.htm index.html index.jsp
</IfModule>
加入index.jsp
在最后加入
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from all
</Location>
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from all
</Location>

ProxyRequests Off

ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID  nofailover=Off
ProxyPassReverse / balancer://tomcatcluster/ 


#loadfactor=1
<Proxy balancer://tomcatcluster>
BalancerMember ajp://localhost:8009  route=jvm1 
BalancerMember ajp://localhost:8109 smax=10 route=jvm2
</Proxy>

  3.2修改tomcat
找到conf/server.xml
修改server端口 <Server port="8105" shutdown="SHUTDOWN">
修改Connector端口   <Connector port="8180" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />
<Connector port="8444" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
AJP端口 <Connector port="8109" protocol="AJP/1.3" redirectPort="8444" />
将Engline 节点 修改 再加入以下内容
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
      
  
       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="4">
  <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="4002" 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" />
  <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;"/>
  <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>

        
为了时tomcat访问同一个目录 我设置了一个虚拟路径
在HOST 节点下 加入了
<Context  path="/test"   docBase="D:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/test"  
                  debug="0"   privileged="true" reloadable="true">  
    <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_mysite_log." 
    suffix=".txt"  timestamp="true"/>  
</Context>

这里只是利用apache反向代理 等集群
当然,负载均衡技术绝不仅仅只是以上这些(大型的网络一般都是由大量专用技术设备组成的,如包括防火墙、路由器、第3、4层交换机、负载均衡设备、缓冲服务器和Web服务器等。由于第四层交换基于硬件芯片,因此其性能非常优秀,尤其是对于网络传输速度和交换速度远远超过普通的数据包转发。然而,正因为它是使用硬件实现的,因此也不够灵活,仅仅能够处理几种最标准的应用协议的负载均衡,如HTTP 。当前负载均衡主要用于解决服务器的处理能力不足的问题,因此并不能充分发挥交换机带来的高网络带宽的优点。)
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics