`
lirenjuan
  • 浏览: 68518 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Apache,Tomcat集群和负载均衡

阅读更多

1.环境说明
操作系统:Windows XP
JDK:jdk1.6.0_16,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 。
Apache :httpd-2.2.17 (一个),下载地址:http://httpd.apache.org/ 。
Tomcat:tomcat-7.0.2 (两个),下载地址:http://tomcat.apache.org/download-70.cgi 。
mod_jk:mod_jk-apache-2.0.55.so  (1个),下载地址:http://tomcat.apache.org/download-70.cgi 。


2. 负载均衡
负载均衡,就是apache将客户请求均衡的分给tomcat1,tomcat2....去处理。
1.1. Apache配置:
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 status_module modules/mod_status.so
LoadModule proxy_http_module modules/mod_proxy_http.so

# 加载 mod_jk 模块
LoadModule jk_module modules/mod_jk.so
# Configure mod_jk
JkWorkersFile conf/workers.properties

# mod_jk 日志配置
JkLogFile logs/mod_jk.log
JKLogLevel info
JKLogStampFormat "[%a % b %d %H:%M:%S:Y]"
JKRequestLogFormat "%w %V %T"
JKMount /* lbworker
JKMount /balancer-manager/* statusworker

# 访问负载平衡管理器页面
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Location>

# 配置需要负载平衡的tomcat群
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8009/
BalancerMember http://127.0.0.1:8010/ loadfactor=2
</Proxy>

# 配置需要tomcat群处理请求的URL
ProxyPass /servlet/* balancer://mycluster/stickysession=jsessionid nofailover=Off
ProxyPassReverse / balancer://mycluster/
截图如下所示:

2. 在http.conf同目录下新建 workers.properties文件,内容如下:
worker.list=lbworker,statusworker

#========worker1 在tomcat1下server.xml配置========
worker.worker1.type=ajp13     
worker.worker1.host=127.0.0.1   #tomcat的主机地址,如不为本机,请填写ip地址
worker.worker1.port=8009       #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.worker1.lbfactor=1       #server的加权比重,值越高,分得的请求越多

#========worker2 在tomcat2下server.xml配置========
worker.worker2.type=ajp13
worker.worker2.host=127.0.0.1   #tomcat的主机地址,如不为本机,请填写ip地址
worker.worker2.port=8010       #ajp13 端口号,在tomcat下server.xml配置,默认8010
worker.worker2.lbfactor=1       #server的加权比重,值越高,分得的请求越多

#========controller,负载均衡控制器========
worker.lbworker.type=lb
worker.lbworker.balance_workers=worker1,worker2
worker.lbworker.sticky_session=FALSE   #粘性会话设置
worker.statusworker.type=status

1.2. Tomcat配置:
注:如果您在不同电脑上安装tomcat,tomcat的安装数量只为一个,可以不必修改tomcat配置文件。
我是在一台电脑上上安装了两个tomcat,所以需要更改其中一个的设置。
打开tomcat1/conf/server.xml文件:
找到:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
将8080修改成8081,可改可不改,为了标记所以我改了。

找到:<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
将jvmRoute参数值修改成:worker1(tomcat1的别名)。

打开tomcat2/conf/server.xml文件:
找到:<Server port="8005" shutdown="SHUTDOWN">
将8005修改成8006,因为8005已让tomcat1占用了。

找到:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
将8080修改成8082,如果tomcat1没改8080端口,这里会冲突。

找到:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
将8009修改成8010,因为8009已让tomcat1占用了。

找到:<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
将jvmRoute参数值修改成:worker2(tomcat2的别名)。

3. Tomcat集群配置,进行全局的Session复制
修改2个节点的server.xml文件。
1. 找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>,去掉该行上下的<!-- -->注释。使用默认的配置,会调用DeltaManager 进行Session复制,该类会将任何一个节点中添加的Session,同步复制到集群中其他的节点上。针对少量节点的集群,可以直接使用默认配置。
注:官网的集群的详细配置代码如下:
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="6">

          <!--<Manager className="org.apache.catalina.ha.session.BackupManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"
                   mapSendOptions="6"/>-->
         
          <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="5000"
                      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;"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

需要去掉:
          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>
注:如果加上该部分配置,会出现:严重: FarmWarDeployer can only work as host cluster subelement! 错误。

2. 修改需要Session复制的应用中WEB-INF/web.xml文件,在文件中的<web-app>标签中增加:<distributable/>在应用的web.xml中增加上述配置后,就表示该应用需要进行Session复制。

3. 配置Tomcat集群后,需要注意workers.properties中的sticky_session属性配置:
worker.router.sticky_session=True,当该属性值=True(或1)时,代表Session是粘性的,即同一Session在集群中的同一个节点上处理,Session不跨越节点。在集群环境中,一般将该值设置为False。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics