WildFly 17 在域模式下使用 mod_cluster 进行负载平衡,无需 apache

WildFly 17 在域模式下使用 mod_cluster 进行负载平衡,无需 apache

我已经成功创建了一个具有 3 个主机的 WildFly 集群,该集群处于域模式。现在,我尝试获取 mod_cluster 子系统,中间不需要 apache 或其他服务器,据我所知这是可行的,但我没有找到任何最新文档来实现这一点。

我尝试了几种方法和配置,但都不起作用。应用程序和持久性单元在主服务器上部署和配置,并由主服务器复制到从服务器,并且上下文在所有服务器上均可访问。

但是,如果我尝试获取端口 80(负载均衡器)上的上下文,我得到的只是 404。此外,它不会显示无上下文请求的“欢迎使用 WildFly”启动页面,因此负载均衡器组不会“连接”到主服务器组及其部署的应用程序。

任何帮助都将不胜感激。这是我的拓扑: 图像

答案1

您不需要使用 Apache httpd 进行负载平衡,但您仍然需要使用负载平衡器。您可以启动专用的 Wildfly 服务器,它将作为您域内的负载平衡器。load-balancer默认域配置文件 ( domain.xml) 中有一个名为的现成配置文件。

在 HTTP 默认端口 (80) 上添加 WildFly 负载均衡器的步骤:

1)编辑-在元素domain.xml中填写预期的端口号:socket-binding-groupload-balancer-sockets

<socket-binding-group name="load-balancer-sockets" default-interface="public">
    <socket-binding name="http" port="80"/>
    <socket-binding name="https" port="443"/>
    <socket-binding name="mcmp-management" interface="private" port="${jboss.mcmp.port:8090}"/>
    <socket-binding name="modcluster" interface="private" multicast-address="${jboss.modcluster.multicast.address:224.0.1.105}" multicast-port="23364"/>
</socket-binding-group>

2) 编辑-为您的负载均衡器domain.xml添加新内容。为其使用配置文件和套接字绑定组。示例:server-groupload-balancerload-balancer-sockets

<server-groups>
    <server-group name="main-server-group" profile="ha">
        <socket-binding-group ref="ha-sockets"/>
    </server-group>
    <server-group name="load-balancer-group" profile="load-balancer">
        <socket-binding-group ref="load-balancer-sockets"/>
    </server-group>
</server-groups>

3)编辑host.xml- 添加一个将成为负载平衡器的新服务器 - 即将其添加到新的load-balancer-group

<servers>
    <server name="server-one" group="main-server-group"/>
    <server name="server-two" group="main-server-group" auto-start="true">
        <socket-bindings port-offset="150"/>
    </server>
    <server name="load-balancer" group="load-balancer-group" auto-start="true"/>
</servers>

4)如果您在类似 Linux 的系统上使用低于 1024 的端口号,则使用特权系统帐户运行域(例如使用sudo):

sudo bin/domain.sh

您的域(包括负载均衡器)现在应该已经成功运行。

更新 1:

故障排除

确保所有绑定接口都已正确发布(例如,private负载均衡器上的接口!)

主控制器:

export MY_IP=192.168.105.1
bin/domain.sh --host-config=host-master.xml -b $MY_IP -bmanagement $MY_IP -bprivate $MY_IP

奴隶:

export MY_IP=192.168.105.2
bin/domain.sh --host-config=host-slave.xml -b $MY_IP -bmanagement $MY_IP -Djboss.domain.master.address=192.168.105.1

如果您将其用作负载均衡器的主机配置,请确保已向其中host-master.xml添加接口。public

<interface name="public">
    <inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>

如果您的环境不支持多播(例如云或 docker 环境),请使用静态 modcluster 发现配置:

bin/jboss-cli.sh <<EOT
embed-host-controller
/socket-binding-group=ha-sockets/remote-destination-outbound-socket-binding=proxy1:add(host=192.168.105.1, port=8090)
/profile=ha/subsystem=modcluster/proxy=default:write-attribute(name=advertise, value=false)
/profile=ha/subsystem=modcluster/proxy=default:list-add(name=proxies, value=proxy1)
EOT

使用简单<distributable/>应用程序测试配置。我通常使用简单的请求计数器应用程序。它是一个单一的 JSP,因此很容易直接在 war 文件中检查其源代码:

wget https://github.com/kwart/secured-webapp-template/releases/download/single-jsp-counter-distributable/counter-distributable.war
bin/jboss-cli.sh <<EOT
embed-host-controller
deploy counter-distributable.war --server-groups=main-server-group

然后通过将浏览器指向http://192.168.105.1:8080/counter-distributable/并且http://192.168.105.1/counter-distributable/

答案2

附加信息:在 docker swarm 环境中的 wildfly 26 中,静态 modcluster 配置对我来说不起作用。

Docker Swarm 版本信息:

NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"

Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:44:13 2021
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

我必须将“任何”接口添加到domain.xml中:

    <interfaces>
        ...
        <interface name="any">
            <inet-address value="0.0.0.0"/>
        </interface>
    </interfaces>

并更改主服务器和从服务器中的启动参数。

掌握:

export MY_IP=192.168.105.1
bin/domain.sh --host-config=host-master.xml -b $MY_IP -bmanagement 0.0.0.0 -bprivate $MY_IP

奴隶:

export MY_IP=192.168.105.2
bin/domain.sh --host-config=host-slave.xml -b $MY_IP -bmanagement 0.0.0.0 -Djboss.domain.master.address=192.168.105.1

相关内容