回答
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或从源代码构建您自己的。如果您碰巧需要任何帮助,请询问。