【问题标题】:Clustering doesn't work with mod_cluster on JbossAS7 - Stateful Application集群不适用于 JbossAS7 上的 mod_cluster - 有状态的应用程序
【发布时间】:2016-01-26 16:17:13
【问题描述】:

我要说明我的情况。

背景

我在 Open Nebula 上使用 Debian Jessie 运行三台虚拟机,一台作为主机,另外两台作为从机。我在其中安装了 JBoss AS 7.1 和 mod_cluster 1.2。

目标

运行一个有状态的应用程序,因此当我关闭主服务器时,集群允许我继续使用共享会话的应用程序并维护变量值。

我使用给定的网络应用程序关注this guide

错误

  • 我无法像上面的指南那样直接访问http://master/cluster-demo/ 的应用程序,我必须指定端口(服务器三为 8330)。
  • 当我关闭服务器 3 时,从服务器注意到服务器已关闭,但会话未共享,应用程序不再可访问。 This 是当我在主服务器上喊出服务器三时从服务器上的输出。

配置文件

我附上我的配置文件:

【问题讨论】:

    标签: apache jboss jboss7.x mod-cluster opennebula


    【解决方案1】:

    回答

    mod_cluster 与消息传递(JMS、HornetQ)子系统没有任何共同之处。 mod_cluster 设置也与集群子系统没有任何共同之处,即 Infinispan 及其主力 JGroups。

    AS7 mod_cluster 子系统的作用是监听 Apache HTTP Server mod_cluster 模块发出的 UDP 多播广告消息。当它收到这样的消息时,它会向您的 Apache HTTP Server 负载平衡器注册自己。从那一刻起,您注册的 AS7 “worker”节点不断发送专门的 HTTP 消息(通过 TCP),通知 Apache HTTP Server:

    • 它的名字(jvmRoute 或生成)
    • 它的当前负载
    • 其部署,即应用程序上下文
    • 别名等

    当您的 Apache HTTP Server 平衡器没有注册工作节点时,没有上下文,因此无处可将您的请求转发到。

    根据您发布的配置,您依赖于从 224.0.1.105:23364 发送/接收的 UDP 多播消息。

    开启星云、防火墙和UDP组播

    可能是 Open Nebula 不允许主机之间的 UDP 多播,或者您的 iptables 阻止了它。试试这个:

    • 在您的 worker 主机上使用 curl 来访问 balancer 主机 -- 正是您定义了指令 EnableMCPMReceive 的 VirtualHost。
    • 如果不行,必须修复iptables、selinux、httpd的allow/deny等
    • 如果它有效,这是一个好兆头,工人可以与平衡器对话
    • 转到您的 AS7 xml、modcluster 子系统,并将属性添加到配置中:<mod-cluster-config advertise-socket="modcluster" proxy-list="your-httpd-address:port">——您刚刚尝试使用 curl 的那个
    • 现在即使没有 UDP 多播也应该可以工作
    • 如果您想在 Open Nebula 中调试 UDP 多播设置,请使用Advertize.java 尝试一下

    1.2.0 太旧,不要使用易受攻击的代码

    不要在您的 Apache HTTP 服务器上使用 mod_cluster 1.2.0。该版本已完全过时,并且包含严重的错误,包括代码注入 CVE 和严重的性能问题。如果您需要 httpd 2.2.x 支持,请下载 mod_cluster 1.3.1.Final for httpd 2.4.x 或构建您自己的 from the sources。如果您碰巧需要任何帮助,请询问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      相关资源
      最近更新 更多