Delen via


Zelfstudie: JBoss EAP handmatig installeren op Azure Virtual Machines (VM's)

In deze zelfstudie ziet u de stappen voor het installeren van Red Hat JBoss Enterprise Application Platform (EAP) en het configureren van een cluster in de domeinmodus op Azure Virtual Machines (VM's) op Red Hat Enterprise Linux (RHEL).

In deze zelfstudie leert u hoe u de volgende taken uitvoert:

  • Maak een aangepast virtueel netwerk en maak de VM's in het netwerk.
  • Installeer de gewenste JDK en Red Hat JBoss EAP op de VM's met behulp van de opdrachtregel handmatig.
  • Configureer een Red Hat JBoss EAP-cluster in de domeinmodus met behulp van de opdrachtregelinterface (CLI).
  • Configureer een PostgreSQL-gegevensbronverbinding in het cluster.
  • Implementeer en voer een Java EE-voorbeeldtoepassing uit in het cluster.
  • Stel de toepassing beschikbaar op het openbare internet via Azure-toepassing Gateway.
  • Valideer de geslaagde configuratie.

Als u de voorkeur geeft aan een volledig geautomatiseerde oplossing die al deze stappen namens u uitvoert op GNU/Linux-VM's, raadpleegt u de quickstart: Een JBoss EAP-cluster implementeren op Virtuele Machines (VM's) van Azure.

Als u feedback wilt geven of nauw wilt samenwerken aan uw migratiescenario's met het technische team dat JBoss EAP in Azure-oplossingen ontwikkelt, vult u deze korte enquête in over de migratie van JBoss EAP en neemt u uw contactgegevens op. Het team van programmamanagers, architecten en technici neemt onmiddellijk contact met u op om nauwe samenwerking te initiëren.

Notitie

Dit artikel bevat verwijzingen naar de term slave, een term die Microsoft niet meer gebruikt. Zodra de term uit de software wordt verwijderd, verwijderen we deze uit dit artikel.

Vereisten

  • Een Azure-abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

  • Installeer Azure CLI versie 2.51.0 of hoger om Azure CLI-opdrachten uit te voeren.

    • Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Zie Extensies gebruiken met Azure CLI voor meer informatie over extensies.
    • Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
  • Zorg ervoor dat u over de benodigde Red Hat-licenties beschikt. U moet een Red Hat-account met RHSM-rechten (Red Hat Subscription Management) hebben voor Red Hat JBoss EAP. Met dit recht kan de volledig geautomatiseerde oplossing (in quickstart: Een JBoss EAP-cluster implementeren op Azure Virtual Machines (VM's)) de geteste en gecertificeerde JBoss EAP-versie installeren.

    Notitie

    Als u geen EAP-recht hebt, kunt u zich registreren voor een gratis ontwikkelaarsabonnement via het Red Hat Developer Subscription for Individuals. Sla de accountgegevens op, die wordt gebruikt als de RHSM-gebruikersnaam en het RHSM-wachtwoord in de volgende sectie.

  • Als u al bent geregistreerd of nadat u de registratie hebt voltooid, kunt u de benodigde referenties (pool-id's) vinden met behulp van de volgende stappen. Deze pool-id's worden ook gebruikt als de RHSM-pool-id met EAP-rechten in de volgende stappen.

    1. Meld u aan bij uw Red Hat-account.

    2. De eerste keer dat u zich aanmeldt, wordt u gevraagd uw profiel te voltooien. Afhankelijk van uw gebruik selecteert u Persoonlijk of Zakelijk voor accounttype, zoals wordt weergegeven in de volgende schermopname:

      Schermopname van het Red Hat-accountvenster met de opties Accounttype met Persoonlijk geselecteerd.

    3. Open het Red Hat Developer-abonnement voor personen. Met deze koppeling gaat u naar alle abonnementen in uw account voor de juiste SKU.

    4. Selecteer Actief in de rij met besturingselementen onder de tabel Alle aangeschafte abonnementen.

    5. Selecteer de sorteerbare kolomkop voor Einddatum totdat de waarde het meest in de toekomst wordt weergegeven als de eerste rij.

    6. Selecteer de eerste rij. Kopieer en sla de waarde van de volgende hoofdgroepen vervolgens op uit pool-id's.

  • Een Java Development Kit (JDK), versie 11. In deze handleiding raden we Red Hat Build van OpenJDK aan. Zorg ervoor dat uw JAVA_HOME omgevingsvariabele juist is ingesteld in de shells waarin u de opdrachten uitvoert.

  • Git; gebruik git --version dit om te testen of git het werkt. Deze zelfstudie is getest met versie 2.25.1.

  • Maven; gebruik mvn -version om te testen of mvn het werkt. Deze zelfstudie is getest met versie 3.6.3.

De omgeving voorbereiden

In deze sectie stelt u de infrastructuur in waarin u de JDK, Red Hat JBoss EAP en het JDBC-stuurprogramma (PostgreSQL Java Database Connectivity) installeert.

Aannames

In deze zelfstudie wordt een Red Hat JBoss EAP-cluster geconfigureerd in de domeinmodus met een beheerserver en twee beheerde servers op in totaal drie virtuele machines. Als u het cluster wilt configureren, moet u de volgende drie Azure-VM's maken:

  • Een vm met beheerdersrechten (VM-naam adminVM) wordt uitgevoerd als de domeincontroller.
  • Twee beheerde VM's (VM-namen mspVM1 en mspVM2) worden uitgevoerd als hostcontroller.

Aanmelden bij Azure

Als u dat nog niet hebt gedaan, meldt u zich aan bij uw Azure-abonnement met behulp van de opdracht az login en volgt u de instructies op het scherm.

az login

Notitie

Als er meerdere Azure-tenants zijn gekoppeld aan uw Azure-referenties, moet u opgeven bij welke tenant u zich wilt aanmelden. U kunt dit doen met de --tenant optie. Bijvoorbeeld: az login --tenant contoso.onmicrosoft.com.

Een brongroep maken

Maak een resourcegroep maken met az group create. Namen van resourcegroepen moeten wereldwijd uniek zijn binnen een abonnement. Daarom kunt u overwegen om een unieke id toe te voegen aan namen die u maakt, die uniek moeten zijn. Een handige techniek is het gebruik van uw initialen, gevolgd door de datum van vandaag in mmdd notatie. In dit voorbeeld wordt een resourcegroep gemaakt met de naam $RESOURCE_GROUP_NAME op de westus locatie:

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

Een virtueel netwerk maken

De resources die bestaan uit uw Red Hat JBoss EAP-cluster moeten met elkaar communiceren, en het openbare internet, met behulp van een virtueel netwerk. Zie het Cloud Adoption Framework voor virtuele netwerken plannen voor een volledige handleiding voor het plannen van uw virtuele netwerk. Zie veelgestelde vragen over Azure Virtual Network voor meer informatie.

In het voorbeeld in deze sectie maakt u een virtueel netwerk met adresruimte 192.168.0.0/16 en maakt u een subnet dat wordt gebruikt voor VM's.

Maak eerst een virtueel netwerk met behulp van az network vnet create. In het volgende voorbeeld wordt een netwerk met de naam myVNetgemaakt:

az network vnet create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name myVNet \
    --address-prefixes 192.168.0.0/24

Maak een subnet voor het Red Hat JBoss EAP-cluster met behulp van az network vnet subnet create. In het volgende voorbeeld wordt een subnet met de naam mySubnetgemaakt:

az network vnet subnet create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mySubnet \
    --vnet-name myVNet \
    --address-prefixes 192.168.0.0/25

Maak een subnet voor Application Gateway met behulp van az network vnet subnet create. In het volgende voorbeeld wordt een subnet met de naam jbossVMGatewaySubnetgemaakt:

az network vnet subnet create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name jbossVMGatewaySubnet \
    --vnet-name myVNet \
    --address-prefixes 192.168.0.128/25

Een netwerkbeveiligingsgroep maken en er subnetten aan toewijzen

Voordat u VIRTUELE machines met openbare IP-adressen maakt, maakt u een netwerkbeveiligingsgroep (NSG) om het virtuele netwerk en de eerder gemaakte subnetten te beveiligen.

Maak een netwerkbeveiligingsgroep met behulp van az network nsg create. In het volgende voorbeeld wordt een netwerkbeveiligingsgroep met de naam mynsggemaakt:

az network nsg create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mynsg

Maak regels voor netwerkbeveiligingsgroepen met behulp van az network nsg rule create. In het volgende voorbeeld worden regels voor netwerkbeveiligingsgroepen gemaakt met de naam ALLOW_APPGW en ALLOW_HTTP_ACCESS. Met deze regels kan App Gateway binnenkomend verkeer accepteren op de HTTP-poorten die worden gebruikt door 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

Koppel de subnetten die u eerder hebt gemaakt aan deze netwerkbeveiligingsgroep met behulp van az network vnet subnet update, zoals wordt weergegeven in het volgende voorbeeld:

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

Een Red Hat Enterprise Linux-machine maken voor beheerder

SSH-sleutels genereren

Gebruik de volgende opdracht om SSH-sleutels te genereren voor adminVM:

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

De beheer-VM maken

De Marketplace-installatiekopieën die u gebruikt om de VM's te maken, zijn RedHat:rhel-raw:86-gen2:latest. Zie Red Hat Enterprise Linux-installatiekopieën (RHEL) die beschikbaar zijn in Azure voor andere installatiekopieën.

Notitie

U kunt een query uitvoeren op alle beschikbare Red Hat Enterprise Linux-installatiekopieën die door Red Hat worden geleverd met de opdracht az vm image list , bijvoorbeeld: az vm image list --offer RHEL --publisher RedHat --output table --all. Zie Overzicht van Red Hat Enterprise Linux-installatiekopieën voor meer informatie.

Als u een andere installatiekopieën gebruikt, moet u mogelijk extra bibliotheken installeren om de infrastructuur in te schakelen die in deze handleiding wordt gebruikt.

Maak een eenvoudige VIRTUELE machine, installeer alle vereiste hulpprogramma's erop, maak er een momentopname van en maak vervolgens replica's op basis van de momentopname.

Maak een VM met az vm create. U voert de beheerserver uit op deze VIRTUELE machine.

In het volgende voorbeeld wordt een Azure Managed Identity en een Red Hat Enterprise Linux-VM gemaakt met behulp van TLS/SSL-verificatie.

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 installeren

Voer de volgende stappen uit om te installeren:

  1. Gebruik de volgende opdracht om het openbare IP-adres van adminVM:

    export ADMIN_VM_PUBLIC_IP=$(az vm show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name adminVM \
        --show-details \
        --query publicIps | tr -d '"')
    
  2. Open een terminal en SSH naar de adminVM terminal met behulp van de volgende opdracht:

    ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  3. Configureer de firewall voor poorten met behulp van de volgende opdracht:

    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
    

    U ziet het woord success na de eerste twee opdrachten. Na de derde opdracht ziet u uitvoer die vergelijkbaar is met het volgende voorbeeld:

    # 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
    

Notitie

De RHSM_USER en RHSM_PASSWORD waarden zijn vereist voor het installeren van Red Hat JBoss EAP. U wordt aangeraden een serviceaccount met beperkte machtigingen te gebruiken voor toegang tot de Red Hat-klantportal.

  1. Gebruik de volgende opdrachten om de beheerdershost te registreren bij uw RHSM-account (Red Hat Subscription Management):

    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
    

    Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:

    Registering to: subscription.rhsm.redhat.com:443/subscription
    The system has been registered with ID: redacted
    The registered system name is: adminVM
    
  2. Gebruik de volgende opdracht om de beheerhost toe te voegen aan Red Hat JBoss EAP-pool:

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

    Notitie

    Deze opdracht wordt genegeerd als u de modus Eenvoudige inhoudstoegang gebruikt.

  3. Gebruik de volgende opdrachten om Red Hat JBoss EAP te installeren:

    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
    

Voor de tweede en derde opdrachten ziet u veel regels uitvoer, eindigend met Complete!

  1. Gebruik de volgende opdrachten voor het instellen van machtigingen en netwerkconfiguraties:

    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. Gebruik de volgende opdrachten om de omgevingsvariabelen te configureren:

    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
    
  3. Sluit af van de SSH-verbinding door afsluiten te typen.

Machines maken voor beheerde servers

U hebt Red Hat JBoss EAP geïnstalleerd, adminVMdat wordt uitgevoerd als de domeincontrollerserver. U moet nog steeds machines voorbereiden om de twee hostcontrollerservers uit te voeren. Vervolgens maakt u een momentopname van adminVM en bereidt u machines voor op twee beheerde servers, mspVM1 en mspVM2.

In deze sectie wordt een benadering geïntroduceerd voor het voorbereiden van machines met de momentopname van adminVM. Ga terug naar uw terminal waarvoor Azure CLI is aangemeld en gebruik vervolgens de volgende stappen:

  1. Gebruik de volgende opdracht om te stoppen adminVM:

    az vm stop --resource-group $RESOURCE_GROUP_NAME --name adminVM
    
  2. Gebruik az snapshot create om een momentopname van de adminVM besturingssysteemschijf te maken, zoals wordt weergegeven in het volgende voorbeeld:

    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. Gebruik de volgende opdracht om te starten adminVM:

    az vm start --resource-group $RESOURCE_GROUP_NAME --name adminVM
    
  4. Gebruik de volgende stappen om te maken mspVM1:

    1. Maak eerst een beheerde schijf voor mspVM1 met az 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. Gebruik vervolgens de volgende opdrachten om een virtuele machine mspVM1te maken en de besturingssysteemschijf mspVM1_OsDisk_1te koppelen:

      #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. U hebt gemaakt mspVM1 met Red Hat JBoss EAP geïnstalleerd. Omdat de VIRTUELE machine is gemaakt op basis van een momentopname van de adminVM besturingssysteemschijf, hebben de twee VM's dezelfde hostnaam. Gebruik az vm run-command invoke om de hostnaam te wijzigen in de waarde mspVM1:

      az vm run-command invoke \
          --resource-group $RESOURCE_GROUP_NAME \
          --name mspVM1 \
          --command-id RunShellScript \
          --scripts "sudo hostnamectl set-hostname mspVM1"
      

      Wanneer de opdracht is voltooid, ziet u uitvoer die lijkt op het volgende voorbeeld:

      {
          "value": [
              {
              "code": "ProvisioningState/succeeded",
              "displayStatus": "Provisioning succeeded",
              "level": "Info",
              "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n",
              "time": null
              }
          ]
      }
      
  5. Gebruik dezelfde opdrachten om het volgende te maken 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"
    

Gebruik de volgende opdrachten om de privé-IP-adressen op te halen en weer te geven, die u in latere secties gebruikt:

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}"

Nu zijn alle drie de machines klaar. Vervolgens configureert u een Red Hat JBoss EAP-cluster in de modus beheerd domein.

Beheerd domein en cluster configureren

Configureer het cluster waarvoor sessiereplicatie is ingeschakeld. Zie Sessiereplicatie voor meer informatie.

Als u sessiereplicatie wilt inschakelen, gebruikt u Red Hat JBoss EAP Hoge beschikbaarheid voor het cluster. Microsoft Azure biedt geen ondersteuning voor JGroups-detectieprotocollen die zijn gebaseerd op multicast. Hoewel u andere JGroups-detectieprotocollen (zoals een statische configuratie (TCPPING), een gedeelde database (JDBC_PING), een ping op basis van het gedeelde bestandssysteem (FILE_PINGof TCPGOSSIP) kunt gebruiken, raden we u ten zeerste aan het gedeelde protocol voor bestandsdetectie te gebruiken dat is ontwikkeld voor Azure: AZURE_PING. Zie JBoss EAP hoge beschikbaarheid gebruiken in Microsoft Azure voor meer informatie.

Een Azure Storage-account en blobcontainer maken voor AZURE_PING

Gebruik de volgende opdrachten om een opslagaccount en blobcontainer te maken:

# 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

Haal vervolgens de sleutel van het opslagaccount op voor later gebruik met behulp van de volgende opdracht. Als er een fout wordt weergegeven, wacht u een paar minuten en probeert u het opnieuw. De vorige opdracht voor het maken van het opslagaccount is mogelijk nog niet voltooid.

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}

U moet de volgende uitvoer zien:

{
  "created": true
}

Domeincontroller configureren (beheerknooppunt)

In deze zelfstudie worden de CLI-opdrachten voor Red Hat JBoss EAP-beheer gebruikt om de domeincontroller te configureren. Zie de Handleiding voor beheer-CLI voor meer informatie.

Met de volgende stappen stelt u de configuratie van de domeincontroller in op adminVM. Gebruik SSH om verbinding te maken met de adminVM gebruiker azureuser . Denk eraan dat het openbare IP-adres van adminVM eerder is vastgelegd in de ADMIN_VM_PUBLIC_IP omgevingsvariabele.

ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP

Gebruik eerst de volgende opdrachten om het HA-profiel en JGroups te configureren met behulp van het AZURE_PING protocol:

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

De laatste stanza van uitvoer moet er ongeveer uitzien als in het volgende voorbeeld. Als dit niet het probleem is, kunt u het probleem oplossen voordat u doorgaat.

[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

Gebruik vervolgens de volgende opdrachten om de JBoss-server te configureren en de EAP-service in te stellen:

Notitie

De JBOSS_EAP_USER en JBOSS_EAP_PASSWORD waarden zijn vereist om de JBoss EAP-beheergebruiker te configureren.

# 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'

De uitvoer moet er als in het volgende voorbeeld uitzien:

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'

Gebruik ten slotte de volgende opdrachten om de EAP-service te starten:

# 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

De uitvoer moet er als in het volgende voorbeeld uitzien:

● 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).

Typ q om de pager af te sluiten. Sluit af van de SSH-verbinding door afsluiten te typen.

Nadat u de Red Hat JBoss EAP-service hebt gestart, hebt u toegang tot de beheerconsole via http://$ADMIN_VM_PUBLIC_IP:9990 uw webbrowser. Meld u aan met de geconfigureerde gebruikersnaam jbossadmin en het geconfigureerde wachtwoord Secret123456.

Schermopname van de Red Hat JBoss Enterprise Application Platform-beheerconsole voor domeincontrollers.

Selecteer het tabblad Runtime . Selecteer Topologie in het navigatiedeelvenster. U ziet nu dat uw cluster slechts één domeincontroller bevat:

Hostcontrollers (werkknooppunten) configureren

Gebruik SSH om verbinding te mspVM1 maken als de azureuser gebruiker. Haal het openbare IP-adres van de VIRTUELE machine op met de volgende opdracht:

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

Gebruik de volgende opdrachten om de hostcontroller in te stellen op 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
scp azureuser@${DOMAIN_CONTROLLER_PRIVATE_IP}:/tmp/domain.xml /tmp/domain.xml
sudo mv /tmp/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml
sudo chown jboss:jboss $EAP_HOME/wildfly/domain/configuration/domain.xml

Gebruik de volgende opdrachten om wijzigingen in de hostcontroller toe te passen op 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})"

De laatste stanza van uitvoer moet er ongeveer uitzien als in het volgende voorbeeld. Als dit niet het probleem is, kunt u het probleem oplossen voordat u doorgaat.

[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

Gebruik vervolgens de volgende opdrachten om de JBoss-server te configureren en de EAP-service in te stellen:

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

De uitvoer moet er als in het volgende voorbeeld uitzien:

● 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).

Typ q om de pager af te sluiten. Sluit af van de SSH-verbinding door afsluiten te typen.

Gebruik SSH om verbinding te mspVM2 maken als de azureuser gebruiker. Haal het openbare IP-adres van de VIRTUELE machine op met de volgende opdracht:

az vm show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM2 \
    --show-details \
    --query publicIps | tr -d '"'

Herhaal de vorige stappen mspVM2en sluit de SSH-verbinding af door exit te typen.

Nadat twee hostcontrollers zijn verbonden adminVM, moet u de clustertopologie kunnen zien, zoals wordt weergegeven in de volgende schermopname:

Red Hat JBoss EAP-cluster beschikbaar maken met Azure-toepassing Gateway

Nu u het cluster op Azure-VM's hebt gemaakt, wordt u in deze sectie begeleid bij het blootstellen van JBoss EAP aan internet met Azure-toepassing Gateway.

De Azure-toepassing-gateway maken

Als u Red Hat JBoss EAP beschikbaar wilt maken op internet, is een openbaar IP-adres vereist. Maak het openbare IP-adres en koppel er vervolgens een Azure-toepassing gateway aan. Gebruik az network public-ip create om deze te maken , zoals wordt weergegeven in het volgende voorbeeld:

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

Voeg vervolgens de back-endservers toe aan de back-endpool van Application Gateway. Voer een query uit voor back-end-IP-adressen met behulp van de volgende opdrachten. U hebt alleen de hostcontrollers (werkknooppunten) geconfigureerd als back-endservers.

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)

Maak vervolgens een Azure-toepassing-gateway. In het volgende voorbeeld wordt een toepassingsgateway gemaakt met hostcontrollers in de standaardback-endpool:

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}

Notitie

In dit voorbeeld wordt eenvoudige toegang ingesteld tot de Red Hat JBoss EAP-servers met HTTP. Als u beveiligde toegang wilt, configureert u TLS/SSL-beëindiging door de instructies in End-to-end TLS met Application Gateway te volgen.

In dit voorbeeld worden de hostcontrollers op poort 8080 weergegeven. In latere stappen implementeert u een voorbeeldtoepassing met een databaseverbinding met het cluster.

Azure Database for PostgreSQL Flexible Server verbinden

In deze sectie wordt beschreven hoe u een Exemplaar van Azure Database for PostgreSQL Flexible Server maakt en een verbinding met PostgreSQL configureert op uw Red Hat JBoss EAP-cluster.

Een Azure Database for PostgreSQL Flexible Server-exemplaar maken

Gebruik de volgende stappen om het database-exemplaar te maken:

  1. Gebruik az postgres flexible-server create om een Azure Database for PostgreSQL Flexible Server-exemplaar in te richten, zoals wordt weergegeven in het volgende voorbeeld:

    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. Gebruik de volgende opdrachten om toegang vanuit Azure-services toe te staan:

    # 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. Gebruik de volgende opdracht om de database te maken:

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

Stuurprogramma installeren

Gebruik de volgende stappen om het JDBC-stuurprogramma te installeren met de JBoss-beheer-CLI:

  1. Gebruik de volgende opdracht om SSH uit te adminVM voeren. U kunt deze stap overslaan als u al een verbinding hebt geopend.

    ssh -A -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  2. Gebruik de volgende opdrachten om het JDBC-stuurprogramma op adminVM te downloaden:

    # Create JDBC driver and module directory
    jdbcDriverModuleDirectory="$EAP_HOME"/wildfly/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. Gebruik de volgende opdrachten om het JDBC-stuurprogramma naar de hostcontrollers te kopiëren:

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

    Het serverlogboek bevindt zich op mspVM1 en mspVM2 op /var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log. Als de implementatie mislukt, controleert u dit logboekbestand en lost u het probleem op voordat u doorgaat.


  1. Gebruik de volgende opdrachten om het JDBC-stuurprogramma te registreren:

    # Register JDBC driver
    sudo -u jboss $EAP_HOME/wildfly/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)"
    

De databaseverbinding voor het Red Hat JBoss EAP-cluster configureren

U hebt de databaseserver gestart, de benodigde resource-id verkregen en het JDBC-stuurprogramma geïnstalleerd. Vervolgens laten de stappen in deze sectie zien hoe u de JBoss CLI gebruikt om een gegevensbronverbinding te configureren met het PostgreSQL-exemplaar dat u eerder hebt gemaakt.

  1. Open een terminal en SSH met adminVM behulp van de volgende opdracht:

    ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  2. Maak een gegevensbron met behulp van de volgende opdrachten:

    # 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/wildfly/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} "
    

U hebt een gegevensbron met de naam java:jboss/datasources/JavaEECafeDBgeconfigureerd.

Java EE Cafe-voorbeeldtoepassing implementeren

Gebruik de volgende stappen om een Java EE Cafe-voorbeeldtoepassing te implementeren in het Red Hat JBoss EAP-cluster:

  1. Gebruik de volgende stappen om Java EE Cafe te bouwen. Bij deze stappen wordt ervan uitgegaan dat u een lokale omgeving hebt waarop Git en Maven zijn geïnstalleerd:

    1. Gebruik de volgende opdracht om de broncode van GitHub te klonen:

      git clone https://github.com/Azure/rhel-jboss-templates.git --branch 20240904 --single-branch
      
    2. Gebruik de volgende opdracht om de broncode te bouwen:

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

      Met deze opdracht maakt u het bestand eap-coffee-app/target/javaee-café.war. U uploadt dit bestand in de volgende stap.

  2. Open een webbrowser en ga naar de beheerconsole op http://<adminVM-public-IP>:9990en meld u aan met gebruikersnaam jbossadmin en wachtwoord Secret123456.

  3. Gebruik de volgende stappen om de javaee-café.war te uploaden naar de Content Repository:

    1. Selecteer op het tabblad Implementaties van de Red Hat JBoss EAP-beheerconsole de optie Inhoudsopslagplaats in het navigatiedeelvenster.

    2. Selecteer de knop Toevoegen en selecteer Vervolgens Inhoud uploaden.

      Schermopname van het tabblad Implementaties van Red Hat JBoss Enterprise Application Platform met de menuoptie Inhoud uploaden gemarkeerd.

    3. Gebruik de browserbestandkiezer om het bestand javaee-café.war te selecteren.

    4. Selecteer Volgende.

    5. Accepteer de standaardwaarden op het volgende scherm en selecteer Voltooien.

    6. Selecteer Inhoud weergeven.

  4. Gebruik de volgende stappen om een toepassing te implementeren in main-server-group:

    1. Selecteer in Content Repository javaee-café.war.

    2. Selecteer Implementeren in de vervolgkeuzelijst.

    3. Selecteer main-server-group de servergroep voor het implementeren van javaee-café.war.

    4. Selecteer Implementeren om de implementatie te starten. Als het goed is, ziet u een melding die lijkt op de volgende schermopname:

      Schermopname van de melding dat de implementatie is geslaagd.

De configuratie van het Red Hat JBoss EAP-cluster testen

U hebt het JBoss EAP-cluster geconfigureerd en de toepassing erop geïmplementeerd. Gebruik de volgende stappen om toegang te krijgen tot de toepassing om alle instellingen te valideren:

  1. Gebruik de volgende opdracht om het openbare IP-adres van de Azure-toepassing-gateway op te halen:

    az network public-ip show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name myAGPublicIPAddress \
        --query '[ipAddress]' \
        --output tsv
    
  2. Open een webbrowser.

  3. Navigeer naar de toepassing met de URL http://<gateway-public-ip-address>/javaee-cafe/. Vergeet de afsluitende slash niet.

  4. Probeer koffie toe te voegen en te verwijderen.

Resources opschonen

Om Azure-kosten te voorkomen, moet u overbodige resources opschonen. Wanneer u het Red Hat JBoss EAP-cluster dat is geïmplementeerd op een Azure-VM niet meer nodig hebt, maakt u de registratie van de Red Hat JBoss EAP-servers ongedaan en verwijdert u de Azure-resources.

Gebruik de volgende opdrachten om de registratie van de Red Hat JBoss EAP-servers en VM's van Red Hat-abonnementsbeheer ongedaan te maken:

# 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"

Gebruik de volgende opdracht om de resourcegroep $RESOURCE_GROUP_NAMEte verwijderen:

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

Volgende stappen

Ga door met het verkennen van opties voor het uitvoeren van JBoss EAP in Azure.