首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ApacheTomcat7.0.57集群& mod_proxy / mod_proxy_ajp

ApacheTomcat7.0.57集群& mod_proxy / mod_proxy_ajp
EN

Server Fault用户
提问于 2015-01-06 02:29:19
回答 1查看 1.9K关注 0票数 0

我已经使用Apache服务器建立了Apache集群,并通过以下方式在CentOS 6.6上进行负载平衡:

  • 运行HTTP服务器的一个VM &一个Tomcat实例(用于部署,而不是响应请求)

  • 在不同端口上运行2个Tomcat实例的VM

重要的事情首先:

  • watchEnabled: on master = "true",on奴隶= "false“

  • HTTP连接器仅用于主节点,不在从节点上定义

  • 每个实例的AJP连接器端口不同

  • 每个实例上不同的用于tcpListenerPort的NioReceiver

  • jvmRoute值等于所有实例上各自的主机名。

  • 到watchDir / tempDir的路径不同,deployDir =每个实例上的webapp

  • 每个实例的关机端口不同

  • 在所有节点上关闭了firewalld/iptables (测试环境)

  • 是的,我读过很多关于这个主题的东西(官方文档,教程,等等)已经开始了。

server.xml (只是重要的部分)

代码语言:javascript
运行
复制
<Server port="8004" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <!-- HTTP connector on port 8081 -->
    <Connector 
      connectionTimeout="20000" 
      port="8081" protocol="HTTP/1.1" 
      redirectPort="8443"/>
    <!-- Define an AJP 1.3 Connector on port 8012 -->
    <Connector 
      port="8012" 
      protocol="AJP/1.3" 
      redirectPort="8443"/>
    <!-- Engine definition for clustering -->
    <Engine 
      defaultHost="localhost" 
      jvmRoute="acd10-master" 
      name="Catalina">
      <Realm className="org.apache.catalina.realm.MemoryRealm"/>
      <Host 
        appBase="webapps" 
        autoDeploy="true" 
        name="192.168.2.139" 
        undeployOldVersions="true" 
        unpackWARs="true">
        <Cluster 
          channelSendOptions="6" 
          className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 
          useDirtyFlag="true">
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership 
              address="228.0.0.4" 
              className="org.apache.catalina.tribes.membership.McastService" 
              dropTime="3000" 
              frequency="500" 
              port="45564"/>
            <Receiver 
              address="auto" 
              className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
              maxThreads="6" 
              port="4005" 
              timeout="100"/>
            <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>
          <Deployer 
            className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
            deployDir="/usr/local/tomcat7/webapps/" 
            tempDir="/usr/local/tomcat7/war-temp/" 
            watchDir="/usr/local/tomcat7/war-watch/" 
            watchEnabled="true"/>
        </Cluster>
      </Host>
    </Engine>
  </Service>
</Server>

mod_proxy.conf

代码语言:javascript
运行
复制
<VirtualHost *:80>
  DocumentRoot /var/www/html

  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  <Proxy balancer://testcluster>
    BalancerMember ajp://192.168.2.166:8010/ route=acd11-node01
    BalancerMember ajp://192.168.2.166:8011/ route=acd11-node02
    ProxySet lbmethod=byrequests
  </Proxy>

  # Exclude balancer-manager app to make it available on master
  ProxyPass /balancer-manager !

  ProxyPass / balancer://testcluster/ stickysession=JSESSIONID|jsessionid
  ProxyPassReverse / balancer://testcluster/ stickysession=JSESSIONID|jsessionid

  <Location /balancer-manager>
    SetHandler balancer-manager
  </Location>
</VirtualHost>

编辑:

Apache错误日志(启动后提供给我的内容):

代码语言:javascript
运行
复制
[Tue Jan 06 08:29:49.235859 2015] [mpm_prefork:notice] [pid 9655] AH00170: caught SIGWINCH, shutting down gracefully
[Tue Jan 06 08:29:50.306520 2015] [core:notice] [pid 9727] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Tue Jan 06 08:29:50.307867 2015] [suexec:notice] [pid 9727] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Jan 06 08:29:50.319218 2015] [so:warn] [pid 9727] AH01574: module proxy_module is already loaded, skipping
[Tue Jan 06 08:29:50.319797 2015] [so:warn] [pid 9727] AH01574: module proxy_ajp_module is already loaded, skipping
[Tue Jan 06 08:29:50.319827 2015] [so:warn] [pid 9727] AH01574: module proxy_balancer_module is already loaded, skipping
[Tue Jan 06 08:29:50.320610 2015] [so:warn] [pid 9727] AH01574: module proxy_http_module is already loaded, skipping
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::50a0:e2ff:fe74:5294. Set the 'ServerName' directive globally to suppress this message
[Tue Jan 06 08:29:50.328101 2015] [auth_digest:notice] [pid 9727] AH01757: generating secret for digest authentication ...
[Tue Jan 06 08:29:50.329387 2015] [lbmethod_heartbeat:notice] [pid 9727] AH02282: No slotmem from mod_heartmonitor
[Tue Jan 06 08:29:50.333216 2015] [mpm_prefork:notice] [pid 9727] AH00163: Apache/2.4.6 (CentOS) configured -- resuming normal operations
[Tue Jan 06 08:29:50.333263 2015] [core:notice] [pid 9727] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

我所努力达到的目标:

我们有许多企业web应用程序,我们希望在Tomcat农场中负载平衡。

什么是有效的:

  • Tomcat聚类

  • 复制

  • FarmWarDeployer

不起作用的是:

每当我试图调用部署在整个集群中的应用程序时,它都会给出404 not。Tomcat根应用程序(如/manager/html或/host-manager )也是如此。显然,只有正在工作的应用程序是/平衡器-管理器。

httpd服务器应该充当负载均衡器和tomcats的代理。它将必须交付一些静态内容,但首先,我需要启动并运行这些内容,以负载平衡JavaEE应用程序(Servlet)。对于我来说,对集群节点的AJP是必须的,因为不能允许http访问(+出于其他一些值得进行完全不同讨论的原因)。

由于每个人似乎都以不同的方式设置了mod_proxy配置,所以我正在寻找一个直接的解决方案,它给了我一些我可以构建的东西。如果你需要更多的信息或更多的配置细节,让我知道,我会提供给你这些。我已经使用mod_jk配置了第二个集群,一切都按预期工作,但是涉众需要这个mod_proxy(_ajp),它只是磨练了我的工作。

非常感谢您的帮助!

诚挚的问候!

EN

回答 1

Server Fault用户

发布于 2015-01-06 14:52:44

我还没有尝试复制您的配置,但当我今天早上查看它时,问题似乎只是缺少一个空间,可能是ProxyPassReverse与ProxyPass不匹配(不过,我认为后者不会给您提供一个404 )。

balancer://testcluster/stickysession=JSESSIONID|jsessionid / ProxyPass / ProxyPassReverse /平衡器://Test集群/

应:

ProxyPass /平衡器://test群集/ stickysession=JSESSIONID|jsessionid ProxyPassReverse /平衡器://test群集/ stickysession=JSESSIONID|jsessionid

至少,这是我的方式,我没有问题(但我不使用AJP,只是普通的http代理)。

显然,这是假定所有基本内容都已到位(站点启用、重新加载、http代理mod安装和启用等)。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/656517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档