0

我要说明我的情况。

背景

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

目标

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

我按照本指南使用给定的 Web 应用程序。

错误

配置文件

我附上我的配置文件:

4

1 回答 1

0

回答

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 多播消息。

开启 Nebula、防火墙和 UDP 组播

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

  • 在您的工作主机上使用 curl来访问平衡器主机 - 正是您EnableMCPMReceive定义指令的 VirtualHost。
  • 如果它不起作用,则必须修复 iptables、selinux、httpd 的允许/拒绝等
  • 如果它有效,这是工人可以与平衡器交谈的好兆头
  • 转到您的 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太旧,不要使用易受攻击的代码

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

于 2016-01-27T11:54:56.357 回答