简体   繁体   English

负载平衡集群不适用于 Apache HTTP Server 2.4.6 和 JBoss EAP 7

[英]Load Balancing Cluster not working with Apache HTTP Server 2.4.6 and JBoss EAP 7

I am certifying my application on JBoss EAP 7. My application works on standalone mode but in cluster mode, my application gets deployed but I am unable to login.我正在 JBoss EAP 7 上认证我的应用程序。我的应用程序在独立模式下工作,但在集群模式下,我的应用程序已部署,但我无法登录。 I am again re-routed to login url.我再次重新路由到登录网址。
I have setup cluster using mod_cluster.我已经使用 mod_cluster 设置了集群。

There is no error log in Load Balancer Server logs neither on individual nodes of the cluster. Load Balancer Server 日志中没有错误日志,也没有在集群的各个节点上。
In my test environment, my load balancer and 2 server nodes are on same machine.在我的测试环境中,我的负载均衡器和 2 个服务器节点在同一台机器上。 I have given JBoss nodes different ports and instance-ids to differentiate the nodes.我为 JBoss 节点提供了不同的端口和实例 ID 以区分节点。
I am sharing my mod_cluster.conf and JBoss standalone-ha.xml extracts from one of the nodes in cluster.我正在从集群中的一个节点共享我的 mod_cluster.conf 和 JBoss standalone-ha.xml 提取物。

Following are the snippets in standalone-ha.xml file:以下是 standalone-ha.xml 文件中的片段:

Modcluster settings are: 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 settings are:暗流设置是:

    <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>

Contents of Socket Binding Group are: 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>

Contents of mod_cluster.conf are as follows: 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>

Basically you have two options - either create a cluster using JBoss own domain mode or extend you standalone configuration to contain required elements for session replication and sso.基本上,您有两个选择 - 使用 JBoss 自己的domain模式创建集群或扩展您的独立配置以包含会话复制和 sso 所需的元素。

In domain mode, most of the configurations are already present in EAP7 - just extend domain-full-ha profile.在域模式下,大多数配置已经存在于 EAP7 中 - 只需扩展domain-full-ha配置文件。

Required changes include enabling distributable flag in your web app web.xml - simply add <distributable/> to your web.xml.所需的更改包括在您的 Web 应用程序web.xml启用可distributable标志 - 只需将<distributable/>添加到您的 web.xml。 Next add single sign on flag to your undertow system:接下来将单点登录标志添加到您的 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>   

And enable cache container required for clustered SSO to work - this requires Infinishpan subsystem, which you might now have, if you only extended standalone-ha profile.并启用集群 SSO 工作所需的缓存容器 - 这需要 Infinishpan 子系统,如果您只扩展了standalone-ha配置文件,您现在可能拥有该子系统。 If you do not see Infinispan subsystem, have a look at standalone-full of standalone-full-ha profiles.如果您没有看到 Infinispan 子系统,请查看standalone-fullstandalone-full-ha配置文件。 If you do not have it already, add web cache:如果您还没有,请添加web缓存:

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

Again, if you use full-ha profile of either standalone or domain mode, you will probably have these already.同样,如果您使用独立或域模式的 full-ha 配置文件,您可能已经拥有这些。

Also you do not mention, if you use JBoss security domain for authorization or not.你也没有提到,如果你使用 JBoss 安全域进行授权。 In case you use some custom auth mechanism, make sure you set the session cookie or tokens correctly - for correct domain and context etc.如果您使用某些自定义身份验证机制,请确保正确设置会话 cookie 或令牌 - 正确的域和上下文等。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM