【问题标题】:modcluster (Wildfly) is not detecting Advertize from Apachemodcluster (Wildfly) 没有检测到来自 Apache 的 Advertize
【发布时间】:2014-09-18 11:10:57
【问题描述】:

我正在尝试使用 mod_cluster 配置 WildFly 8.1.0。 WildFly 和 Apache 都在同一台机器上运行。机器是 Ubuntu 12.04 和 Apache 2.2.x

Apache 设置正确(我相信)。我通过运行 mod_proxy 源代码 (github) 中的测试类 Advertise 测试了广告模块是否正常工作。 apache 日志中没有错误。

我按如下方式启动服务器:./standalone.sh -c Standalone-ha.xml

如果有人发现下面的配置有问题并帮助我摆脱痛苦的日子,我将不胜感激....

Apache 配置

CreateBalancers 1

<IfModule manager_module>

    #Listen 127.0.1.1:6666
    Listen *:6666
    ManagerBalancerName mycluster

    <VirtualHost *:6666> 

        KeepAliveTimeout 300
        MaxKeepAliveRequests 0
        AdvertiseFrequency 5
        ServerAdvertise On
        AllowDisplay On

        <Location />
            Order deny,allow
            Allow from 127.0.1
        </Location>

       <Location /mod_cluster_manager>
            SetHandler mod_cluster-manager
            Order deny,allow
            #Deny from all
            #Allow from 127.0.1
            Allow from all
        </Location>
     </VirtualHost>
</IfModule>

虚拟主机配置

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ProxyPass / balancer://mycluster stickysession=JSESSIONID|jsessionid nofailover=On
        ProxyPassReverse / balancer://mycluster
        ProxyPreserveHost On

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Advertize 测试类的结果

received from /178.62.50.xxx:23364
received: HTTP/1.0 200 OK
Date: Sat, 26 Jul 2014 20:03:12 GMT
Sequence: 121
Digest: 4dedd3761d451227f36534b63ca2a8a1
Server: b23584e2-314f-404d-8fde-05069bfe5dc7
X-Manager-Address: 127.0.1.1:6666
X-Manager-Url: /b23584e2-314f-404d-8fde-05069bfe5dc7
X-Manager-Protocol: http
X-Manager-Host: 127.0.1.1

从 mod_cluster_manager (178.62.50.xxx:6666/mod_cluster_manager) 打印出来

mod_cluster/1.2.6.Final
start of "httpd.conf" configuration
mod_proxy_cluster.c: OK
mod_sharedmem.c: OK
Protocol supported: http AJP 
mod_advertise.c: OK
Server: 127.0.1.1 
Server: 127.0.1.1 VirtualHost: *:80
Server: 127.0.1.1 VirtualHost: *:6666 Advertising on Group 224.0.1.105 Port 23364 for http://127.0.1.1:6666 every 5 seconds
end of "httpd.conf" configuration

最后,这里是来自standalone-ha.xml的相关部分

<subsystem xmlns="urn:jboss:domain:modcluster:1.2">
    <mod-cluster-config advertise-socket="modcluster" connector="ajp">
        <dynamic-load-provider>
            <load-metric type="cpu"/>
        </dynamic-load-provider>
    </mod-cluster-config>
</subsystem>

<socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>

<interfaces>
    <interface name="management">
        <inet-address value="178.62.50.xxx"/>
    </interface>
    <interface name="public">
        <inet-address value="127.0.1.1"/>
    </interface>
    <interface name="unsecure">
        <inet-address value="${jboss.bind.address.unsecure:127.0.1.1}"/>
    </interface>
</interfaces>

服务器日志中唯一与 modcluster 相关的部分(服务器启动时输出)

15:53:29,805 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-1) JBAS017519: Undertow HTTP listener default listening on /127.0.1.1:8080
15:53:29,811 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-2) JBAS017519: Undertow AJP listener ajp listening on /127.0.1.1:8009
15:53:29,905 INFO  [org.jboss.modcluster] (ServerService Thread Pool -- 54) MODCLUSTER000001: Initializing mod_cluster version 1.3.0.Final
15:53:29,967 INFO  [org.jboss.modcluster] (ServerService Thread Pool -- 54) MODCLUSTER000032: Listening to proxy advertisements on /224.0.1.105:23364

【问题讨论】:

    标签: java apache wildfly-8 mod-cluster


    【解决方案1】:

    我终于设法解决了这里的问题。公共接口也需要引用服务器IP,而不是127.0.1.1。

    更新后的接口配置为:

    <interfaces>
        <interface name="management">
            <inet-address value="178.62.50.xxx"/>
        </interface>
        <interface name="public">
            <inet-address value="178.62.50.xxx"/>
        </interface>
        <interface name="unsecure">
            <inet-address value="${jboss.bind.address.unsecure:127.0.1.1}"/>
        </interface>
    </interfaces>
    

    【讨论】:

      【解决方案2】:

      你需要:

      • &lt;VirtualHost *:6666&gt; 中使用 EnableMCPMReceive 以便允许它使用来自 WildFly 的 MCMP 消息

      • &lt;Location /&gt; EnableMCPMReceive 启用的 VirtualHost 必须允许 WildFly 服务器的 IP 地址

      • 使用 WildFly,从不 绑定到 localhost -- 在 mod_cluster 环境中没有任何意义,除非这些框(Apache 和 WildFly 实例)都位于单箱;这可能只是当地的发展情况

      • 整个事件链如下:

        1. Apache 发送一条 UDP 多播消息,说明其位置(默认情况下,启用广告的 VirtualHost)
        2. WildFly 捕获消息并且 mod_cluster 子系统发送 CONFIG 和 STATUS 消息,其中包含其 JvmRoute (instance-id)、主机、端口、协议...、负载...主机和端口 必须可从 Apache HTTP 服务器访问。
        3. Apache HTTP Server 通过 STATUS-RSP 消息等在其 Host:Port 上与 WildFly 服务器通信。通信是双向的。

      请不要将此与请求路由混淆,默认情况下,客户端请求从 Apache HTTP 服务器传递到 WildFly 并通过 AJP 返回,而 MCMP 消息使用 HTTP。

      HTH 克

      【讨论】:

      • 顺便说一句:关于您的 ProxyPass 配置:看起来有点奇怪,如果您不使用任何其他指令(例如 ProxyPassMatch 等),为什么还要手动创建 ProxyPass?这似乎是多余的。最后但同样重要的是,在玩CreateBalancers 时,请注意open pull/119 中描述的MODCLUSTER-430
      猜你喜欢
      • 1970-01-01
      • 2016-04-14
      • 2016-05-11
      • 2015-05-20
      • 2021-04-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多