Новый лидер Java EE? WildFly 8 в InfoboxCloud IaaS. Часть 2. Режим домена

в 23:26, , рубрики: iaas, java, java ee, jboss, wildfly, Блог компании Infobox, Программирование, метки: , , , ,

В первой части мы развернули WildFly 8 в Облачный конструктор InfoboxCloud в режиме Standalone. Давайте посмотрим, как можно развернуть WildFly 8 в режиме домена.

Цель: развернуть WildFly 8 в режиме домена с отдельным контроллером домена и двумя хостами, на которых в режиме высокой доступности смогут исполняться по 2 сервера приложений WildFly.

image

Режим домена или автономный режим?

Автономный режим больше подходит для сценариев разработки, когда необходим только один сервер. Только в этом режиме будут работать Arquillian тесты. Так же автономный режим подходит, если вы используете множество WildFly серверов с самописной системой управления серверами.

Режим домена (Domain mode) позволяет централизовано управлять конфигурациями WildFly. Использование домена удобно для развертывания и поддержки кластеров, состоящих из нод WildFly.

Элементы WildFly в режиме домена:
image

В домене можно выделить следующие элементы:

  • Контроллер домена. Сервер приложений, запущенный в режиме домена. Будет исполнять как минимум один процесс контроллера домена. Контроллер домена управляет централизованными конфигурациями, которые распределяются по хостам в домене.
  • Контроллер хоста. Процесс, отвечающий за координацию контроллера домена и жизненного цикла процесов серверов приложений. Через контроллер хоста осуществляется развертывание приложений из контроллера домена на сервера приложений. Фактически хост — это виртуальный или физический сервер.
  • Нода сервера приложений. Обычные java-процессы, которые исполняются на сервере приложений. Каждая нода сервера приложений входит в группу серверов.
  • Группа серверов. Логическое объединение двух хостов для использования разными приложениями. Например можно использовать main-server-group для стабильной версии приложения и other-server-group для разрабатываемой версии. Оба приложения будут работать без точки отказа и будут распределены между двумя хостами.
  • Контроллер процессов. Очень легковесные процессы. Их главная функция — порождать процессы сервера и контроллера хоста и управлять их потоками ввода/вывода.

В случае, если при настройке режима домена что-то идет не так — всегда можно посмотреть логи контроллера хоста (/usr/share/wildfly/domain/log/host-controller.log) и контроллера процессов (/usr/share/wildfly/domain/log/process-controller.log).

Настройка WildFly 8 в режиме домена в InfoboxCloud

1. Создание аккаунта в InfoboxCloud

Если у вас еще нет аккаунта в Облачном конструкторе InfoboxCloud — регистрируйтесь на пробную версию бесплатно. Использование облака идеально для сценариев развертывания JavaEE, так как позволяет в период разработки не использовать лишних ресурсов, а при вводе программных систем в эксплуатацию позволяют гибко адаптировать ресурсы под реальную нагрузку. Облачный конструктор обеспечивает возможность задавать значения CPU, Ram, диска и других ресурсов вне зависимости друг от друга, тем самым создавая сервера, подходящие под вашу задачу.

2. Создание серверов в InfoboxCloud для контроллера домена и хостов

Создайте в облачном конструкторе сервер для контроллера домена и 2х хостов (в случае затруднений можно обратиться к первой части цикла статей. На момент настройки рекомендуется выделить побольше ресурсов каждому создаваемому серверу, а после настройки и развертывания приложений можно найти оптимальный минимум. Это позволит быстрее осуществить установку и настройку WildFly. Так как вы платите только за реально использованные ресурсы в час — настраивать мощные сервера очень приятно и стоит очень недорого. Настройки железной части серверов: контроллера домена и хостов мы сделали такие:

image

На всех хостах мы использовали операционную систему CentOS. После создания серверов на почту придут сгенерированные пароли от серверов. При желании можно изменить их в панели управления сервером. Так же вы вольны перейти на доступ по ключу, что сделает работу с серверами безопаснее и защитит от подбора паролей ботами (не забудьте выключить доступ по паролю в этом случае).

Для того, чтобы не тратить Ваше время на ручную установку WildFly, зависимостей и создания сервиса мы автоматизировали процесс установки. При необходимости ставить WildFly вручную можно посмотреть скрипт установки и понять, что происходит или прислать автору совет, как сделать лучше с имплементацией:)

Для установки WildFly на каждом из трех созданных серверов запустим скрипт:

wget repository.jelasticloud.com/scripts/wildfly8/linux64/wildfly-domain && chmod +x wildfly-domain && ./wildfly-domain && rm -rf wildfly-domain 

После выхода Java 8 в этом посте и в Сообществе InfoboxCloud появятся ссылки на дополнительный скрипт для установки WildFly с JDK 8 в комплекте. Пока устанавливается последняя версия JDK7.

По завершению установки давайте на всех серверах сделаем так, чтобы WildFly стартовал автоматически при загрузке сервера:

chkconfig --add wildfly
chkconfig --level 234 wildfly on

3. Настройка domain.xml контроллера домена

Конфигурация домена задается через файл domain.xml, расположенный в /usr/share/wildfly/domain/configuration. В нем необходимо определить конфигурацию групп серверов (которая может всегда быть измененной в реальном времени).

    <server-groups>
        <server-group name="main-server-group" profile="full">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="full-sockets"/>
        </server-group>
        <server-group name="other-server-group" profile="full">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="full-sockets"/>
        </server-group>
    </server-groups>

Как вы видите, по-умолчанию определены две группы серверов: main-server-group и other-server-group. Для каждой группы установлен profile и socket-binding-group.

WildFly поддерживает четыре преднастроенных профиля:

  • default: Поддерживает Java EE Web-profile и расширения для поддержки REST и EJB remote invocations. Для socket-binding-group должно быть установлено значение «standard-sockets».
  • full: Полностью поддерживает Java EE Full-profile и все возможности сервера приложений без кластеризации. Для socket-binding-group должно быть установлено значение «full-sockets».
  • ha: профиль default со включенной поддержкой кластеризации. Для socket-binding-group должно быть установлено значение «ha-sockets».
  • full-ha: Полный профиль Java EE с поддержкой кластеризации. Для socket-binding-group должно быть установлено значение «full-ha-sockets».

4. Настройка host.xml для контроллера домена

Файл host.xml , находящийся по адресу /usr/share/wildfly/domain/configuration, определяет:

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

В нашей конфигурации домена на этом же хосте не будет запущенных серверов приложений. Мы хотим иметь выделенный контроллер домена. Для этого необходимо удалить содержимое из раздела servers так:

<servers></servers>

Примечание: отказ контроллера домена не приведет к остановке приложений в кластере. Откажет — поднимите другой или восстановите из снапшота. Контроллер домена нужен только для управления доменом и развертывания приложений в него.

Следующим шагом мы должны указать, что контроллер домена исполняется на том же самом хосте. Для этого настроим следующим образом раздел domain-controller в host.xml:

    <domain-controller>
       <local/>
    </domain-controller>

Далее добавим пользователя для управления доменом через /usr/share/wildfly/bin/add-user.sh.
image
Не забудьте сохранить base64 ключ secret value, который утилита напишет после добавления пользователя. Он нам понадобится для настройки хостов. Так же не забудьте на последний вопрос ответить yes, как на скриншоте.

В целях безопасности в производственном использовании рекомендуется ограничить ip, с которого возможно управление доменом. Это можно сделать в файле /usr/share/wildfly/domain/configuration/host.xml, заменив <any-address/> в разделе management на <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> и подставив вместо 127.0.0.1 адрес, с которого допустимо управление доменом.

   <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
           <any-address/>
        </interface>
        <interface name="unsecure">
            <!-- Used for IIOP sockets in the standard configuration.
                 To secure JacORB you need to setup SSL -->
            <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
        </interface>
    </interfaces>

Теперь перезапустим контроллер домена командой

 service wildfly restart 

В панели управления WildFly на порту 9990 по адресу вашего контроллера домена видим, что пока к нему не подключены сервера, на которых будут исполняться наши Java EE приложения.

image

5. Настройка хостов

Настройка хостов проводится в файле host.xml, расположенном по адресу /usr/share/wildfly/domain/configuration.
Зададим уникальное для каждого хоста (в нижеприведенной конфигурации имя — wh0. У другого хоста — wh1. Имена не должны совпадать):

<host name="wh0" xmlns="urn:jboss:domain:2.0">
...
</host>

Укажем, как контроллер хоста будет подключаться к контроллеру домена.

<domain-controller>
       <!-- <local/> -->
       <!-- Alternative remote domain controller configuration with a host and port -->
       <remote host="10.127.5.203" port="9999" username="trukhinyuri" security-realm="ManagementRealm"/>
    </domain-controller>

Не забудьте поменять указанный в конфигурации ip–адрес на адрес вашего хоста. Можно использовать приватный ip-адрес, так как и контроллер домена и хосты исполняются в одном облаке. Так же замените имя пользователя на то, которое Вы указывали при добавлении пользователя управления в контроллер домена через ./add-user.sh.

Пришло время установить секретный base64 ключ для доступа к контроллеру домена. Действуем там же, в host.xml хоста:

<management>
        <security-realms>
            <security-realm name="ManagementRealm">
                <server-identities>
                        <secret value="secretBase64key"/>
                </server-identities>
                ...
            </security-realm>
        </security-realms>
</management>

Последний шаг настройки хостов — изменение раздела server в hosts.xml.
Для первой ноды wh0:

    <servers>
        <server name="server-one" group="main-server-group">
            <!-- Remote JPDA debugging for a specific server
            <jvm name="default">
              <jvm-options>
                <option value="-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"/>
              </jvm-options>
           </jvm>
           -->
        </server>
        <server name="server-two" group="other-server-group" auto-start="false">
            <!-- server-two avoids port conflicts by incrementing the ports in
                 the default socket-group declared in the server-group -->
            <socket-bindings port-offset="150"/>
        </server>
    </servers>

для второй ноды wh1:

    <servers>
        <server name="server-three" group="other-server-group">
            <!-- Remote JPDA debugging for a specific server
            <jvm name="default">
              <jvm-options>
                <option value="-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"/>
              </jvm-options>
           </jvm>
           -->
        </server>
        <server name="server-four" group="main-server-group" auto-start="false">
            <!-- server-two avoids port conflicts by incrementing the ports in
                 the default socket-group declared in the server-group -->
            <socket-bindings port-offset="150"/>
        </server>
    </servers>

Все готово. Перезагрузим хосты:

service wildfly restart

Теперь снова зайдем в панель управления контроллером домена:

image
Мы видим, что хосты появились и можно ими управлять или разворачивать на них приложения. Для серверов приложений 2 и 4 мы сознательно в разделе servers файла hosts.xml выключили автоматический старт. Попробуйте запустить их из панели управления контроллера домена.

В этой статье был успешно настроен WildFly 8 в режиме контроллера домена в Облачном конструкторе InfoboxCloud. Мы оставили за кадром настройку балансировщика и много других деталей, о которых поговорим в следующих статьях. По любым вопросам с настройкой можно писать автору на Юрию Трухину или в Сообщество InfoboxCloud на Facebook. Успешной работы!

Автор: infobox

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js