5

我们目前正在测试从 Wildfly 8.2.0 迁移到 Wildfly 9.0.0.CR1(或从快照构建的 CR2)。该系统是一个使用 mod_cluster 的集群,并且在 VPS 上运行,这实际上阻止了它使用多播。

在 8.2.0 上,我们一直在使用以下运行良好的 modcluster 配置:

      <mod-cluster-config proxy-list="1.2.3.4:10001,1.2.3.5:10001" advertise="false" connector="ajp">
          <dynamic-load-provider>
              <load-metric type="cpu"/>
          </dynamic-load-provider>
      </mod-cluster-config>

不幸的是,在 9.0.0 上,proxy-list 已被弃用,服务器的启动将以错误结束。文档严重缺乏,但是经过几次尝试后,我发现代理列表已替换为出站套接字绑定列表的代理。因此,配置如下所示:

      <mod-cluster-config proxies="mc-prox1 mc-prox2" advertise="false" connector="ajp">
          <dynamic-load-provider>
              <load-metric type="cpu"/>
          </dynamic-load-provider>
      </mod-cluster-config>

并且应将以下内容添加到适当的套接字绑定组中(在我的情况下为全哈):

    <outbound-socket-binding name="mc-prox1">
        <remote-destination host="1.2.3.4" port="10001"/>
    </outbound-socket-binding>
    <outbound-socket-binding name="mc-prox2">
        <remote-destination host="1.2.3.5" port="10001"/>
    </outbound-socket-binding>

到目前为止,一切都很好。在此之后,httpd 集群开始注册节点。但是我从负载均衡器中得到错误。当我查看 /mod_cluster-manager 时,我看到了几行Node REMOVED行,并且还有许多错误,例如:

ERROR [org.jboss.modcluster] (UndertowEventHandlerAdapter - 1) MODCLUSTER000042: Error MEM sending STATUS command to node1/1.2.3.4:10001, configuration will be reset: MEM: Can't read node

在 mod_cluster 的日志中有等效的警告:

manager_handler STATUS error: MEM: Can't read node

据我了解,问题在于虽然 wildfly/modcluster 能够连接到 httpd/mod_cluster,但它不能以其他方式工作。不幸的是,即使经过大量的努力,我也被卡住了。

有人可以在没有广告的情况下帮助为 Wildfly 9.0.0 设置 mod_cluster 吗?非常感谢。

4

3 回答 3

3

我遇到了 Node Removed 问题。我设法通过使用以下作为实例ID来解决它

<subsystem xmlns="urn:jboss:domain:undertow:2.0" instance-id="${jboss.server.name}">

我希望这会帮助别人;)

于 2015-10-08T10:56:20.387 回答
2

无需对静态代理配置进行任何不必要的努力或不安。每个 WildFly 发行版都带有描述 xml 子系统配置的 xsd 表。例如,对于 WildFly 9x,它是:

WILDFLY_DIRECTORY/docs/schema/jboss-as-mod-cluster_2_0.xsd

它说:

<xs:attribute name="proxies" use="optional">
  <xs:annotation>
    <xs:documentation>List of proxies for mod_cluster to register with defined by outbound-socket-binding in socket-binding-group.</xs:documentation>
  </xs:annotation>
  <xs:simpleType>
    <xs:list itemType="xs:string"/>
  </xs:simpleType>
</xs:attribute>

以下设置开箱即用

  1. 下载wildfly-9.0.0.CR1.zip或使用./build.sh 从源代码构建
  2. 假设您有 2 个盒子,带有 mod_cluster 的 Apache HTTP 服务器充当负载平衡代理,而您的 WildFly 服务器充当工作人员。确保 botch 服务器可以在启用 MCMP 的 VirtualHost 的地址和端口(Apache HTTP 服务器端)以及 WildFly AJP 和 HTTP 连接器端相互访问。常见的错误是binf WildFLy到localhost;然后它将其地址作为 localhost 报告给驻留在不同框上的 Apache HTTP 服务器,这使得它无法联系 WildFly 服务器回来。通信是双向的。
  3. 这是我与默认wildfly-9.0.0.CR1.zip的配置差异。

328c328
< <mod-cluster-config advertise-socket="modcluster" connector="ajp" advertise="false" proxies="my-proxy-one">
---
> <mod-cluster-config advertise-socket="modcluster" connector="ajp">
384c384
< <subsystem xmlns="urn:jboss:domain:undertow:2.0" instance-id="worker-1">
---
> <subsystem xmlns="urn:jboss:domain:undertow:2.0">
435c435
< <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:102}">
---
> <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
452,454d451
< <outbound-socket-binding name="my-proxy-one">
< <remote-destination host="10.10.2.4" port="6666"/>
< </outbound-socket-binding>
456c453
< </server>
---
> </server>

变更说明

  • proxies="my-proxy-one",出站套接字绑定名称;这里可能会有更多。
  • instance-id="worker-1",工人的名字,又名JVMRoute
  • 偏移量——你可以忽略,它只是为了我的测试设置。偏移量不适用于出站套接字绑定。
  • <outbound-socket-binding name="my-proxy-one">VirtualHost- Apache HTTP Server 中包含EnableMCPMReceive指令的 IP 和端口。

结论

通常,这些 MEM 读取/节点错误消息与网络问题有关,例如 WildFly 可以联系 Apache,但 Apache 无法联系 WildFly。最后但并非最不重要的一点是,Apache HTTP Server 的配置可能会使用PersistSlots指令并且发生一些实质性的环境配置更改,例如从 mpm_prefork 切换到 mpm_worker。在这种情况下,MEM Read 错误消息不会发送给 WildFly,而是发送给 HTTPD/cache/mod_custer 中需要删除的缓存 slotmem 文件。我敢肯定它在你的情况下是网络。

于 2015-05-25T10:09:31.327 回答
2

几周后,我回到了问题并找到了解决方案。当然,问题出在配置中,与特定版本的 Wildfly 没有任何共同之处。具体模式:

域中有三个节点,每个节点中有三个服务器。所有节点都使用以下属性启动:

-Djboss.node.name=nodeX

...其中nodeX是特定节点的名称。但是,这意味着节点中的所有三台服务器都具有相同的名称,这正是负载均衡器的困惑所在。一旦我删除了这个属性,一切就开始工作了。

于 2015-06-28T11:35:11.993 回答