Введение
wildfly — очень мощный инструмент, мы можем легко развертывать приложения с помощью wildfly, и, что еще более мощно, wildfly может легко развертывать кластерные приложения.
Сегодня мы используем пример, чтобы объяснить, как wildfly создает кластерное приложение.
Скачать программное обеспечение и сопутствующие компоненты
Если у нас есть два хоста, один из которых называется master, а другой — slave, нам нужно установить wildfly на два хоста и настроить их в режиме домена. Затем вам нужно установить mod_cluster и httpd на узле контроллера домена, чтобы сформировать кластер.
Для начала нам нужно скачать wildfly-21.0.0.Final.zip, после распаковки запустить domain.sh для включения режима домена.
настроить домен
Нам нужно настроить мастер как контроллер домена.Согласно нашей предыдущей статье, чтобы сначала настроить интерфейсы, нам нужно изменить domain/configuration/host.xml:
<interfaces>
<interface name="management"
<inet-address value="${jboss.bind.address.management:10.211.55.7}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:10.211.55.7}"/>
</interface>
<interface name="unsecured">
<inet-address value="10.211.55.7" />
</interface>
</interfaces>
Поскольку IP-адрес нашего мастера — 10.211.55.7, нам нужно изменить соответствующее значение. Здесь используется внешний IP-адрес ведущего, чтобы ведомое устройство могло подключиться к ведущему.
Точно так же нам нужно изменить значение интерфейса подчиненного устройства:
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:10.211.55.2}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:10.211.55.2}"/>
</interface>
<interface name="unsecured">
<inet-address value="10.211.55.2" />
</interface>
</interfaces>
Также необходимо изменить соответствующий IP-адрес.
Далее нужно изменить имя хоста:
//master
<host name="master" xmlns="urn:jboss:domain:3.0">
//slave
<host name="slave" xmlns="urn:jboss:domain:3.0">
В слейве нам также нужно настроить домен-контроллер, чтобы слейв мог подключаться к мастеру:
<domain-controller>
<remote security-realm="ManagementRealm" >
<discovery-options>
<static-discovery name="master-native" protocol="remote" host="10.211.55.7" port="9999" />
<static-discovery name="master-https" protocol="https-remoting" host="10.211.55.7" port="9993" security-realm="ManagementRealm"/>
<static-discovery name="master-http" protocol="http-remoting" host="10.211.55.7" port="9990" />
</discovery-options>
</remote>
</domain-controller>
Далее нам нужно создать область безопасности для соединения, с помощью команды add-user.sh мы можем создать добавленного пользователя.
Здесь мы создаем двух пользователей, первый пользователь называется admin, он используется для управления доменом.
Второй пользователь называется ведомым, и этот пользователь используется ведомым для подключения к ведущему.
Помните, как использовалась команда add-user.sh? Вот результат создания пользователя-администратора:
./add-user.sh
Enter the details of the new user to add.
Realm (ManagementRealm) :
Username : admin
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
- The password should not be one of the following restricted values {root, admin, administrator}
- The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
- The password should be different from the username
Password : passw0rd!
Re-enter Password : passw0rd!
The username 'admin' is easy to guess
Are you sure you want to add user 'admin' yes/no? yes
About to add user 'admin' for realm 'ManagementRealm'
Is this correct yes/no? yes
Если вы являетесь ведомым пользователем, вам нужно ответить «да» на следующий вопрос.
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes
To represent the user add the following to the server-identities definition <secret value="cGFzc3cwcmQh" />
С подчиненным пользователем мы можем использовать этого пользователя для настройки ManagementRealm подчиненного устройства:
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="cGFzc3cwcmQh" />
<!-- This is required for SSL remoting -->
<ssl>
<keystore path="server.keystore" relative-to="jboss.domain.config.dir" keystore-password="jbossas" alias="jboss" key-password="jbossas"/>
</ssl>
</server-identities>
<authentication>
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
</security-realm>
</security-realms>
После этой конфигурации можно соединить ведомое и ведущее устройства.
Создать приложение
Здесь я ссылаюсь на демо-программу официального сайта. На самом деле это очень простое веб-приложение. кодовый адресGitHub.com/Ли Вейнан/За исключением….
Давайте кратко объясним. Основная логика кода заключается в том, чтобы сохранить данные о времени в сеансе, а затем попытаться получить их с разных серверов, чтобы убедиться, что они непротиворечивы. Если они непротиворечивы, кластер кластера действителен.
//设置session的值
session.setAttribute("current.time", new java.util.Date());
//获取session的值
session.getAttribute("current.time")
Самое важное в кластере — это совместное использование сеансов, или репликация сеансов. Мы можем просто использовать распространяемый тег в web.xml.
<web-app>
<display-name>Archetype Created Web Application</display-name>
<distributable/>
</web-app>
Это все для нашего приложения.
Развернуть приложение
На этот раз мы развертываем приложение из веб-консоли.
Открытымhttp://10.211.55.7:9990, введите имя пользователя и пароль администратора, которые мы создали для входа в интерфейс управления.
По умолчанию создаются 3 сервиса: сервер-один, сервер-два и сервер-три.
server-one, server-two запускаются по умолчанию, они принадлежат к main-server-group. И сервер-3 не запущен, он принадлежит другой группе-серверов.
Давайте посмотрим на конфигурацию other-server-group:
<server-group name="other-server-group" profile="full-ha">
<jvm name="default">
<heap size="64m" max-size="512m"/>
</jvm>
<socket-binding-group ref="full-ha-sockets"/>
</server-group>
Профиль, используемый группой other-server-group, — full-ha.Из названия видно, что весь профиль предназначен для обеспечения высокой доступности. Так что же такого особенного в этом профиле?
<profile name="full-ha">
...
<subsystem xmlns="urn:jboss:domain:modcluster:5.0">
<proxy name="default" advertise-socket="modcluster" listener="ajp">
<dynamic-load-provider>
<load-metric type="cpu"/>
</dynamic-load-provider>
</proxy>
</subsystem>
<subsystem xmlns="urn:jboss:domain:infinispan:11.0">
...
</subsystem>
<subsystem xmlns="urn:jboss:domain:jgroups:8.0">
<channels default="ee">
<channel name="ee" stack="udp" cluster="ejb"/>
</channels>
<stacks>
<stack name="udp">
...
</stack>
<stack name="tcp">
...
</stack>
</stacks>
</subsystem>
...
</profile>
С ha в этом профиле связаны infinispan, jgroup и modcluster. Благодаря этим компонентам мухи могут образовывать кластеры.
Поскольку сервер-3 остановлен по умолчанию, нам нужно запустить их отдельно в главном и подчиненном.
На странице Manage Deployments нажмите Add Content, затем выберите наше предыдущее демонстрационное приложение cluster-demo.war и загрузите его.
Итак, программа развернута, и мы можем получить доступ:
http://10.211.55.7:8330/cluster-demo/иhttp://10.211.55.2:8330/cluster-demo/для просмотра страницы приложения.
Пока два приложения еще независимы и не объединены в кластер, далее настроим кластер.
Еще один момент, который следует отметить, это то, что нам нужно изменить сервер-3 в ведущем и ведомом на другое имя, Если это одно и то же имя, то mod_cluster, который мы используем позже, сообщит об ошибке, потому что в нем нет разных имен. одна и та же группа серверов.Допускается два одинаковых имени.
<server name="server-three" group="other-server-group" auto-start="true">
<socket-bindings port-offset="250"/>
</server>
<server name="server-three-slave" group="other-server-group" auto-start="true">
<socket-bindings port-offset="250"/>
</server>
Конфигурация кластера
После развертывания программного обеспечения нам нужно использовать mod_cluster + apache httpd на главной машине, чтобы включить функцию кластера.
Сначала установите httpd:
sudo yum install httpd
Затем загрузите mod_cluster:
http://www.jboss.org/mod_cluster/downloads
Извлеките его в /etc/httpd/modules, затем измените /etc/httpd/conf/httpd.conf.
Добавьте следующие модули:
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so
и закомментируйте следующие модули:
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
Поскольку proxy_balancer_module конфликтует с proxy_cluster_module.
Затем измените httpd, чтобы он прослушивал 10.211.55.7:80.
Наконец, настройте порт прослушивания mod_cluster-manager в httpd.conf:
<VirtualHost 10.211.55.7:10001>
<Directory />
Order deny,allow
Deny from all
Allow from 10.211.55.
</Directory>
# This directive allows you to view mod_cluster status at URL http://10.211.55.4:10001/mod_cluster-manager
<Location /mod_cluster-manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from 10.211.55.
</Location>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName other-server-group
AdvertiseFrequency 5
</VirtualHost>
Мы можем использовать службу httpd start, чтобы запустить службу httpd.
мы можем получить доступhttp://10.211.55.7/cluster-demo/для доступа к службе кластера.
Обратите внимание, что хотя это кластерный режим, все наши запросы должны сначала направляться на ГЛАВНУЮ машину.
Суммировать
Wildfly имеет встроенную поддержку многих мощных компонентов и достоин того, чтобы быть образцом отраслевых стандартов. ценить обучение.
Автор статьи: о программе flydean
Ссылка на эту статью:Ву Ву Floyd Press.com/wild fly-way out…
Источник этой статьи: блог flydean
Добро пожаловать на мой официальный аккаунт: самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!