Руководство по установке Red Hat JBoss EAP в Azure Виртуальные машины вручную
В этом руководстве показано, как установить Red Hat JBoss EAP и настроить кластер в режиме домена в azure Виртуальные машины (виртуальных машинах) в Red Hat Enterprise Linux (RHEL).
Из этого руководства вы узнаете, как выполнять такие задачи:
- Создайте пользовательскую виртуальную сеть и создайте виртуальные машины в сети.
- Установите требуемый JDK и Red Hat JBoss EAP на виртуальных машинах с помощью командной строки вручную.
- Настройте кластер Red Hat JBoss EAP в режиме домена с помощью интерфейса командной строки (CLI).
- Настройте подключение к источнику данных PostgreSQL в кластере.
- Разверните и запустите пример приложения Java EE в кластере.
- Предоставление приложению общедоступному Интернету через Шлюз приложений Azure.
- Проверьте успешную конфигурацию.
Если вы предпочитаете полностью автоматизированное решение, которое выполняет все эти действия от вашего имени на виртуальных машинах GNU/Linux непосредственно из портал Azure, см. краткое руководство. Развертывание сервера JBoss EAP на виртуальной машине Azure с помощью портал Azure.
Примечание.
Эта статья содержит упоминания термина slave (ведомый) . Корпорация Майкрософт больше не использует его. Когда этот термин будет удален из программного обеспечения, мы удалим его из статьи.
Необходимые компоненты
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.
Установите Azure CLI версии 2.51.0 или более поздней , чтобы выполнить команды Azure CLI.
- Если появится запрос, установите расширения Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
- Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Убедитесь, что у вас есть необходимые лицензии Red Hat. У вас должна быть учетная запись Red Hat с правами Red Hat Subscription Management (RHSM) для Red Hat JBoss EAP. Это право позволяет полностью автоматизированному решению упоминание ранее (в развертывании сервера JBoss EAP на виртуальной машине Azure с помощью портал Azure) установить проверенную и сертифицированную версию JBoss EAP Red Hat.
Примечание.
Если у вас нет прав на EAP, вы можете зарегистрироваться для получения бесплатной подписки разработчика через подписку Red Hat developer для частных лиц. Запишите сведения об учетной записи, которая используется в качестве имени пользователя RHSM и пароля RHSM в следующем разделе.
Если вы уже зарегистрированы или после завершения регистрации, вы можете найти необходимые учетные данные (идентификаторы пула), выполнив следующие действия. Эти идентификаторы пула также используются в качестве идентификатора пула RHSM с правами EAP в последующих шагах.
Войдите в учетную запись Red Hat.
При первом входе вам будет предложено завершить профиль. В зависимости от использования выберите "Персональный" или"Корпоративный" для типа учетной записи, как показано на следующем снимке экрана:
Откройте подписку разработчика Red Hat для частных лиц. Эта ссылка позволяет вам перейти ко всем подпискам в учетной записи для соответствующего номера SKU.
В строке элементов управления в таблице "Все приобретенные подписки" выберите "Активный". Это гарантирует, что отображаются только активные подписки.
Выберите заголовок столбца сортировки для даты окончания до тех пор, пока в будущем значение не будет отображаться как первая строка.
Выделите первую строку. Затем скопируйте и запишите значение следующих главных пулов из идентификаторов пулов.
Java JDK версии 11. В этом руководстве мы рекомендуем Red Hat Build of OpenJDK. Убедитесь, что
JAVA_HOME
переменная среды правильно задана в оболочках, в которых выполняются команды.Git; используется
git --version
для проверки того, работает лиgit
работа. Это руководство было протестировано с версией 2.25.1.Maven; используется
mvn -version
для проверки того, работает лиmvn
работа. Это руководство было протестировано с версией 3.6.3.
Подготовка среды
В этом разделе описана настройка инфраструктуры, в которой устанавливается JDK, Red Hat JBoss EAP и драйвер JDBC PostgreSQL.
Предположения
В этом руководстве настраивается кластер Red Hat JBoss EAP в режиме домена с сервером администрирования и двумя управляемыми серверами в общей сложности на трех виртуальных машинах. Чтобы настроить кластер, необходимо создать следующие три виртуальных машины Azure:
- Виртуальная машина администратора (имя
adminVM
виртуальной машины) выполняется в качестве контроллера домена. - Две управляемые виртуальные машины (имена
mspVM1
виртуальных машин иmspVM2
) выполняются в качестве контроллера узла.
Вход в Azure
Если вы еще не сделали этого, войдите в подписку Azure с помощью команды az login и следуя инструкциям на экране.
az login
Примечание.
Если у вас несколько клиентов Azure, связанных с учетными данными Azure, необходимо указать, в какой клиент вы хотите войти. Это можно сделать с --tenant
помощью параметра. Например, az login --tenant contoso.onmicrosoft.com
.
Создание или изменение группы ресурсов
Создайте группу ресурсов с помощью команды az group create. Имена групп ресурсов должны быть глобально уникальными в подписке. По этой причине рекомендуется указать уникальный идентификатор для всех созданных имен, которые должны быть уникальными. Полезный способ — использовать ваши инициалы, за которыми следует сегодняшняя дата в mmdd
формате. В этом примере создается группа ресурсов с именем abc1110rg
в расположении eastus
:
az group create \
--name abc1110rg \
--location eastus
Создание виртуальной сети
Ресурсы, состоящие из кластера Red Hat JBoss EAP, должны взаимодействовать друг с другом и общедоступным Интернетом, используя виртуальную сеть. Полное руководство по планированию виртуальной сети см. в руководстве По планированию виртуальных сетей в Cloud Adoption Framework для Azure. Дополнительные сведения см. в статье azure виртуальная сеть часто задаваемые вопросы.
В этом разделе создается виртуальная сеть с адресным пространством 192.168.0.0/16
и создается подсеть, используемая для виртуальных машин.
Сначала создайте виртуальную сеть с помощью az network vnet create. В следующем примере создается сеть с именем myVNet
:
az network vnet create \
--resource-group abc1110rg \
--name myVNet \
--address-prefixes 192.168.0.0/24
Создайте подсеть для кластера Red Hat JBoss EAP с помощью az network vnet subnet create. В следующем примере создается подсеть с именем mySubnet
az network vnet subnet create \
--resource-group abc1110rg \
--name mySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.0/25
Создайте подсеть для Шлюз приложений с помощью az network vnet subnet create. В следующем примере создается подсеть с именем jbossVMGatewaySubnet
az network vnet subnet create \
--resource-group abc1110rg \
--name jbossVMGatewaySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.128/25
Создайте группу безопасности сети и назначьте ей подсети.
Перед созданием виртуальных машин с общедоступными IP-адресами создайте группу безопасности сети (NSG), чтобы защитить виртуальную сеть и подсети, созданные ранее.
Создайте группу безопасности сети с помощью команды az network nsg create. В следующем примере создается группа безопасности сети с именем mynsg
.
az network nsg create \
--resource-group abc1110rg \
--name mynsg
Создайте правила группы безопасности сети с помощью az network nsg rule create. В следующем примере создаются правила группы безопасности сети с именем ALLOW_APPGW
и ALLOW_HTTP_ACCESS
. Эти правила позволяют шлюзу приложений принимать входящий трафик на HTTP-портах, используемых Red Hat JBoss EAP:
az network nsg rule create \
--resource-group abc1110rg \
--nsg-name mynsg \
--name ALLOW_APPGW \
--protocol Tcp \
--destination-port-ranges 65200-65535 \
--source-address-prefix GatewayManager \
--destination-address-prefix '*' \
--access Allow \
--priority 500 \
--direction Inbound
az network nsg rule create \
--resource-group abc1110rg \
--nsg-name mynsg \
--name ALLOW_HTTP_ACCESS \
--protocol Tcp \
--destination-port-ranges 22 80 443 9990 8080 \
--source-address-prefix Internet \
--destination-address-prefix '*' \
--access Allow \
--priority 510 \
--direction Inbound
Свяжите подсети, созданные ранее с этой группой безопасности сети, с помощью az network vnet subnet update, как показано в следующем примере:
az network vnet subnet update \
--resource-group abc1110rg \
--vnet-name myVNet \
--name mySubnet \
--network-security-group mynsg
az network vnet subnet update \
--resource-group abc1110rg \
--vnet-name myVNet \
--name jbossVMGatewaySubnet \
--network-security-group mynsg
Создание компьютера Red Hat Enterprise Linux для администратора
Создание виртуальной машины администратора
Образ Marketplace, используемый для создания виртуальных машин, — это RedHat:rhel-raw:86-gen2:latest
. Другие образы см. в статьях Red Hat Enterprise Linux (RHEL), доступных в Azure.
Примечание.
Вы можете запросить все доступные образы Red Hat Enterprise Linux, предоставляемые Red Hat, с помощью команды az vm image list , например: az vm image list --offer RHEL --publisher RedHat --output table --all
Дополнительные сведения см. в разделе "Обзор образов Red Hat Enterprise Linux".
При использовании другого образа может потребоваться установить дополнительные библиотеки, чтобы включить инфраструктуру, используемую в этом руководстве.
Создайте базовую виртуальную машину, установите на нее все необходимые средства, создайте моментальный снимок и создайте реплика на основе моментального снимка.
Создайте виртуальную машину, выполнив команду az vm create. На этой виртуальной машине запущен сервер Администратор istration.
В следующем примере создается виртуальная машина Red Hat Enterprise Linux с использованием имени пользователя и пары паролей для проверки подлинности. При желании можно использовать проверку подлинности TLS/SSL.
az vm create \
--resource-group abc1110rg \
--name adminVM \
--image RedHat:rhel-raw:86-gen2:latest \
--size Standard_DS1_v2 \
--admin-username azureuser \
--admin-password Secret123456 \
--public-ip-sku Standard \
--nsg mynsg \
--vnet-name myVnet \
--subnet mySubnet
Установка OpenJDK 11 и Red Hat JBoss EAP 7.4
Чтобы установить, выполните следующие действия.
Используйте следующую команду, чтобы получить общедоступный IP-адрес
adminVM
:export ADMIN_VM_PUBLIC_IP=$(az vm show \ --resource-group abc1110rg \ --name adminVM \ --show-details \ --query publicIps | tr -d '"')
Откройте терминал и SSH
adminVM
, выполнив следующую команду:ssh azureuser@$ADMIN_VM_PUBLIC_IP
Укажите
Secret123456
пароль.Настройте брандмауэр для портов с помощью следующей команды:
sudo firewall-cmd --zone=public --add-port={9999/tcp,8443/tcp,8009/tcp,8080/tcp,9990/tcp,9993/tcp,45700/tcp,7600/tcp} --permanent sudo firewall-cmd --reload sudo iptables-save
Вы увидите слово
success
после первых двух команд. Вы должны увидеть выходные данные, аналогичные следующему примеру после третьей команды:# Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *filter :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *security :INPUT ACCEPT [19:3506] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [5:492] -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m owner --uid-owner 0 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m conntrack --ctstate INVALID,NEW -j DROP COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *raw :PREROUTING ACCEPT [20:3546] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *mangle :PREROUTING ACCEPT [20:3546] :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] :POSTROUTING ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *nat :PREROUTING ACCEPT [1:40] :INPUT ACCEPT [0:0] :POSTROUTING ACCEPT [4:240] :OUTPUT ACCEPT [4:240] COMMIT # Completed on Wed Mar 29 22:39:23 2023
Используйте следующие команды, чтобы зарегистрировать узел администратора в учетной записи Управления подписками Red Hat (RHSM):
export RHSM_USER=<your-rhsm-username> export RHSM_PASSWORD="<your-rhsm-password>" export EAP_POOL=<your-rhsm-pool-ID> sudo subscription-manager register --username ${RHSM_USER} --password ${RHSM_PASSWORD} --force
Выходные данные должны соответствовать следующему примеру.
Registering to: subscription.rhsm.redhat.com:443/subscription The system has been registered with ID: redacted The registered system name is: adminVM
Используйте следующую команду, чтобы подключить узел администратора к пулу Red Hat JBoss EAP:
sudo subscription-manager attach --pool=${EAP_POOL}
Примечание.
Эта команда игнорируется, если вы используете режим простого доступа к содержимому.
Используйте следующую команду, чтобы установить OpenJDK 11:
sudo yum install java-11-openjdk -y
Вы должны увидеть множество строк выходных данных, заканчивая
Complete!
Используйте следующие команды для установки Red Hat JBoss EAP 7.4:
sudo subscription-manager repos --enable=jb-eap-7.4-for-rhel-8-x86_64-rpms sudo yum update -y --disablerepo='*' --enablerepo='*microsoft*' sudo yum groupinstall -y jboss-eap7
Для второй и третьей команд вы увидите множество строк выходных данных, заканчивающиеся на
Complete!
Используйте следующие команды, чтобы задать разрешения и конфигурации TCP:
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config echo 'AllowTcpForwarding no' | sudo tee -a /etc/ssh/sshd_config sudo systemctl restart sshd
Используйте следующие команды для настройки переменных среды:
echo 'export EAP_RPM_CONF_DOMAIN="/etc/opt/rh/eap7/wildfly/eap7-domain.conf"' >> ~/.bash_profile echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' >> ~/.bash_profile source ~/.bash_profile sudo touch /etc/profile.d/eap_env.sh echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' | sudo tee -a /etc/profile.d/eap_env.sh
Выход из подключения SSH путем ввода выхода.
Создание компьютеров для управляемых серверов
Вы установили OpenJDK 11 и Red Hat JBoss EAP 7.4, adminVM
на котором работает сервер контроллера домена. Вам по-прежнему нужно подготовить компьютеры для запуска двух серверов контроллера узла. Затем вы создадите моментальный снимок adminVM
и подготовите компьютеры для двух управляемых mspVM1
узлов и mspVM2
.
В этом разделе представлен подход к подготовке компьютеров с помощью моментального снимка adminVM
. Вернитесь в терминал с вошедшего в систему Azure CLI, а затем выполните следующие действия.
Для остановки
adminVM
используйте следующую команду:az vm stop --resource-group abc1110rg --name adminVM
Используйте az snapshot create для создания моментального снимка
adminVM
диска ОС, как показано в следующем примере:export ADMIN_OS_DISK_ID=$(az vm show \ --resource-group abc1110rg \ --name adminVM \ --query storageProfile.osDisk.managedDisk.id \ --output tsv) az snapshot create \ --resource-group abc1110rg \ --name myAdminOSDiskSnapshot \ --source ${ADMIN_OS_DISK_ID}
Чтобы запустить
adminVM
следующую команду, выполните следующую команду:az vm start --resource-group abc1110rg --name adminVM
Чтобы создать
mspVM1
следующие действия, выполните следующие действия.Сначала создайте управляемый диск для
mspVM1
az disk create:#Get the snapshot ID export SNAPSHOT_ID=$(az snapshot show \ --name myAdminOSDiskSnapshot \ --resource-group abc1110rg \ --query '[id]' \ --output tsv) #Create a new Managed Disks using the snapshot Id #Note that managed disk is created in the same location as the snapshot az disk create \ --resource-group abc1110rg \ --name mspVM1_OsDisk_1 \ --source ${SNAPSHOT_ID}
Затем используйте следующие команды для создания виртуальной машины
mspVM1
, подключения дискаmspVM1_OsDisk_1
ОС:#Get the resource Id of the managed disk export MSPVM1_DISK_ID=$(az disk show \ --name mspVM1_OsDisk_1 \ --resource-group abc1110rg \ --query '[id]' \ --output tsv) #Create VM by attaching existing managed disks as OS az vm create \ --resource-group abc1110rg \ --name mspVM1 \ --attach-os-disk ${MSPVM1_DISK_ID} \ --os-type linux \ --public-ip-sku Standard \ --nsg mynsg \ --vnet-name myVnet \ --subnet mySubnet
Вы создали
mspVM1
с помощью OpenJDK 11 и Red Hat JBoss EAP 7.4. Так как виртуальная машина была создана на основе моментального снимкаadminVM
диска ОС, две виртуальные машины имеют одно и то же имя узла. Используйте az vm run-command invoke , чтобы изменить имя узла на значениеmspVM1
:az vm run-command invoke \ --resource-group abc1110rg \ --name mspVM1 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM1"
После успешного завершения команды вы увидите выходные данные, аналогичные следующему примеру:
{ "value": [ { "code": "ProvisioningState/succeeded", "displayStatus": "Provisioning succeeded", "level": "Info", "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n", "time": null } ] }
Используйте те же команды для создания
mspVM2
:#Create a new Managed Disks for mspVM2 az disk create \ --resource-group abc1110rg \ --name mspVM2_OsDisk_1 \ --source ${SNAPSHOT_ID} #Get the resource Id of the managed disk export MSPVM2_DISK_ID=$(az disk show \ --name mspVM2_OsDisk_1 \ --resource-group abc1110rg \ --query '[id]' \ --output tsv) #Create VM by attaching existing managed disks as OS az vm create \ --resource-group abc1110rg \ --name mspVM2 \ --attach-os-disk ${MSPVM2_DISK_ID} \ --os-type linux \ --public-ip-sku Standard \ --nsg mynsg \ --vnet-name myVnet \ --subnet mySubnet #Set hostname az vm run-command invoke \ --resource-group abc1110rg \ --name mspVM2 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM2"
Используйте следующие команды, чтобы получить и показать частные IP-адреса, которые используются в последующих разделах:
export ADMINVM_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name adminVM \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export ADMINVM_IP=$(az network nic show \
--ids ${ADMINVM_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM1_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name mspVM1 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM1_IP=$(az network nic show \
--ids ${MSPVM1_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM2_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name mspVM2 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM2_IP=$(az network nic show \
--ids ${MSPVM2_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
echo "Private IP of adminVM: ${ADMINVM_IP}"
echo "Private IP of mspVM1: ${MSPVM1_IP}"
echo "Private IP of mspVM2: ${MSPVM2_IP}"
Теперь все три компьютера готовы. Затем вы настроите кластер Red Hat JBoss EAP в режиме управляемого домена.
Настройка управляемого домена и кластера
Настройте кластер с включенным реплика сеанса. Дополнительные сведения см. в разделе "Репликация сеансов".
Чтобы включить реплика сеанса, используйте Red Hat JBoss EAP Высокий уровень доступности для кластера. Microsoft Azure не поддерживает протоколы обнаружения JGroups, основанные на многоадресной рассылке UDP. Хотя вы можете использовать другие протоколы обнаружения JGroups (например, статическую конфигурацию), общую базу данных (TCPPING
), общую файловую систему на основе ping (JDBC_PING
FILE_PING
) или TCPGOSSIP
), настоятельно рекомендуем использовать протокол обнаружения общих файлов, специально разработанный для Azure: AZURE_PING
Дополнительные сведения см. в статье Об использовании высокого уровня доступности JBoss EAP в Microsoft Azure.
Создание учетной записи хранения Azure и контейнера BLOB-объектов для AZURE_PING
Используйте следующие команды для создания учетной записи хранения и контейнера BLOB-объектов:
# Define your storage account name
export STORAGE_ACCOUNT_NAME=azurepingstgabc1110rg
# Define your Blob container name
export CONTAINER_NAME=azurepingcontainerabc1110rg
# Create storage account
az storage account create \
--resource-group abc1110rg \
--name ${STORAGE_ACCOUNT_NAME} \
--location eastus \
--sku Standard_LRS \
--kind StorageV2 \
--access-tier Hot
Затем получите ключ учетной записи хранения для последующего использования с помощью следующей команды. Если вы видите ошибку, подождите несколько минут и повторите попытку. Ошибка может быть вызвана предыдущей командой, чтобы создать учетную запись хранения не полностью завершена.
export STORAGE_ACCESS_KEY=$(az storage account keys list \
--resource-group abc1110rg \
--account-name ${STORAGE_ACCOUNT_NAME} \
--query "[0].value" \
--output tsv)
# Create blob container
az storage container create \
--name ${CONTAINER_NAME} \
--account-name ${STORAGE_ACCOUNT_NAME} \
--account-key ${STORAGE_ACCESS_KEY}
Должен появиться следующий результат:
{
"created": true
}
Настройка контроллера домена (узел администратора)
В этом руководстве используются команды командной строки управления Red Hat JBoss EAP для настройки контроллера домена. Дополнительные сведения см. в руководстве по интерфейсу командной строки управления.
Ниже приведены действия по настройке конфигурации adminVM
контроллера домена. Используйте SSH для подключения к adminVM
пользователю azureuser
. Помните, что общедоступный IP-адрес adminVM
был записан ранее в ADMIN_VM_PUBLIC_IP
переменную среды.
ssh azureuser@$ADMIN_VM_PUBLIC_IP
Сначала используйте следующие команды, чтобы настроить профиль высокого уровня доступности и JGroups с помощью AZURE_PING
протокола:
export HOST_VM_IP=$(hostname -I)
export STORAGE_ACCOUNT_NAME=azurepingstgabc1110rg
export CONTAINER_NAME=azurepingcontainerabc1110rg
export STORAGE_ACCESS_KEY=<the-value-from-before-you-connected-with-SSH>
#-Configure the HA profile and JGroups using AZURE_PING protocol
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
'embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-master.xml',\
':write-attribute(name=name,value=domain1)',\
'/profile=ha/subsystem=jgroups/stack=tcp:remove',\
'/profile=ha/subsystem=jgroups/stack=tcp:add()',\
'/profile=ha/subsystem=jgroups/stack=tcp/transport=TCP:add(socket-binding=jgroups-tcp,properties={ip_mcast=false})',\
"/profile=ha/subsystem=jgroups/stack=tcp/protocol=azure.AZURE_PING:add(properties={storage_account_name=\"${STORAGE_ACCOUNT_NAME}\", storage_access_key=\"${STORAGE_ACCESS_KEY}\", container=\"${CONTAINER_NAME}\"})",\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MERGE3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_ALL:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=VERIFY_SUSPECT:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.NAKACK2:add(properties={use_mcast_xmit=false,use_mcast_xmit_req=false})',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=UNICAST3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.STABLE:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.GMS:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MFC:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FRAG3:add',\
'/profile=ha/subsystem=jgroups/channel=ee:write-attribute(name="stack", value="tcp")',\
'/server-group=main-server-group:write-attribute(name="profile", value="ha")',\
'/server-group=main-server-group:write-attribute(name="socket-binding-group", value="ha-sockets")',\
"/host=master/subsystem=elytron/http-authentication-factory=management-http-authentication:write-attribute(name=mechanism-configurations,value=[{mechanism-name=DIGEST,mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])",\
"/host=master/interface=unsecure:add(inet-address=${HOST_VM_IP})",\
"/host=master/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=master/interface=public:add(inet-address=${HOST_VM_IP})"
# Save a copy of the domain.xml, later you need to share it with all host controllers
cp $EAP_HOME/wildfly/domain/configuration/domain.xml /tmp/domain.xml
Последний строф выходных данных должен выглядеть примерно так, как показано в следующем примере. Если это не так, устраните и устраните проблему перед продолжением.
[domain@embedded /] /host=master/interface=public:add(inet-address=192.168.0.4 )
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined,
"response-headers" => {"process-state" => "reload-required"}
}
02:05:55,019 INFO [org.jboss.as] (MSC service thread 1-1) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 28ms
Затем выполните следующие команды, чтобы настроить сервер JBoss и настроить службу EAP:
# Configure the JBoss server and setup EAP service
echo 'WILDFLY_HOST_CONFIG=host-master.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN
# Configure JBoss EAP management user
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
sudo $EAP_HOME/wildfly/bin/add-user.sh -u $JBOSS_EAP_USER -p $JBOSS_EAP_PASSWORD -g 'guest,mgmtgroup'
Результат должен выглядеть следующим образом:
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-users.properties'
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-users.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-groups.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-groups.properties'
Наконец, используйте следующие команды, чтобы запустить службу EAP:
# Start the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service
# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service
# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service
# Check the status of EAP service
systemctl status eap7-domain.service
Результат должен выглядеть следующим образом:
● eap7-domain.service - JBoss EAP (domain mode)
Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
Active: active (running) since Thu 2023-03-30 02:11:44 UTC; 5s ago
Main PID: 3855 (scl)
Tasks: 82 (limit: 20612)
Memory: 232.4M
CGroup: /system.slice/eap7-domain.service
├─3855 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
├─3856 /bin/bash /var/tmp/sclfYu7yW
├─3858 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
├─3862 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
├─3955 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
└─3967 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>
Mar 30 02:11:44 adminVM systemd[1]: Started JBoss EAP (domain mode).
Введите q , чтобы выйти из пейджера. Выход из подключения SSH путем ввода выхода.
После запуска службы Red Hat JBoss EAP вы можете получить доступ к консоль управления через http://$ADMIN_VM_PUBLIC_IP:9990
веб-браузер. Войдите с настроенным именем пользователя jbossadmin
и паролем Secret123456
.
Перейдите на вкладку "Среда выполнения ". В области навигации выберите "Топология". Теперь кластер содержит только один контроллер домена:
Настройка контроллеров узлов (рабочих узлов)
Используйте SSH для подключения к mspVM1
пользователю azureuser
. Получите общедоступный IP-адрес виртуальной машины с помощью следующей команды:
MSPVM_PUBLIC_IP=$(az vm show \
--resource-group abc1110rg \
--name mspVM1 \
--show-details \
--query publicIps)
ssh azureuser@$MSPVM_PUBLIC_IP
Помните, что пароль совпадает с ранее, так как mspVM1
это просто клон adminVM
.
Используйте следующие команды, чтобы настроить контроллер узла в mspVM1
:
# environment variables
export DOMAIN_CONTROLLER_PRIVATE_IP=<adminVM-private-IP>
export HOST_VM_NAME=$(hostname)
export HOST_VM_NAME_LOWERCASE=$(echo "${HOST_VM_NAME,,}")
export HOST_VM_IP=$(hostname -I)
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
# Save default domain configuration as backup
sudo -u jboss mv $EAP_HOME/wildfly/domain/configuration/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml.backup
# Fetch domain.xml from domain controller
sudo -u jboss scp azureuser@${DOMAIN_CONTROLLER_PRIVATE_IP}:/tmp/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml
Вам будет предложено указать пароль для подключения. В этом примере пароль — Secret123456.
Используйте следующие команды, чтобы применить изменения контроллера узла к mspVM1
:
# Setup host controller
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
"embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-slave.xml",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=server-one:remove",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=server-two:remove",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=${HOST_VM_NAME_LOWERCASE}-server0:add(group=main-server-group)",\
"/host=${HOST_VM_NAME_LOWERCASE}/subsystem=elytron/authentication-configuration=slave:add(authentication-name=${JBOSS_EAP_USER}, credential-reference={clear-text=${JBOSS_EAP_PASSWORD}})",\
"/host=${HOST_VM_NAME_LOWERCASE}/subsystem=elytron/authentication-context=slave-context:add(match-rules=[{authentication-configuration=slave}])",\
"/host=${HOST_VM_NAME_LOWERCASE}:write-attribute(name=domain-controller.remote.username, value=${JBOSS_EAP_USER})",\
"/host=${HOST_VM_NAME_LOWERCASE}:write-attribute(name=domain-controller.remote, value={host=${DOMAIN_CONTROLLER_PRIVATE_IP}, port=9990, protocol=remote+http, authentication-context=slave-context})",\
"/host=${HOST_VM_NAME_LOWERCASE}/core-service=discovery-options/static-discovery=primary:write-attribute(name=host, value=${DOMAIN_CONTROLLER_PRIVATE_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=unsecured:add(inet-address=${HOST_VM_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=public:write-attribute(name=inet-address, value=${HOST_VM_IP})"
Последний строф выходных данных должен выглядеть примерно так, как показано в следующем примере. Если это не так, устраните и устраните проблему перед продолжением.
[domain@embedded /] /host=mspvm1/interface=public:write-attribute(name=inet-address, value=192.168.0.5 )
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined,
"response-headers" => {"process-state" => "reload-required"}
}
02:58:59,388 INFO [org.jboss.as] (MSC service thread 1-2) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 58ms
Затем выполните следующие команды, чтобы настроить сервер JBoss и настроить службу EAP:
echo 'WILDFLY_HOST_CONFIG=host-slave.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN
# Enable the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service
# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service
# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service
# Check the status of EAP service
systemctl status eap7-domain.service
Результат должен выглядеть следующим образом:
● eap7-domain.service - JBoss EAP (domain mode)
Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
Active: active (running) since Thu 2023-03-30 03:02:15 UTC; 7s ago
Main PID: 9699 (scl)
Tasks: 51 (limit: 20612)
Memory: 267.6M
CGroup: /system.slice/eap7-domain.service
├─9699 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
├─9700 /bin/bash /var/tmp/sclgJ1hRD
├─9702 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
├─9706 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
├─9799 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
└─9811 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>
Mar 30 03:02:15 mspVM1 systemd[1]: Started JBoss EAP (domain mode).
Введите q , чтобы выйти из пейджера. Выход из подключения SSH путем ввода выхода.
Используйте SSH для подключения к mspVM2
пользователю azureuser
. Получите общедоступный IP-адрес виртуальной машины с помощью следующей команды:
az vm show \
--resource-group abc1110rg \
--name mspVM2 \
--show-details \
--query publicIps
Повторите предыдущие шаги mspVM2
, а затем закройте подключение SSH, введя выход.
После подключения adminVM
к двум контроллерам узла вы сможете просмотреть топологию кластера, как показано на следующем снимке экрана:
Предоставление кластера Red Hat JBoss EAP с помощью Шлюз приложений Azure
Теперь, когда вы создали кластер Red Hat JBoss EAP на виртуальных машинах Azure, в этом разделе описывается процесс предоставления Red Hat JBoss EAP в Интернете с помощью Шлюз приложений Azure.
Создание Шлюз приложений Azure
Чтобы предоставить Red Hat JBoss EAP в Интернете, требуется общедоступный IP-адрес. Создайте общедоступный IP-адрес и свяжите с ним шлюз приложение Azure. Используйте az network public-ip create для его создания, как показано в следующем примере:
az network public-ip create \
--resource-group abc1110rg \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
Затем добавьте серверные серверы в Шлюз приложений серверный пул. Запрос внутренних IP-адресов с помощью следующих команд. У вас есть только контроллеры узлов (рабочие узлы), настроенные как серверные серверы.
export MSPVM1_NIC_ID=$(az vm show \
--resource-group abc1110rg \
--name mspVM1 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM1_IP=$(az network nic show \
--ids ${MSPVM1_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM2_NIC_ID=$(az vm show \
--resource-group abc1110rg \
--name mspVM2 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM2_IP=$(az network nic show \
--ids ${MSPVM2_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
Затем создайте Шлюз приложений Azure. В следующем примере создается шлюз приложений с контроллерами узлов в серверном пуле по умолчанию:
az network application-gateway create \
--resource-group abc1110rg \
--name myAppGateway \
--public-ip-address myAGPublicIPAddress \
--location eastus \
--capacity 2 \
--http-settings-port 8080 \
--http-settings-protocol Http \
--frontend-port 80 \
--sku Standard_V2 \
--subnet jbossVMGatewaySubnet \
--vnet-name myVNet \
--priority 1001 \
--servers ${MSPVM1_IP} ${MSPVM2_IP}
Примечание.
В этом примере настраивается простой доступ к серверам Red Hat JBoss EAP с помощью HTTP. Если требуется безопасный доступ, настройте завершение TLS/SSL, следуя инструкциям в разделе End to end TLS с Шлюз приложений.
В этом примере контроллеры узла предоставляются через порт 8080. Вы развернете пример приложения с подключением к базе данных к кластеру на последующих шагах.
Подключение База данных Azure для PostgreSQL
В этом разделе показано, как создать экземпляр PostgreSQL в Azure и настроить подключение к PostgreSQL в кластере Red Hat JBoss EAP.
Создание экземпляра Базы данных Azure для PostgreSQL
Чтобы создать экземпляр базы данных, выполните следующие действия.
Используйте az postgres server create для подготовки экземпляра PostgreSQL в Azure, как показано в следующем примере:
export DATA_BASE_USER=jboss export DATA_BASE_PASSWORD=Secret123456 DB_SERVER_NAME="jbossdb$(date +%s)" echo "DB_SERVER_NAME=${DB_SERVER_NAME}" az postgres server create \ --resource-group abc1110rg \ --name ${DB_SERVER_NAME} \ --location eastus \ --admin-user ${DATA_BASE_USER} \ --ssl-enforcement Enabled \ --admin-password ${DATA_BASE_PASSWORD} \ --sku-name GP_Gen5_2
Используйте следующие команды, чтобы разрешить доступ из служб Azure:
# Write down the following names for later use export fullyQualifiedDomainName=$(az postgres server show \ --resource-group abc1110rg \ --name ${DB_SERVER_NAME} \ --query "fullyQualifiedDomainName" \ --output tsv) export name=$(az postgres server show \ --resource-group abc1110rg \ --name ${DB_SERVER_NAME} \ --query "name" \ --output tsv) az postgres server firewall-rule create \ --resource-group abc1110rg \ --server ${DB_SERVER_NAME} \ --name "AllowAllAzureIps" \ --start-ip-address 0.0.0.0 \ --end-ip-address 0.0.0.0
Чтобы создать базу данных, используйте следующую команду:
az postgres db create \ --resource-group abc1110rg \ --server ${DB_SERVER_NAME} \ --name testdb
Установка драйвера
Выполните следующие действия, чтобы установить драйвер JDBC с помощью интерфейса командной строки управления JBoss. Дополнительные сведения о драйверах JDBC в Red Hat JBoss EAP см. в разделе "Установка драйвера JDBC в качестве JAR-развертывания".
SSH, чтобы
adminVM
использовать следующую команду. Этот шаг можно пропустить, если у вас уже открыто подключение.ssh azureuser@$ADMIN_VM_PUBLIC_IP
Используйте следующие команды, чтобы скачать драйвер JDBC. Здесь вы используете postgresql-42.5.2.jar. Дополнительные сведения о расположениях загрузки драйверов JDBC см. в разделе "Расположения загрузки драйверов JDBC", предоставляемые Red Hat.
jdbcDriverName=postgresql-42.5.2.jar sudo curl --retry 5 -Lo /tmp/${jdbcDriverName} https://jdbc.postgresql.org/download/${jdbcDriverName}
Разверните драйвер JDBC с помощью следующей команды интерфейса командной строки JBoss:
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \ "deploy /tmp/${jdbcDriverName} --server-groups=main-server-group"
Журнал сервера находится в
mspVM1
папке иmspVM2
в/var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log
. Если развертывание завершается сбоем, изучите этот файл журнала и устраните проблему перед продолжением.
Настройка подключения к базе данных для кластера Red Hat JBoss EAP
Вы запустили сервер базы данных, получили необходимый идентификатор ресурса и установили драйвер JDBC. Далее в этом разделе показано, как использовать интерфейс командной строки JBoss для настройки подключения к источнику данных с созданным ранее экземпляром PostgreSQL.
Откройте терминал и SSH, чтобы
adminVM
использовать следующую команду:ssh azureuser@$ADMIN_VM_PUBLIC_IP
Создайте источник данных с помощью следующих команд:
# Replace the following values with your own export DATA_SOURCE_CONNECTION_STRING=jdbc:postgresql://<database-fully-qualified-domain-name>:5432/testdb export DATA_BASE_USER=jboss@<database-server-name> export JDBC_DATA_SOURCE_NAME=dataSource-postgresql export JDBC_JNDI_NAME=java:jboss/datasources/JavaEECafeDB export DATA_BASE_PASSWORD=Secret123456 export JDBC_DRIVER_NAME=postgresql-42.5.2.jar sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \ "data-source add --driver-name=${JDBC_DRIVER_NAME} --profile=ha --name=${JDBC_DATA_SOURCE_NAME} --jndi-name=${JDBC_JNDI_NAME} --connection-url=${DATA_SOURCE_CONNECTION_STRING} --user-name=${DATA_BASE_USER} --password=${DATA_BASE_PASSWORD}"
После выполнения этих действий вы успешно настроили источник данных с именем java:jboss/datasources/JavaEECafeDB
.
Развертывание примера приложения Java EE Cafe
Чтобы развернуть пример приложения Java EE Cafe в кластере Red Hat JBoss EAP, выполните следующие действия.
Чтобы создать кафе Java EE, выполните следующие действия. В этих шагах предполагается, что у вас установлена локальная среда с Git и Maven:
Используйте следующую команду, чтобы клонировать исходный код из GitHub:
git clone https://github.com/Azure/rhel-jboss-templates.git
Чтобы создать исходный код, используйте следующую команду:
mvn clean install --file rhel-jboss-templates/eap-coffee-app/pom.xml
Эта команда создает файл eap-coffee-app/target/javaee-café.war. Вы отправляете этот файл на следующем шаге.
Откройте веб-браузер и перейдите в консоль управления,
http://<adminVM-public-IP>:9990
а затем войдите с помощью имени пользователяjbossadmin
и пароляSecret123456
.Чтобы отправить javaee-café.war в репозиторий содержимого, выполните следующие действия.
На вкладке "Развертывания" консоль управления Red Hat JBoss EAP выберите репозиторий контента в области навигации.
Нажмите кнопку "Добавить", а затем нажмите кнопку "Отправить содержимое".
Используйте средство выбора файла браузера, чтобы выбрать файл javaee-café.war .
Выберите Далее.
Примите значения по умолчанию на следующем экране и нажмите кнопку Готово.
Выберите "Просмотреть содержимое".
Чтобы развернуть приложение
main-server-group
, выполните следующие действия.
Проверка конфигурации кластера Red Hat JBoss EAP
Теперь вы завершили настройку кластера Red Hat JBoss EAP и развертывание приложения Java EE в нем. Чтобы проверить все параметры, выполните следующие действия, чтобы получить доступ к приложению:
Чтобы получить общедоступный IP-адрес Шлюз приложений Azure, выполните следующую команду:
az network public-ip show \ --resource-group abc1110rg \ --name myAGPublicIPAddress \ --query '[ipAddress]' \ --output tsv
Откройте веб-браузер.
Перейдите к приложению с URL-адресом
http://<gateway-public-ip-address>/javaee-cafe/
. Не забывайте косую черту.Попробуйте добавить и удалить кофе.
Очистка ресурсов
Чтобы избежать расходов за использование Azure, необходимо удалить ненужные ресурсы. Если вам больше не нужен кластер Red Hat JBoss EAP, развернутый на виртуальной машине Azure, отмените регистрацию серверов Red Hat JBoss EAP и удалите ресурсы Azure.
Используйте следующие команды, чтобы отменить регистрацию серверов Red Hat JBoss EAP и виртуальных машин из управления подписками Red Hat:
# Unregister domain controller
az vm run-command invoke \
--resource-group abc1110rg \
--name adminVM \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
# Unregister host controllers
az vm run-command invoke \
--resource-group abc1110rg \
--name mspVM1 \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
az vm run-command invoke \
--resource-group abc1110rg \
--name mspVM2 \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
Чтобы удалить группу abc1110rg
ресурсов, используйте следующую команду:
az group delete --name abc1110rg --yes --no-wait
Следующие шаги
Продолжайте изучать параметры запуска Red Hat JBoss EAP в Azure.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по