【问题标题】:Load Balancing Cluster not working with Apache HTTP Server 2.4.6 and JBoss EAP 7负载平衡集群不能与 Apache HTTP Server 2.4.6 和 JBoss EAP 7 一起使用
【发布时间】:2017-04-17 15:06:13
【问题描述】:

我正在 JBoss EAP 7 上验证我的应用程序。我的应用程序在独立模式下工作,但在集群模式下,我的应用程序被部署但我无法登录。我再次被重新路由到登录网址。
我已经使用 mod_cluster 设置了集群。

负载均衡服务器日志中没有错误日志,集群的各个节点也没有。
在我的测试环境中,我的负载均衡器和 2 个服务器节点在同一台机器上。我为 JBoss 节点提供了不同的端口和实例 ID 以区分节点。
我正在共享我从集群中的一个节点中提取的 mod_cluster.conf 和 JBoss Standalone-ha.xml。

standalone-ha.xml 文件中的 sn-ps 如下:

Modcluster 设置为:

    <subsystem xmlns="urn:jboss:domain:modcluster:2.0">
    <mod-cluster-config advertise-socket="modcluster" proxies="proxy1" balancer="testcluster" advertise="true" connector="ajp">
        <dynamic-load-provider>
            <load-metric type="busyness"/>
        </dynamic-load-provider>
    </mod-cluster-config>  
</subsystem> 

Undertow 设置为:

    <subsystem xmlns="urn:jboss:domain:undertow:3.1" instance-id="node1">
    <buffer-cache name="default"/>
    <server name="default-server">
        <ajp-listener name="ajp" socket-binding="ajp"/>
        <http-listener name="default" socket-binding="http" redirect-socket="https"/>
         <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <filter-ref name="server-header"/>
            <filter-ref name="x-powered-by-header"/>
        </host>
    </server>
   <servlet-container name="default">
        <jsp-config/>
        <websockets/>
    </servlet-container>
    <handlers>
        <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    </handlers>
    <filters>
        <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
        <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
    </filters>
</subsystem>

Socket Binding Group的内容是:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
    <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
    <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
    <socket-binding name="http" port="${jboss.http.port:8080}"/>
    <socket-binding name="https" port="${jboss.https.port:8443}"/>
    <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
    <socket-binding name="jgroups-tcp" interface="private" port="7600"/>
    <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
    <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
    <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
    <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
    <socket-binding name="txn-recovery-environment" port="4712"/>
    <socket-binding name="txn-status-manager" port="4713"/>
    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="localhost" port="25"/>
    </outbound-socket-binding>
    <outbound-socket-binding name="proxy1"> 
    <!-- host and port number of the load-balancer.  -->
        <remote-destination host="x.x.x.x" port="81"/>
    </outbound-socket-binding>
 </socket-binding-group>

mod_cluster.conf的内容如下:

LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule advertise_module modules/mod_advertise.so

MemManagerFile "//httpd2.4.6Home/var/cache/mod_cluster"

<IfModule manager_module>
    Listen 81
    <VirtualHost *:81>
    <Directory />
        Require all granted
    </Directory>
    <Location />
        Require all granted
    </Location>
    <Location /mod_cluster_manager>
        SetHandler mod_cluster-manager
        Require all granted
    </Location>
        KeepAliveTimeout 60
        MaxKeepAliveRequests 0
        ManagerBalancerName testcluster
        AdvertiseFrequency 5
        ServerAdvertise on
        EnableMCPMReceive
    </VirtualHost>
</IfModule>

【问题讨论】:

  • 如果集群中只有一个节点处于活动状态,我可以登录到我的应用程序。这种行为的原因可能是什么?
  • 谁能分享在独立模式下运行 JBoss EAP 7 配置 mod_cluster 的步骤?
  • 在 JBoss EAP 7 中是否存在与粘滞会话相关的问题?这是上述行为的原因吗?
  • Apache 2.4.23 仍然存在同样的问题。
  • 您解决了吗?对我来说同样的问题。

标签: apache jboss load-balancing mod-cluster


【解决方案1】:

基本上你有两个选择——要么使用 JBoss 自己的domain 模式创建一个集群,要么扩展你的独立配置以包含会话复制和 sso 所需的元素。

在域模式下,大部分配置已经存在于 EAP7 中 - 只需扩展 domain-full-ha 配置文件即可。

所需的更改包括在您的 Web 应用程序 web.xml 中启用 distributable 标志 - 只需将 &lt;distributable/&gt; 添加到您的 web.xml。 接下来将单点登录标志添加到您的 undertow 系统:

  <host name="default-host" alias="localhost">                                                           
     <location name="/" handler="welcome-content"/>                                                     
     <filter-ref name="server-header"/>                                                                 
     <filter-ref name="x-powered-by-header"/>                                                           
     <single-sign-on/>    <!-- FIXME:  enable SSO here -->                                                                              
   </host>   

并启用集群 SSO 工作所需的缓存容器 - 这需要 Infinishpan 子系统,如果您仅扩展 standalone-ha 配置文件,您现在可能拥有该子系统。如果您没有看到 Infinispan 子系统,请查看 standalone-fullstandalone-full-ha 配置文件。如果还没有,添加web缓存:

 /subsystem=infinispan/cache-container=web/distributed-cache=concurrent:add
 /subsystem=infinispan/cache-container=web/distributed-cache=concurrent/store=file:add 

同样,如果您使用独立模式或域模式的完整 ha 配置文件,您可能已经拥有这些配置文件。

你也没有提到,是否使用JBoss安全域进行授权。如果您使用一些自定义身份验证机制,请确保正确设置会话 cookie 或令牌 - 用于正确的域和上下文等。

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多