Назад | Перейти на главную страницу

Балансировка нагрузки WildFly 17 с mod_cluster без apache в режиме домена

Я успешно создал кластер WildFly с 3 хостами в доменном режиме. Теперь я пытаюсь получить подсистему mod_cluster без apache или другого сервера посередине, поскольку я видел, что это возможно, но я не нашел недавней документации для этого.

Я пробовал несколько способов и конфигураций, но ни один из них не работал. Приложения и блоки сохраняемости развертываются и настраиваются на главном сервере и реплицируются на подчиненные устройства главным устройством, а контекст доступен на всех серверах.

Но если я попытаюсь получить контекст на порту 80 (балансировщик нагрузки), все, что я получу, это 404. Кроме того, он не отображает стартовую страницу «добро пожаловать в WildFly» для запросов без контекста, поэтому группа балансировщика нагрузки не "подключение" к основной-серверной группе и развернутым приложениям.

Любая помощь будет очень признательна. Вот моя топология: образ

Вам не нужно использовать Apache httpd для балансировки нагрузки, но вам все равно нужно использовать балансировщик нагрузки. Вы можете запустить выделенный сервер Wildfly, который будет работать как балансировщик нагрузки в вашем домене. Есть готовый профиль под названием load-balancer в файле конфигурации домена по умолчанию (domain.xml).

Шаги по добавлению балансировщика нагрузки WildFly на порт HTTP по умолчанию (80):

1) Редактировать domain.xml - введите ожидаемый номер порта в поле socket-binding-group элемент для load-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-group для вашего балансировщика нагрузки. Использовать load-balancer профиль и load-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) edit (редактировать) 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) Если вы используете номера портов ниже 1024 в Linux-подобных системах, запустите домен с привилегированной системной учетной записью (например, используя 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>

Если ваша среда не поддерживает многоадресную рассылку (например, облака или среды докеров), используйте, например, Конфигурация статического обнаружения 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/