Apache mod_cluster禁用与节点的连接

时间:2017-03-15 09:10:34

标签: apache wildfly mod-cluster

我的设置是4个Wildfly 10.1服务器节点前面的Apache Httpd 2.4服务器。我正在使用mod_cluster进行负载平衡,并且大部分时间都运行良好。但是每天都会多次出现在Apache的错误日志中:

[Wed Mar 15 09:15:18.736665 2017] [proxy:error] [pid 18936:tid 1784] AH00940: http: disabled connection for (10.10.87.53)
[Wed Mar 15 09:15:59.955515 2017] [proxy:error] [pid 18936:tid 1784] AH00940: http: disabled connection for (10.10.87.52)

当出现这些错误时,用户会抱怨他们已退出系统。发生这种情况是因为我正在使用粘性会话,当错误出现时,每个人似乎都从一个节点移动到另一个节点,这意味着他们的会话丢失了。

但是,即使这些错误存在于日志中,节点仍然处于活动状态,并且在我稍后测试它们时仍在工作。因此无论发生什么断开,它只是暂时发生。

这是我的Apache mod_cluster配置:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_ajp_module modules/mod_proxy_http.so
LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

<IfModule manager_module>
    Listen 10.10.87.50:16666
    ManagerBalancerName nmcluster

    <VirtualHost 10.10.87.50:16666>

        <Location />
            Require ip 10.10.87
        </Location>

        KeepAliveTimeout 300
        MaxKeepAliveRequests 0
        AdvertiseFrequency 5
        AllowDisplay On
        AdvertiseGroup 224.0.1.105:23364
        EnableMCPMReceive

        <Location /mod_cluster_manager>
            SetHandler mod_cluster-manager
            Require ip 10.10.87
        </Location>

    </VirtualHost>
</IfModule>

这是Wildfly中的配置:

<subsystem xmlns="urn:jboss:domain:modcluster:2.0">
    <mod-cluster-config advertise-socket="modcluster" proxies="proxy" balancer="nmcluster" connector="default">
        <dynamic-load-provider>
            <load-metric type="cpu"/>
        </dynamic-load-provider>
    </mod-cluster-config>
</subsystem>
...
<http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="true" enable-http2="true"/>
...
<socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>

如何让粘性会话更粘?或者甚至更好,我怎样才能阻止错误发生?

我仍然希望用户移动到另一个节点,如果一个节点关闭,但我不希望它发生只是因为一个节点有点慢几秒钟,因为它最终造成的伤害比好。

我也不明白为什么会发生这些断线。任何理论都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

当有人上传一个大型文件,Apache服务器和Wildfly服务器在它们之间处理时间超过10秒时,上面的#34;禁用连接&#34;发生错误,每个人都会失去会话并被注销。

解决方法是在Wildfly中将ping设置为高于10秒的值。例如ping="60",如下所示:

<subsystem xmlns="urn:jboss:domain:modcluster:2.0">
    <mod-cluster-config advertise-socket="modcluster" proxies="proxy" balancer="nmcluster" connector="default" ping="60">
        <dynamic-load-provider>
            <load-metric type="cpu"/>
        </dynamic-load-provider>
    </mod-cluster-config>
</subsystem>

此外,在Wildfly重新启动后,重启Apache也非常重要。如果你不重新启动Apache,mod_cluster-manager会告诉你新设置,但Apache不会使用它。