В первой части мы развернули WildFly 8 в Облачный конструктор InfoboxCloud в режиме Standalone. Давайте посмотрим, как можно развернуть WildFly 8 в режиме домена.
Цель: развернуть WildFly 8 в режиме домена с отдельным контроллером домена и двумя хостами, на которых в режиме высокой доступности смогут исполняться по 2 сервера приложений WildFly.
Режим домена или автономный режим?
Автономный режим больше подходит для сценариев разработки, когда необходим только один сервер. Только в этом режиме будут работать Arquillian тесты. Так же автономный режим подходит, если вы используете множество WildFly серверов с самописной системой управления серверами.
Режим домена (Domain mode) позволяет централизовано управлять конфигурациями WildFly. Использование домена удобно для развертывания и поддержки кластеров, состоящих из нод WildFly.
Элементы WildFly в режиме домена:
В домене можно выделить следующие элементы:
- Контроллер домена. Сервер приложений, запущенный в режиме домена. Будет исполнять как минимум один процесс контроллера домена. Контроллер домена управляет централизованными конфигурациями, которые распределяются по хостам в домене.
- Контроллер хоста. Процесс, отвечающий за координацию контроллера домена и жизненного цикла процесов серверов приложений. Через контроллер хоста осуществляется развертывание приложений из контроллера домена на сервера приложений. Фактически хост — это виртуальный или физический сервер.
- Нода сервера приложений. Обычные 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. Так как вы платите только за реально использованные ресурсы в час — настраивать мощные сервера очень приятно и стоит очень недорого. Настройки железной части серверов: контроллера домена и хостов мы сделали такие:
На всех хостах мы использовали операционную систему 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.
Не забудьте сохранить 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 приложения.
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
Теперь снова зайдем в панель управления контроллером домена:
Мы видим, что хосты появились и можно ими управлять или разворачивать на них приложения. Для серверов приложений 2 и 4 мы сознательно в разделе servers файла hosts.xml выключили автоматический старт. Попробуйте запустить их из панели управления контроллера домена.
В этой статье был успешно настроен WildFly 8 в режиме контроллера домена в Облачном конструкторе InfoboxCloud. Мы оставили за кадром настройку балансировщика и много других деталей, о которых поговорим в следующих статьях. По любым вопросам с настройкой можно писать автору на Юрию Трухину или в Сообщество InfoboxCloud на Facebook. Успешной работы!
Автор: infobox