Apache mod_cluster 禁用与节点的连接
Apache mod_cluster disabling connection to nodes
我的设置是在 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"/>
如何使粘性会话更粘性?或者更好的是,我怎样才能阻止错误发生?
我仍然希望用户移动到另一个节点,如果一个节点关闭,但我不希望它发生只是因为一个节点有点慢几秒钟,因为那样它最终会做更多弊大于利。
我也不明白为什么会发生这些断开连接。任何理论将不胜感激。
似乎有人上传一个大文件,Apache 服务器和 Wildfly 服务器在它们之间处理需要超过 10 秒的时间,出现上述 "disabled connection" 错误,每个人都失去会话并注销.
解决方案是在 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 不会使用它。
我的设置是在 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"/>
如何使粘性会话更粘性?或者更好的是,我怎样才能阻止错误发生?
我仍然希望用户移动到另一个节点,如果一个节点关闭,但我不希望它发生只是因为一个节点有点慢几秒钟,因为那样它最终会做更多弊大于利。
我也不明白为什么会发生这些断开连接。任何理论将不胜感激。
似乎有人上传一个大文件,Apache 服务器和 Wildfly 服务器在它们之间处理需要超过 10 秒的时间,出现上述 "disabled connection" 错误,每个人都失去会话并注销.
解决方案是在 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 不会使用它。