tomcat+apache+mod_proxy代理模式配置集群

丌官炎彬
2023-12-01

偶尔接触了一下集群,感觉挺有用的。试着配置了一下,过程中遇到了有些问题,总结一下,以备以后参考。

1.配置环境

JDK1.6,Tomcat6.0,Apache2.2这些基本安装就一笔带过了

2.测试安装情况

Jdk验证   cmd中查看jdk版本java -version   jdk1.6.45

tomcat    登录http://localhost:8080   看到小猫

apache   登录http://localhost/           看到It Works!

Ok ,All right.

3.配置文件的修改

    1).Apache配置文件

       a.${apache_home}/conf/httpd.conf

            Listen 80             ------>          Listen 127.0.0.1:80  #这个不一定需要

              添加index.jsp到以下代码:

           <IfModule dir_module>
                    DirectoryIndex index.html 
           </IfModule>

           改为:

          <IfModule dir_module>
               DirectoryIndex index.html index.jsp
          </IfModule>

             将一下代码从注释状态释放出来

             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_ftp_module modules/mod_proxy_ftp.so
             LoadModule proxy_http_module modules/mod_proxy_http.so
             LoadModule proxy_scgi_module modules/mod_proxy_scgi.so

            

             Include conf/extra/httpd-vhosts.conf  #虚拟主机配置

              文件末尾添加一下代码:

            ProxyRequests Off  #关闭正向代理
            <proxy balancer://cluster>
                   BalancerMember ajp://192.168.0.111:8009 loadfactor=1 route=jvm1  #ajp是apache和Tomcat的通信协议,端口号要和toamcat配置一直,开始的时候将ajp写成了http造成一直调试不通,页面报503错误
                   BalancerMember ajp://192.168.0.111:9009 loadfactor=1 route=jvm2 
             </proxy>

          注意:修改了以上文件保存,保存文件后一定需要重启服务,就是在控制面板--》管理工具-->组件服务--》服务 或直接从apache控制面板中的service中启动,重启服务很重要,因为修改后没有重启服务,白白浪费了2个小时在调试上面。

 

         b.${apache_home}/conf/extra/httpd_vhosts.conf

         添加以下代码:

         <VirtualHost *:80>
                ServerAdmin zfy1355
@gmail.com
                ServerName 192.168.0.111     #本机Ip,刚开始使用127.0.0.1不知道什么原因没有成功,就没有再调试,或许是没有重启服务吧,呵呵
                ServerAlias localhost
                ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On    #有说
                ProxyPassReverse / balancer://cluster/     #代理反转
                ErrorLog "logs/error.log"                            #错误日志
                CustomLog "logs/access.log" common     #登录日志
        </VirtualHost>

    2)Tomcat配置

    需要打开server.xml

    两台Pc情况:

    <Engine name="Catalina" defaultHost="localhost">  --》<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">  

    上面的jvmRoute要和httpd.conf配置的一致。

 

     添加以下集群广播代码,以便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"/>

            <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=""/>
          <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的doc中找到。

       同一台Pc两只小猫

       除了上述修改的位置,还要修改端口。因为是同一台机器,所以不能使用同样的port,在第二只猫的

       <Server port="8005" shutdown="SHUTDOWN">   

       <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

       <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

      三个位置修改port,笔者分别改为9005,9080,9009。

      有朋友说需要修改下面代码中的port,且port值范围为4001-4009,笔者没有修改,Tomcat启动时自动获取了port值
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4000"         
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

      3)Tomcat的web.xml

       在每只小猫的web.xml中加入以下代码,方便session共享:

        <distributable/>      <!--位置在</web-app>里面就可以-->

     到此就算配置好了。

 

4.验证

经过以上的配置,集群就算是搭建起来了,启动tomcat,apache服务器,地址栏输入http://localhost/    是否看到小猫了,看到了证明就是Ok了。

为了证明集群的负载均衡,在Tomcat webapps/examples/目录下生成pressTest.jsp

pressTest.jsp   内容:<%System.out.println("You  are  Visiting Tomcat  X“);%>

  X为Tomcat的区别数字

使用apache 的压力测试命令ab -n1000 -c10 http://localhost/examples/pressTest.jsp     //-n1000访问1000次      -c10并发10

看两个小猫的控制台,分别打印了各自的输出。

 

收工,继续学习。

 

 

          

 类似资料: