【问题标题】: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。
错误:
配置文件
我附上我的配置文件:
【问题讨论】:
标签:
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。如果您碰巧需要任何帮助,请询问。