Поделиться через


Руководство. Установка JBoss EAP в Azure Виртуальные машины (виртуальные машины) вручную

В этом руководстве показано, как установить Red Hat JBoss Enterprise Application Platform (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 Виртуальные машины (виртуальные машины).

Если вы заинтересованы в предоставлении отзывов или тесной работе с сценариями миграции с помощью команды разработчиков, разрабатывающей JBoss EAP в решениях Azure, заполните этот краткий опрос по миграции JBoss EAP и включите контактные данные. Команда руководителей программ, архитекторов и инженеров будет быстро связаться с вами, чтобы начать тесное сотрудничество.

Примечание.

Эта статья содержит упоминания термина slave (ведомый) . Корпорация Майкрософт больше не использует его. Когда этот термин будет удален из программного обеспечения, мы удалим его из статьи.

Необходимые компоненты

  • Подписка Azure. Если у вас еще нет подписки 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 Виртуальные машины (виртуальных машинах)) установите протестированную и сертифицированную версию JBoss EAP.

    Примечание.

    Если у вас нет прав на EAP, вы можете зарегистрироваться для получения бесплатной подписки разработчика через подписку Red Hat developer для частных лиц. Сохраните сведения об учетной записи, которая используется в качестве имени пользователя RHSM и пароля RHSM в следующем разделе.

  • Если вы уже зарегистрированы или после завершения регистрации, вы можете найти необходимые учетные данные (идентификаторы пула), выполнив следующие действия. Эти идентификаторы пула также используются как идентификатор пула RHSM совместно с правами доступа EAP в последующих шагах.

    1. Войдите в учетную запись Red Hat.

    2. При первом входе вам будет предложено завершить профиль. В зависимости от использования выберите "Персональный" или"Корпоративный" для типа учетной записи, как показано на следующем снимке экрана:

      Снимок экрана: окно учетной записи Red Hat, в котором показаны параметры типа учетной записи с выбранным параметром

    3. Откройте подписку разработчика Red Hat для частных лиц. Эта ссылка позволяет вам перейти ко всем подпискам в учетной записи для соответствующего номера SKU.

    4. В строке элементов управления в таблице "Все приобретенные подписки" выберите "Активный".

    5. Выберите заголовок столбца сортировки для даты окончания до тех пор, пока в будущем значение не будет отображаться как первая строка.

    6. Выделите первую строку. Затем скопируйте и сохраните значение в сторону следующих главных пулов из идентификаторов пулов.

  • Пакет средств разработки 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 и драйвер подключения к базе данных Java PostgreSQL (JDBC).

Предположения

В этом руководстве настраивается кластер 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 формате. В этом примере создается группа ресурсов с именем $RESOURCE_GROUP_NAME в расположении westus :

export SUBSCRIPTION=$(az account show --query id --output tsv)
export SUFFIX=$(date +%s)
export RESOURCE_GROUP_NAME=rg-$SUFFIX
echo "Resource group name: $RESOURCE_GROUP_NAME"
az group create \
    --name $RESOURCE_GROUP_NAME \
    --location westus

Создание виртуальной сети

Ресурсы, состоящие из кластера 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 $RESOURCE_GROUP_NAME \
    --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 $RESOURCE_GROUP_NAME \
    --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 $RESOURCE_GROUP_NAME \
    --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 $RESOURCE_GROUP_NAME \
    --name mynsg

Создайте правила группы безопасности сети с помощью az network nsg rule create. В следующем примере создаются правила группы безопасности сети с именем ALLOW_APPGW и ALLOW_HTTP_ACCESS. Эти правила позволяют шлюзу приложений принимать входящий трафик на HTTP-портах, используемых Red Hat JBoss EAP:

az network nsg rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --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 $RESOURCE_GROUP_NAME \
    --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 $RESOURCE_GROUP_NAME \
    --vnet-name myVNet \
    --name mySubnet \
    --network-security-group mynsg

az network vnet subnet update \
    --resource-group $RESOURCE_GROUP_NAME \
    --vnet-name myVNet \
    --name jbossVMGatewaySubnet \
    --network-security-group mynsg

Создание компьютера Red Hat Enterprise Linux для администратора

Создание ключей SSH

Используйте следующую команду, чтобы создать ключи SSH для adminVM:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/jbosseapvm
ssh-add ~/.ssh/jbosseapvm

Создание виртуальной машины администратора

Образ 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. На этой виртуальной машине запущен сервер администрирования.

В следующем примере создается управляемое удостоверение Azure и виртуальная машина Red Hat Enterprise Linux с помощью проверки подлинности TLS/SSL.

az identity create \
    --name "passwordless-managed-identity" \
    --resource-group $RESOURCE_GROUP_NAME \
    --location westus

az vm create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name adminVM \
    --image RedHat:rhel-raw:86-gen2:latest \
    --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \
    --size Standard_DS1_v2  \
    --admin-username azureuser \
    --ssh-key-values ~/.ssh/jbosseapvm.pub \
    --public-ip-sku Standard \
    --nsg mynsg \
    --vnet-name myVnet \
    --subnet mySubnet

Установка Red Hat JBoss EAP

Чтобы установить, выполните следующие действия.

  1. Используйте следующую команду, чтобы получить общедоступный IP-адрес adminVM:

    export ADMIN_VM_PUBLIC_IP=$(az vm show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name adminVM \
        --show-details \
        --query publicIps | tr -d '"')
    
  2. Откройте терминал и SSH adminVM , выполнив следующую команду:

    ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  3. Настройте брандмауэр для портов с помощью следующей команды:

    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
    

Примечание.

Для RHSM_USER установки Red Hat JBoss EAP необходимы и RHSM_PASSWORD значения. Рекомендуется использовать учетную запись службы с ограниченными разрешениями для доступа к порталу клиента Red Hat.

  1. Используйте следующие команды, чтобы зарегистрировать узел администратора в учетной записи Управления подписками 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
    
  2. Используйте следующую команду, чтобы подключить узел администратора к пулу Red Hat JBoss EAP:

    sudo subscription-manager attach --pool=${EAP_POOL}
    

    Примечание.

    Эта команда игнорируется, если вы используете режим простого доступа к содержимому.

  3. Используйте следующие команды для установки Red Hat JBoss EAP:

    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!

  1. Используйте следующие команды, чтобы задать разрешения и конфигурации сети:

    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
    
  2. Используйте следующие команды для настройки переменных среды:

    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/wildfly"' >> ~/.bash_profile
    source ~/.bash_profile
    sudo touch /etc/profile.d/eap_env.sh
    echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share/wildfly"' | sudo tee -a /etc/profile.d/eap_env.sh
    
  3. Выход из подключения SSH путем ввода выхода.

Создание компьютеров для управляемых серверов

Вы установили Red Hat JBoss EAP adminVM, на котором выполняется сервер контроллера домена. Вам по-прежнему нужно подготовить компьютеры для запуска двух серверов контроллера узла. Затем вы создадите моментальный снимок adminVM и подготовите компьютеры для двух управляемых mspVM1 узлов и mspVM2.

В этом разделе представлен подход к подготовке компьютеров с помощью моментального снимка adminVM. Вернитесь в терминал с вошедшего в систему Azure CLI, а затем выполните следующие действия.

  1. Для остановки adminVMиспользуйте следующую команду:

    az vm stop --resource-group $RESOURCE_GROUP_NAME --name adminVM
    
  2. Используйте az snapshot create для создания моментального снимка adminVM диска ОС, как показано в следующем примере:

    export ADMIN_OS_DISK_ID=$(az vm show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name adminVM \
        --query storageProfile.osDisk.managedDisk.id \
        --output tsv)
    az snapshot create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name myAdminOSDiskSnapshot \
        --source ${ADMIN_OS_DISK_ID}
    
  3. Чтобы запустить adminVMследующую команду, выполните следующую команду:

    az vm start --resource-group $RESOURCE_GROUP_NAME --name adminVM
    
  4. Чтобы создать mspVM1следующие действия, выполните следующие действия.

    1. Сначала создайте управляемый диск для mspVM1az disk create:

      #Get the snapshot ID
      export SNAPSHOT_ID=$(az snapshot show \
          --name myAdminOSDiskSnapshot \
          --resource-group $RESOURCE_GROUP_NAME \
          --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 $RESOURCE_GROUP_NAME \
          --name mspVM1_OsDisk_1 \
          --source ${SNAPSHOT_ID}
      
    2. Затем используйте следующие команды для создания виртуальной машины 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 $RESOURCE_GROUP_NAME \
          --query '[id]' \
          --output tsv)
      
      #Create VM by attaching existing managed disks as OS
      az vm create \
          --resource-group $RESOURCE_GROUP_NAME \
          --name mspVM1 \
          --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \
          --attach-os-disk ${MSPVM1_DISK_ID} \
          --os-type linux \
          --public-ip-sku Standard \
          --nsg mynsg \
          --vnet-name myVnet \
          --subnet mySubnet
      
    3. Вы создали mspVM1 с установленным пакетом Red Hat JBoss EAP. Так как виртуальная машина была создана на основе моментального снимка adminVM диска ОС, две виртуальные машины имеют одно и то же имя узла. Используйте az vm run-command invoke , чтобы изменить имя узла на значение mspVM1:

      az vm run-command invoke \
          --resource-group $RESOURCE_GROUP_NAME \
          --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
              }
          ]
      }
      
  5. Используйте те же команды для создания mspVM2:

    #Create a new Managed Disks for mspVM2
    az disk create \
        --resource-group $RESOURCE_GROUP_NAME \
        --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 $RESOURCE_GROUP_NAME \
        --query '[id]' \
        --output tsv)
    
    #Create VM by attaching existing managed disks as OS
    az vm create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name mspVM2 \
        --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \
        --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 $RESOURCE_GROUP_NAME \
        --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 High Availability для кластера. Microsoft Azure не поддерживает протоколы обнаружения JGroups, основанные на многоадресной рассылке. Хотя вы можете использовать другие протоколы обнаружения JGroups (например, статическую конфигурацию), общую базу данных (TCPPING), общую файловую систему на основе ping (JDBC_PINGFILE_PING) илиTCPGOSSIP), настоятельно рекомендуем использовать протокол обнаружения общих файлов, разработанный для Azure: AZURE_PING Дополнительные сведения см. в статье Об использовании высокого уровня доступности JBoss EAP в Microsoft Azure.

Создание учетной записи хранения Azure и контейнера BLOB-объектов для AZURE_PING

Используйте следующие команды для создания учетной записи хранения и контейнера BLOB-объектов:

# Define your storage account name
export STORAGE_ACCOUNT_NAME=azurepingstgabc1111rg
# Define your Blob container name
export CONTAINER_NAME=azurepingcontainerabc1111rg

# Create storage account
az storage account create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name ${STORAGE_ACCOUNT_NAME} \
    --location westus \
    --sku Standard_LRS \
    --kind StorageV2 \
    --access-tier Hot

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

export STORAGE_ACCESS_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --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 -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP

Сначала используйте следующие команды, чтобы настроить профиль высокого уровня доступности и JGroups с помощью AZURE_PING протокола:

export HOST_VM_IP=$(hostname -I)
export STORAGE_ACCOUNT_NAME=azurepingstgabc1111rg
export CONTAINER_NAME=azurepingcontainerabc1111rg
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/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/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:

Примечание.

Для JBOSS_EAP_USER настройки пользователя управления JBoss EAP необходимы и JBOSS_EAP_PASSWORD значения.

# 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/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.

Снимок экрана: контроллер домена Red Hat JBoss Enterprise Application Platform консоль управления.

Перейдите на вкладку "Среда выполнения ". В области навигации выберите "Топология". Теперь кластер содержит только один контроллер домена:

Настройка контроллеров узлов (рабочих узлов)

Используйте SSH для подключения к mspVM1 пользователю azureuser . Получите общедоступный IP-адрес виртуальной машины с помощью следующей команды:

MSPVM_PUBLIC_IP=$(az vm show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM1 \
    --show-details \
    --query publicIps | tr -d '"' )

ssh -A -i ~/.ssh/jbosseapvm azureuser@$MSPVM_PUBLIC_IP

Используйте следующие команды, чтобы настроить контроллер узла в 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/domain/configuration/domain.xml $EAP_HOME/domain/configuration/domain.xml.backup

# Fetch domain.xml from domain controller
scp azureuser@${DOMAIN_CONTROLLER_PRIVATE_IP}:/tmp/domain.xml /tmp/domain.xml
sudo mv /tmp/domain.xml $EAP_HOME/domain/configuration/domain.xml
sudo chown jboss:jboss $EAP_HOME/domain/configuration/domain.xml

Используйте следующие команды, чтобы применить изменения контроллера узла к mspVM1:

# Setup host controller
sudo -u jboss $EAP_HOME/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 $RESOURCE_GROUP_NAME \
    --name mspVM2 \
    --show-details \
    --query publicIps | tr -d '"'

Повторите предыдущие шаги mspVM2, а затем закройте подключение SSH, введя выход.

После подключения adminVMк двум контроллерам узла вы сможете просмотреть топологию кластера, как показано на следующем снимке экрана:

Предоставление кластера Red Hat JBoss EAP с помощью Шлюз приложений Azure

Теперь, когда вы создали кластер на виртуальных машинах Azure, в этом разделе описывается предоставление JBoss EAP в Интернете с помощью Шлюз приложений Azure.

Создание Шлюз приложений Azure

Чтобы предоставить Red Hat JBoss EAP в Интернете, требуется общедоступный IP-адрес. Создайте общедоступный IP-адрес и свяжите с ним шлюз приложение Azure. Используйте az network public-ip create для его создания, как показано в следующем примере:

az network public-ip create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name myAGPublicIPAddress \
    --allocation-method Static \
    --sku Standard

Затем добавьте серверные серверы в Шлюз приложений серверный пул. Запрос внутренних IP-адресов с помощью следующих команд. У вас есть только контроллеры узлов (рабочие узлы), настроенные как серверные серверы.

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)

Затем создайте Шлюз приложений Azure. В следующем примере создается шлюз приложений с контроллерами узлов в серверном пуле по умолчанию:

az network application-gateway create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name myAppGateway \
    --public-ip-address myAGPublicIPAddress \
    --location westus \
    --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

В этом разделе показано, как создать экземпляр гибкого сервера База данных Azure для PostgreSQL и настроить подключение к PostgreSQL в кластере Red Hat JBoss EAP.

Создание экземпляра гибкого сервера База данных Azure для PostgreSQL

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

  1. Используйте az postgres flexible-server create для подготовки экземпляра гибкого сервера База данных Azure для PostgreSQL, как показано в следующем примере:

    export DATA_BASE_USER=jboss
    
    DB_SERVER_NAME="jbossdb$(date +%s)"
    echo "DB_SERVER_NAME=${DB_SERVER_NAME}"
    az postgres flexible-server create \
        --active-directory-auth Enabled \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${DB_SERVER_NAME}  \
        --location westus \
        --version 16 \
        --public-access 0.0.0.0 \
        --tier Burstable \
        --sku-name Standard_B1ms \
        --yes
    objectId=$(az identity show --name passwordless-managed-identity --resource-group $RESOURCE_GROUP_NAME --query principalId -o tsv)
    az postgres flexible-server ad-admin create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server-name ${DB_SERVER_NAME}  \
      --display-name "passwordless-managed-identity"  \
      --object-id $objectId \
      --type ServicePrincipal 
    
  2. Используйте следующие команды, чтобы разрешить доступ из служб Azure:

    # Save aside the following names for later use
    export fullyQualifiedDomainName=$(az postgres flexible-server show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${DB_SERVER_NAME} \
        --query "fullyQualifiedDomainName" \
        --output tsv)
    export name=$(az postgres flexible-server show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${DB_SERVER_NAME} \
        --query "name" \
        --output tsv)
    
    az postgres flexible-server firewall-rule create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${DB_SERVER_NAME} \
        --rule-name "AllowAllWindowsAzureIps" \
        --start-ip-address "0.0.0.0" \
        --end-ip-address "0.0.0.0"
    
  3. Чтобы создать базу данных, используйте следующую команду:

    az postgres flexible-server db create \
        --resource-group $RESOURCE_GROUP_NAME \
        --server-name ${DB_SERVER_NAME} \
        --database-name testdb
    

Установка драйвера

Чтобы установить драйвер JDBC с помощью интерфейса командной строки управления JBoss, выполните следующие действия.

  1. SSH, чтобы adminVM использовать следующую команду. Этот шаг можно пропустить, если у вас уже открыто подключение.

    ssh -A -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  2. Используйте следующие команды, чтобы скачать драйвер JDBC на adminVM:

    # Create JDBC driver and module directory
    jdbcDriverModuleDirectory=$EAP_HOME/modules/com/postgresql/main
    
    sudo mkdir -p "$jdbcDriverModuleDirectory"
    
    # Download JDBC driver and passwordless extensions
    
    extensionJarName=azure-identity-extensions-1.1.20.jar
    extensionPomName=azure-identity-extensions-1.1.20.pom
    sudo curl --retry 5 -Lo ${jdbcDriverModuleDirectory}/${extensionJarName} https://repo1.maven.org/maven2/com/azure/azure-identity-extensions/1.1.20/$extensionJarName
    sudo curl --retry 5 -Lo ${jdbcDriverModuleDirectory}/${extensionPomName} https://repo1.maven.org/maven2/com/azure/azure-identity-extensions/1.1.20/$extensionPomName
    
    sudo yum install maven -y
    sudo mvn dependency:copy-dependencies  -f ${jdbcDriverModuleDirectory}/${extensionPomName} -Ddest=${jdbcDriverModuleDirectory}
    
    # Create module for JDBC driver
    jdbcDriverModule=module.xml
    sudo cat <<EOF >${jdbcDriverModule}
    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="com.postgresql">
      <resources>
        <resource-root path="${extensionJarName}"/>
    EOF
    
    # Add all jars from target/dependency
    for jar in ${jdbcDriverModuleDirectory}/target/dependency/*.jar; do
    if [ -f "$jar" ]; then
    # Extract just the filename from the path
    jarname=$(basename "$jar")
    echo "    <resource-root path=\"target/dependency/${jarname}\"/>" >> ${jdbcDriverModule}
    fi
    done
    
    # Add the closing tags
    cat <<EOF >> ${jdbcDriverModule}
    </resources>
    <dependencies>
    <module name="javaee.api"/>
    <module name="sun.jdk"/>
    <module name="ibm.jdk"/>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
    </dependencies>
    </module>
    EOF
    
    chmod 644 $jdbcDriverModule
    sudo mv $jdbcDriverModule $jdbcDriverModuleDirectory/$jdbcDriverModule
    
  3. Используйте следующие команды, чтобы скопировать драйвер JDBC на контроллеры узлов:

    scp -rp $EAP_HOME/modules/com/postgresql azureuser@mspvm1:/tmp/
    ssh azureuser@mspvm1 "sudo mkdir -p $EAP_HOME/modules/com/postgresql && sudo cp -rp /tmp/postgresql/* $EAP_HOME/modules/com/postgresql && sudo rm -rf /tmp/postgresql"
    
    scp -rp $EAP_HOME/modules/com/postgresql azureuser@mspvm2:/tmp/
    ssh azureuser@mspvm2 "sudo mkdir -p $EAP_HOME/modules/com/postgresql && sudo cp -rp /tmp/postgresql/* $EAP_HOME/modules/com/postgresql && sudo rm -rf /tmp/postgresql"
    

    Журнал сервера находится в mspVM1 папке и mspVM2 в /var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log. Если развертывание завершается сбоем, изучите этот файл журнала и устраните проблему перед продолжением.


  1. Чтобы зарегистрировать драйвер JDBC, используйте следующие команды:

    # Register JDBC driver
    sudo -u jboss $EAP_HOME/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \
    "/profile=ha/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource,driver-class-name=org.postgresql.Driver)"
    

Настройка подключения к базе данных для кластера Red Hat JBoss EAP

Вы запустили сервер базы данных, получили необходимый идентификатор ресурса и установили драйвер JDBC. Далее в этом разделе показано, как использовать интерфейс командной строки JBoss для настройки подключения к источнику данных с созданным ранее экземпляром PostgreSQL.

  1. Откройте терминал и SSH, чтобы adminVM использовать следующую команду:

    ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  2. Создайте источник данных с помощью следующих команд:

    # Replace the following values with your own
    export DATA_SOURCE_CONNECTION_STRING="jdbc:postgresql://<database-fully-qualified-domain-name>:5432/testdb?sslmode=require&user=passwordless-managed-identity&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin"
    export JDBC_DATA_SOURCE_NAME=dataSource-postgresql
    export JDBC_JNDI_NAME=java:jboss/datasources/JavaEECafeDB
    
    sudo -u jboss $EAP_HOME/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \
    "data-source add --driver-name=postgresql --profile=ha --name=${JDBC_DATA_SOURCE_NAME} --jndi-name=${JDBC_JNDI_NAME} --connection-url=${DATA_SOURCE_CONNECTION_STRING} "
    

Вы успешно настроили источник данных с именем java:jboss/datasources/JavaEECafeDB.

Развертывание примера приложения Java EE Cafe

Чтобы развернуть пример приложения Java EE Cafe в кластере Red Hat JBoss EAP, выполните следующие действия.

  1. Чтобы создать кафе Java EE, выполните следующие действия. В этих шагах предполагается, что у вас установлена локальная среда с Git и Maven:

    1. Используйте следующую команду, чтобы клонировать исходный код из GitHub:

      git clone https://github.com/Azure/rhel-jboss-templates.git --branch 20240904 --single-branch
      
    2. Чтобы создать исходный код, используйте следующую команду:

      mvn clean install --file rhel-jboss-templates/eap-coffee-app/pom.xml
      

      Эта команда создает файл eap-coffee-app/target/javaee-café.war. Вы отправляете этот файл на следующем шаге.

  2. Откройте веб-браузер и перейдите в консоль управления, http://<adminVM-public-IP>:9990а затем войдите с помощью имени пользователя jbossadmin и пароляSecret123456.

  3. Чтобы отправить javaee-café.war в репозиторий содержимого, выполните следующие действия.

    1. На вкладке "Развертывания" консоль управления Red Hat JBoss EAP выберите репозиторий контента в области навигации.

    2. Нажмите кнопку "Добавить", а затем нажмите кнопку "Отправить содержимое".

      Снимок экрана: вкладка

    3. Используйте средство выбора файла браузера, чтобы выбрать файл javaee-café.war .

    4. Выберите Далее.

    5. Примите значения по умолчанию на следующем экране и нажмите кнопку Готово.

    6. Выберите "Просмотреть содержимое".

  4. Чтобы развернуть приложение main-server-group, выполните следующие действия.

    1. В репозитории содержимого выберите javaee-café.war.

    2. В раскрывающемся меню выберите "Развернуть".

    3. Выберите main-server-group в качестве группы серверов для развертывания javaee-café.war.

    4. Выберите "Развернуть" , чтобы начать развертывание. Вы увидите уведомление, аналогичное следующему снимку экрана:

      Снимок экрана: уведомление об успешном развертывании.

Проверка конфигурации кластера Red Hat JBoss EAP

Вы настроили кластер JBoss EAP и развернули приложение в нем. Чтобы проверить все параметры, выполните следующие действия, чтобы получить доступ к приложению:

  1. Чтобы получить общедоступный IP-адрес Шлюз приложений Azure, выполните следующую команду:

    az network public-ip show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name myAGPublicIPAddress \
        --query '[ipAddress]' \
        --output tsv
    
  2. Откройте веб-браузер.

  3. Перейдите к приложению с URL-адресом http://<gateway-public-ip-address>/javaee-cafe/. Не забывайте косую черту.

  4. Попробуйте добавить и удалить кофе.

Очистка ресурсов

Чтобы избежать расходов за использование 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 $RESOURCE_GROUP_NAME \
    --name adminVM \
    --command-id RunShellScript \
    --scripts "sudo subscription-manager unregister"

# Unregister host controllers
az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM1 \
    --command-id RunShellScript \
    --scripts "sudo subscription-manager unregister"
az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM2 \
    --command-id RunShellScript \
    --scripts "sudo subscription-manager unregister"

Чтобы удалить группу $RESOURCE_GROUP_NAMEресурсов, используйте следующую команду:

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Следующие шаги

Перейдите к просмотру параметров для запуска JBoss EAP в Azure.