Apache 和 mod_proxy_balancer 上的现有连接不会故障转移第二个 JBoss 节点

Apache 和 mod_proxy_balancer 上的现有连接不会故障转移第二个 JBoss 节点

我有一个 Jboss 场,由 Apache HTTP + mod_proxy_balancer 和 mod_proxy_ajp 进行负载平衡,配置如下:

<VirtualHost *:80>

    ServerName web-gui-acceptance.myorg.com
    ServerAlias web-gui-acceptance


    ProxyRequests Off
    ProxyPass /web-gui balancer://jbosscluster/web-gui stickysession=JSESSIONID nofailover=On
    ProxyPassReverse /web-gui http://srvlnx01.myorg.com:8080/web-gui
    ProxyPassReverse /web-gui http://srvlnx02.myorg.com:8080/web-gui

    <Proxy *>
      AuthType Kerberos
      [...]
    </Proxy>

    <Proxy balancer://jbosscluster>
        BalancerMember ajp://srvlnx01.myorg.com:8009 route=SRVLNX01_node1
        BalancerMember ajp://srvlnx01.myorg.com:8009 route=SRVLNX02_node1
        ProxySet lbmethod=byrequests
    </Proxy>

</VirtualHost>

当第一个 JBoss 节点发生故障(托管 VM 关闭)时,我现有的连接不会转移到第二个节点...第一条路由被保留(在表/ .shm 中?)并且为我提供 503 错误。

有人能告诉我我错过了什么吗?

答案1

我可能找到了一种解决方法,也可以处理部署/取消部署:http://www.jboss.org/mod_cluster

优点

与其他基于 httpd 的负载均衡器相比,mod_cluster 具有以下优势:

httpd worker 的动态配置

传统的基于 httpd 的负载均衡器需要明确配置代理可用的工作程序。在 mod_cluster 中,代理的大部分配置位于应用服务器上。应用服务器将与之通信的代理集由静态列表或通过广告机制使用动态发现确定。应用服务器将生命周期事件(例如服务器启动/关闭)中继到代理,使它们能够有效地自动配置自身。值得注意的是,服务器的正常关闭不会导致代理做出故障转移响应,而传统的基于 httpd 的负载均衡器则会出现这种情况。

服务器端负载均衡因子计算

与传统的基于 httpd 的负载平衡器相比,mod_cluster 使用由应用服务器计算和提供的负载平衡因子,而不是在代理中计算这些因子。因此,mod_cluster 提供了一组比代理更强大、更准确的负载指标。(有关详细信息,请参阅负载指标)

细粒度的 Web 应用生命周期控制

传统的基于 httpd 的负载平衡器不能很好地处理 Web 应用程序的取消部署。从代理的角度来看,对未部署的 Web 应用程序的请求与对不存在的资源的请求没有区别,并且会导致 404 错误。在 mod_cluster 中,每个服务器都会将任何 Web 应用程序上下文生命周期事件(例如 web-app deploy/undeploy)转发给代理,通知代理启动/停止将给定上下文的请求路由到该服务器。

AJP 是可选的

与 mod_jk 不同,mod_cluster 不需要 AJP。httpd 与应用服务器节点的连接可以使用 HTTP、HTTPS 或 AJP。原始概念在 wiki 中有描述。

我希望这会有所帮助。

相关内容