我们目前正在测试从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>
以下内容应添加到相应的socket-binding-group中(在我的情况下为full-ha):
<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吗?非常感谢。
答案 0 :(得分: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>
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"
,工人的名字,a.k.a。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读取错误消息不会发送到WildFly,而是发送到需要删除的HTTPD / cache / mod_custer中的缓存slotmem文件。
在我的情况下,我确定它是网络。
答案 1 :(得分:2)
几周后,我回到了问题并找到了解决方案。问题当然是 - 在配置上与Wildfly的特定版本没有任何共同之处。具体模式:
域中有三个节点,每个节点有三个服务器。使用以下属性启动所有节点:
-Djboss.node.name=nodeX
...其中nodeX
是特定节点的名称。但是,这意味着节点中的所有三个服务器都具有相同的名称,这正是负载均衡器的混乱。
一旦我删除了这个属性,一切都开始工作了。
答案 2 :(得分:2)
我遇到了Node Removed问题。 我设法使用以下作为instance-id
来解决它<subsystem xmlns="urn:jboss:domain:undertow:2.0" instance-id="${jboss.server.name}">
我希望这会帮助其他人;)