群集不适用于JbossAS7上的mod_cluster - 有状态应用程序

时间:2016-01-26 16:17:13

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

我要解释一下我的情况。

背景

我在Open Nebula上运行了三个虚拟机Debian Jessie,一个是主人,另外两个是奴隶。在其中我安装了JBoss AS 7.1和mod_cluster 1.2。

目标

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

我跟着this guide使用了给定的Web应用程序。

错误

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

配置文件

我附上配置文件:

1 个答案:

答案 0 :(得分: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多播消息。

打开星云,防火墙和UDP多播

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

  • worker 主机上使用curl访问 balancer 主机 - 正是您定义了指令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太旧了,不要使用易受攻击的代码

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