【问题标题】:Wildfly 9 - mod_cluster on TCPWildfly 9 - TCP 上的 mod_cluster
【发布时间】:2015-08-03 06:02:23
【问题描述】:

我们目前正在测试从 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 上,代理列表已被弃用,并且服务器的启动将因错误而结束。文档严重缺乏,但是经过几次尝试后,我发现代理列表已替换为出站套接字绑定列表的代理。因此,配置如下所示:

      <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 而不做广告吗?非常感谢。

【问题讨论】:

    标签: wildfly mod-cluster


    【解决方案1】:

    无需为静态代理配置做任何不必要的努力或不安。每个 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 from sources 构建
    2. 假设您有 2 个机器,Apache HTTP Server 和 mod_cluster 充当负载平衡代理,WildFly 服务器充当工作器。 确保 botch 服务器可以在启用 MCMP 的 VirtualHost 的地址和端口(Apache HTTP 服务器端)以及 WildFly AJP 和 HTTP 连接器端相互访问。常见的错误是binf WildFLy到localhost;然后它将其地址作为 localhost 报告给驻留在不同框上的 Apache HTTP 服务器,这使得它无法联系 WildFly 服务器回来。通信是双向的。
    3. 这是我与默认 wildfly-9.0.0.CR1.zip 的配置差异。

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

    变更说明

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

    结论

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

    【讨论】:

      【解决方案2】:

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

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

      -Djboss.node.name=nodeX
      

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

      【讨论】:

      • 我在独立模式下为 JBoss EAP 7 设置集群。我使用 Apache HTTPD 2.4.23 mod_cluster 作为负载均衡器。我已按照红帽配置指南的步骤进行操作,但无法登录我的应用程序。我想知道这是否是 JBoss EAP 7 中的粘性会话问题,或者我错过了一步。我正在分享问题的链接:[link] (stackoverflow.com/questions/43454068/…)
      【解决方案3】:

      我遇到了 Node Removed 问题。 我设法通过使用以下作为 instance-id 来解决它

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

      我希望这对其他人有帮助;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-19
        • 2014-12-13
        • 2015-08-05
        • 2016-10-28
        • 1970-01-01
        • 2016-01-26
        • 2018-07-26
        • 2015-11-07
        相关资源
        最近更新 更多