Tutorial: JBoss EAP auf Azure Virtual Machines (VMs) manuell installieren
Dieses Tutorial zeigt Ihnen die Schritte zur Installation von Red Hat JBoss Enterprise Application Platform (EAP) und zur Konfiguration eines Clusters im Domänenmodus auf Azure Virtual Machines (VMs), auf Red Hat Enterprise Linux (RHEL).
In diesem Tutorial lernen Sie Folgendes:
- Erstellen Sie ein angepasstes virtuelles Netzwerk und erstellen Sie die VMs innerhalb des Netzwerks.
- Installieren Sie das gewünschte JDK und Red Hat JBoss EAP auf den VMs manuell über die Kommandozeile.
- Konfigurieren Sie einen Red Hat JBoss EAP Cluster im Domänen-Modus über die Befehlszeilenschnittstelle (CLI).
- Konfigurieren Sie eine PostgreSQL-Datenquellenverbindung im Cluster.
- Stellen Sie eine Java EE-Beispielanwendung bereit und führen Sie sie in dem Cluster aus.
- Stellen Sie die Anwendung über Azure Application Gateway dem öffentlichen Internet zur Verfügung.
- Validieren Sie die erfolgreiche Konfiguration.
Wenn Sie eine vollautomatische Lösung bevorzugen, die alle diese Schritte in Ihrem Namen auf GNU/Linux VMs direkt vom Azure-Portal aus durchführt, lesen Sie Schnellstart: Bereitstellen eines JBoss EAP-Clusters auf Azure Virtual Machines (VMs).
Wenn Sie an Feedback oder daran interessiert sind, eng mit dem Entwicklungsteam, das die JBoss EAP-Lösungen für Azure entwickelt, an Ihren Migrationsszenarien zu arbeiten, füllen Sie diese kurze Umfrage zur JBoss EAP-Migration aus und geben Sie Ihre Kontaktinformationen an. Das Team aus Programmmanagern, Architekten und Ingenieuren wird sich umgehend mit Ihnen in Verbindung setzen, um eine enge Zusammenarbeit zu initiieren.
Hinweis
Dieser Artikel enthält Verweise auf den Begriff Slave, einen Begriff, den Microsoft nicht mehr verwendet. Sobald der Begriff aus der Software entfernt wurde, wird er auch aus diesem Artikel entfernt.
Voraussetzungen
Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
Installieren Sie Azure CLI Version 2.51.0 oder höher, um Azure CLI-Befehle auszuführen.
- Installieren Sie die Azure CLI-Erweiterungen bei der ersten Verwendung, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
- Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Stellen Sie sicher, dass Sie über die erforderlichen Red Hat-Lizenzen verfügen. Sie benötigen ein Red Hat-Konto mit Red Hat Subscription Management (RHSM)-Berechtigung für Red Hat JBoss EAP. Mit dieser Berechtigung kann die vollautomatische Lösung (in Schnellstart: Bereitstellen eines JBoss EAP Clusters auf Azure Virtual Machines (VMs)) die von Red Hat getestete und zertifizierte JBoss EAP-Version bereitstellen.
Hinweis
Wenn Sie keine EAP-Berechtigung haben, können Sie sich über Red Hat Entwicklerabonnements für Einzelpersonen für ein kostenloses Entwicklerabonnement registrieren. Speichern Sie die Kontodaten, die im nächsten Abschnitt als RHSM-Benutzername und RHSM-Kennwort verwendet werden.
Wenn Sie bereits registriert sind oder nachdem Sie die Registrierung abgeschlossen haben, können Sie die erforderlichen Anmeldeinformationen (Pool-IDs) mit Hilfe der folgenden Schritte ausfindig machen. Diese Pool-IDs werden auch als RHSM-Pool-ID mit EAP-Berechtigung in den nachfolgenden Schritten verwendet.
Melden Sie sich bei Ihrem Red Hat-Konto an.
Wenn Sie sich zum ersten Mal anmelden, werden Sie aufgefordert, Ihr Profil zu vervollständigen. Abhängig von Ihrer Verwendung wählen Sie entweder Personal oder Corporate für Kontotyp, wie im folgenden Screenshot gezeigt:
Öffnen Sie Red Hat Developer Subscription for Individuals. Über diesen Link gelangen Sie zu allen Abonnements in Ihrem Konto für die entsprechende SKU.
In der Zeile der Steuerelemente unter der Tabelle All purchased Subscription wählen Sie Active.
Wählen Sie die sortierbare Spaltenüberschrift für End Date, bis der am weitesten in der Zukunft liegende Wert als erste Zeile angezeigt wird.
Wählen Sie die erste Zeile aus. Kopieren Sie dann den Wert nach Master Pools aus Pool IDs und speichern Sie ihn ab.
Java Development Kit (JDK), Version 11. In dieser Anleitung empfehlen wir Red Hat Build von OpenJDK. Stellen Sie sicher, dass die Umgebungsvariable
JAVA_HOME
in den Shells korrekt festgelegt ist, in denen Sie die Befehle ausführen.Git; verwenden Sie
git --version
, um zu testen, obgit
funktioniert. Dieses Tutorial wurde mit der Version 2.25.1 getestet.Maven; verwenden Sie
mvn -version
, um zu testen, obmvn
funktioniert. Dieses Tutorial wurde mit der Version 3.6.3 getestet.
Vorbereiten der Umgebung
In diesem Abschnitt richten Sie die Infrastruktur ein, in der Sie das JDK, Red Hat JBoss EAP und den PostgreSQL Java Database Connectivity (JDBC)-Treiber installieren.
Annahmen
In diesem Tutorial wird ein Red Hat JBoss EAP-Cluster im Domänenmodus mit einem Administrationsserver und zwei verwalteten Servern auf insgesamt drei VMs konfiguriert. Um den Cluster zu konfigurieren, müssen Sie die folgenden drei Azure-VMs erstellen:
- Eine Admin-VM (VM-Name
adminVM
) wird als Domänencontroller ausgeführt. - Zwei verwaltete VMs (VM-Namen
mspVM1
undmspVM2
) werden als Host-Controller ausgeführt.
Anmelden bei Azure
Falls Sie dies noch nicht getan haben, melden Sie sich mit dem Befehl az login bei Ihrem Azure-Abonnement an, und folgen Sie den Anweisungen auf dem Bildschirm.
az login
Hinweis
Wenn Sie mehrere Azure-Mandanten mit Ihren Anmeldeinformationen verknüpft haben, müssen Sie angeben, bei welchem Mandanten Sie sich anmelden möchten. Sie können dies mit der Option --tenant
tun. Beispiel: az login --tenant contoso.onmicrosoft.com
.
Erstellen einer Ressourcengruppe
Erstellen Sie mit az group create eine Ressourcengruppe. Ressourcengruppennamen müssen innerhalb eines Abonnements global eindeutig sein. Aus diesem Grund sollten Sie jedem Namen, den Sie erstellen und der eindeutig sein muss, einen eindeutigen Bezeichner voranstellen. Es hat sich bewährt, Ihre Initialen gefolgt vom heutigen Datum im Format mmdd
zu verwenden. In diesem Beispiel wird eine Ressourcengruppe mit dem Namen $RESOURCE_GROUP_NAME
am Standort westus
erstellt:
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
Erstellen eines virtuellen Netzwerks
Die Ressourcen, aus denen Ihr Red Hat JBoss EAP-Cluster besteht, müssen über ein virtuelles Netzwerk miteinander und mit dem öffentlichen Internet kommunizieren. Eine vollständige Anleitung zur Planung Ihres virtuellen Netzwerks finden Sie in der Anleitung zum Cloud Adoption Framework für Azure Planen virtueller Netzwerke. Weitere Informationen finden Sie unter Azure Virtual Network: häufig gestellte Fragen.
Das Beispiel in diesem Abschnitt erstellt ein virtuelles Netzwerk mit dem Adressraum 192.168.0.0/16
und erstellt ein Subnetz, das für VMs verwendet wird.
Erstellen Sie zunächst ein virtuelles Netzwerk, indem Sie az network vnet create verwenden. Das folgende Beispiel erstellt ein Netzwerk mit dem Namen myVNet
:
az network vnet create \
--resource-group $RESOURCE_GROUP_NAME \
--name myVNet \
--address-prefixes 192.168.0.0/24
Erstellen Sie ein Subnetz für den Red Hat JBoss EAP-Cluster, indem Sie az network vnet subnet create verwenden. Im folgenden Beispiel wird ein Subnetz namens mySubnet
erstellt:
az network vnet subnet create \
--resource-group $RESOURCE_GROUP_NAME \
--name mySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.0/25
Erstellen Sie ein Subnetz für Application Gateway mit az network vnet subnet create. Im folgenden Beispiel wird ein Subnetz namens jbossVMGatewaySubnet
erstellt:
az network vnet subnet create \
--resource-group $RESOURCE_GROUP_NAME \
--name jbossVMGatewaySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.128/25
Erstellen Sie eine Netzwerksicherheitsgruppe und weisen Sie ihr Subnetze zu
Bevor Sie VMs mit öffentlichen IPs erstellen, erstellen Sie eine Netzwerksicherheitsgruppe (NSG), um das virtuelle Netzwerk und die zuvor erstellten Subnetze zu sichern.
Erstellen Sie mit az network nsg create eine Netzwerksicherheitsgruppe. Im folgenden Beispiel wird eine Netzwerksicherheitsgruppe namens mynsg
erstellt:
az network nsg create \
--resource-group $RESOURCE_GROUP_NAME \
--name mynsg
Erstellen Sie die Regeln für die Netzwerksicherheitsgruppe mit az network nsg rule create. Das folgende Beispiel erstellt Regeln für die Netzwerksicherheitsgruppe mit den Namen ALLOW_APPGW
und ALLOW_HTTP_ACCESS
. Diese Regeln lassen die Möglichkeit zu, dass App Gateway eingehenden Datenverkehr über die von Red Hat JBoss EAP verwendeten HTTP-Ports akzeptiert:
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
Verknüpfen Sie die zuvor erstellten Subnetze mit dieser Netzwerksicherheitsgruppe, indem Sie az network vnet subnet update verwenden, wie im folgenden Beispiel gezeigt:
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
Erstellen Sie eine Red Hat Enterprise Linux Maschine für Admin
Generieren von SSH-Schlüsseln
Verwenden Sie den folgenden Befehl, um SSH-Schlüssel für adminVM
:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/jbosseapvm
ssh-add ~/.ssh/jbosseapvm
Erstellen der Admin-VM
Das Marketplace-Image, das Sie zum Erstellen der VMs verwenden, ist RedHat:rhel-raw:86-gen2:latest
. Weitere Images finden Sie unter Red Hat Enterprise Linux (RHEL)-Images in Azure verfügbar.
Hinweis
Sie können alle verfügbaren Red Hat Enterprise Linux-Images, die von Red Hat bereitgestellt werden, mit dem Befehl az vm image list abfragen - zum Beispiel: az vm image list --offer RHEL --publisher RedHat --output table --all
. Weitere Informationen finden Sie unter Übersicht über Red Hat Enterprise Linux-Images.
Wenn Sie ein anderes Image verwenden, müssen Sie möglicherweise zusätzliche Bibliotheken installieren, um die in dieser Anleitung verwendete Infrastruktur zu aktivieren.
Erstellen Sie eine Basis-VM, installieren Sie alle erforderlichen Tools darauf, erstellen Sie einen Snapshot davon und erstellen Sie dann Repliken auf der Grundlage des Snapshots.
Erstellen Sie einen virtuellen Computer mit az vm create. Sie führen den Administrationsserver auf dieser VM aus.
Im folgenden Beispiel wird eine azure Managed Identity und eine Red Hat Enterprise Linux-VM mit TLS/SSL-Authentifizierung erstellt.
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
Installieren von Red Hat JBoss EAP
Führen Sie die folgenden Schritte zur Installation aus:
Verwenden Sie den folgenden Befehl, um die öffentliche IP von
adminVM
abzurufen:export ADMIN_VM_PUBLIC_IP=$(az vm show \ --resource-group $RESOURCE_GROUP_NAME \ --name adminVM \ --show-details \ --query publicIps | tr -d '"')
Öffnen Sie ein Terminal ,und verbinden Sie sich per SSH mit dem
adminVM
mit folgendem Befehl:ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
Konfigurieren Sie die Firewall für die Ports mit dem folgenden Befehl:
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
Nach den ersten beiden Befehlen sollten Sie das Wort
success
sehen. Nach dem dritten Befehl sollten Sie eine Ausgabe ähnlich dem folgenden Beispiel erhalten:# 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
Hinweis
Die RHSM_USER
Werte sind RHSM_PASSWORD
erforderlich, um Red Hat JBoss EAP zu installieren. Es wird empfohlen, ein Dienstkonto mit eingeschränkten Berechtigungen für den Zugriff auf das Red Hat-Kundenportal zu verwenden.
Verwenden Sie die folgenden Befehle, um den Admin-Host in Ihrem Red Hat Subscription Management (RHSM)-Konto zu registrieren:
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
Die Ausgabe sollte etwa folgendem Beispiel entsprechen:
Registering to: subscription.rhsm.redhat.com:443/subscription The system has been registered with ID: redacted The registered system name is: adminVM
Verwenden Sie den folgenden Befehl, um den Admin Host mit dem Red Hat JBoss EAP-Pool zu verbinden:
sudo subscription-manager attach --pool=${EAP_POOL}
Hinweis
Dieser Befehl wird ignoriert, wenn Sie den Modus Simple Content Access verwenden.
Verwenden Sie die folgenden Befehle, um Red Hat JBoss EAP zu installieren:
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
Für den zweiten und dritten Befehl sollten Sie viele Zeilen der Ausgabe sehen, die mit Complete!
enden
Verwenden Sie die folgenden Befehle, um Berechtigungen und Netzwerkkonfigurationen festzulegen:
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
Verwenden Sie die folgenden Befehle, um die Umgebungsvariablen zu konfigurieren:
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
Beenden Sie die SSH-Verbindung durch Eingabe von exit.
Erstellen von Maschinen für verwaltete Server
Sie haben Red Hat JBoss EAP auf adminVM
installiert, der als Domänencontroller-Server ausgeführt wird. Sie müssen noch Maschinen vorbereiten, auf denen die beiden Host-Controller-Server ausgeführt werden. Als nächstes erstellen Sie einen Snapshot von adminVM
und bereiten Maschinen für zwei verwaltete Server, mspVM1
und mspVM2
, vor.
In diesem Abschnitt wird ein Ansatz zur Vorbereitung von Maschinen mit dem Snapshot von adminVM
vorgestellt. Kehren Sie zu Ihrem Terminal zurück, in dem Azure CLI angemeldet ist, und führen Sie dann die folgenden Schritte aus:
Verwenden Sie den folgenden Befehl, um
adminVM
anzuhalten:az vm stop --resource-group $RESOURCE_GROUP_NAME --name adminVM
Verwenden Sie az snapshot create, um einen Snapshot des Datenträgers
adminVM
zu erstellen, wie im folgenden Beispiel gezeigt: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}
Verwenden Sie den folgenden Befehl, um
adminVM
zu starten:az vm start --resource-group $RESOURCE_GROUP_NAME --name adminVM
Verwenden Sie die folgenden Schritte, um
mspVM1
zu erstellen:Erstellen Sie zunächst einen verwalteten Datenträger für
mspVM1
mit 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}
Als nächstes erstellen Sie mit den folgenden Befehlen VM
mspVM1
, wobei Sie den Datenträger für das BetriebssystemmspVM1_OsDisk_1
anhängen:#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
Sie haben Red Hat JBoss EAP installiert und
mspVM1
erstellt. Da die VM aus einem Snapshot des DatenträgersadminVM
erstellt wurde, haben die beiden VMs denselben Hostnamen. Verwenden Sie az vm run-command invoke, um den Hostnamen auf den WertmspVM1
zu ändern:az vm run-command invoke \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM1 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM1"
Wenn der Befehl erfolgreich abgeschlossen wurde, sehen Sie eine Ausgabe ähnlich dem folgenden Beispiel:
{ "value": [ { "code": "ProvisioningState/succeeded", "displayStatus": "Provisioning succeeded", "level": "Info", "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n", "time": null } ] }
Verwenden Sie die gleichen Befehle, um
mspVM2
zu erstellen:#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"
Verwenden Sie die folgenden Befehle, um die privaten IP-Adressen abzurufen und anzuzeigen, die Sie in späteren Abschnitten verwenden:
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}"
Jetzt sind alle drei Maschinen bereit. Als nächstes konfigurieren Sie einen Red Hat JBoss EAP-Cluster im verwalteten Domänen-Modus.
Konfigurieren der verwalteten Domäne und des Clusters
Konfigurieren Sie den Cluster mit aktivierter Sitzungsreplikation. Weitere Informationen finden Sie unter Sitzungsreplikation.
Um die Sitzungsreplikation zu aktivieren, verwenden Sie Red Hat JBoss EAP High Availability für den Cluster. Microsoft Azure unterstützt keine JGroups-Erkennungsprotokolle, die auf Multicast beruhen. Sie können zwar auch andere JGroups-Erkennungsprotokolle verwenden (z. B. eine statische Konfiguration (TCPPING
), eine gemeinsam genutzte Datenbank (JDBC_PING
), ein auf einem gemeinsam genutzten Dateisystem basierendes Ping (FILE_PING
) oder TCPGOSSIP
), wir empfehlen jedoch dringend, das für Azure entwickelte Protokoll zur gemeinsamen Dateierkennung zu verwenden: AZURE_PING
. Weitere Informationen finden Sie unter Verwendung von JBoss EAP High Availability in Microsoft Azure.
Erstellen eines Azure Storage-Kontos und eines Blob-Containers für AZURE_PING
Verwenden Sie die folgenden Befehle, um ein Speicherkonto und einen Blob-Container zu erstellen:
# 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
Rufen Sie dann den Schlüssel des Speicherkontos zur späteren Verwendung mit dem folgenden Befehl ab. Wenn Sie eine Fehlermeldung erhalten, warten Sie ein paar Minuten und versuchen Sie es erneut. Der vorherige Befehl zum Erstellen des Speicherkontos ist möglicherweise noch nicht ausgeführt worden.
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}
Die folgende Ausgabe wird angezeigt.
{
"created": true
}
Domänencontroller (Admin-Knoten) konfigurieren
In diesem Tutorial werden die Red Hat JBoss EAP Management CLI-Befehle verwendet, um den Domänencontroller zu konfigurieren. Weitere Informationen finden Sie in der Management CLI Anleitung.
Mit den folgenden Schritten richten Sie die Konfiguration des Domänencontrollers auf adminVM
ein. Verwenden Sie SSH, um sich als Benutzer*innen adminVM
mit azureuser
zu verbinden. Erinnern Sie sich, dass die öffentliche IP-Adresse von adminVM
zuvor in der Umgebungsvariablen ADMIN_VM_PUBLIC_IP
erfasst wurde.
ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
Verwenden Sie zunächst die folgenden Befehle, um das HA-Profil und die JGroups unter Verwendung des AZURE_PING
-Protokolls zu konfigurieren:
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
Die letzte Zeile der Ausgabe sollte ähnlich wie im folgenden Beispiel aussehen. Ist dies nicht der Fall, beheben Sie das Problem, bevor Sie fortfahren.
[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
Verwenden Sie dann die folgenden Befehle, um den JBoss-Server zu konfigurieren und den EAP-Dienst einzurichten:
Hinweis
Die JBOSS_EAP_USER
Werte JBOSS_EAP_PASSWORD
sind erforderlich, um den JBoss-EAP-Verwaltungsbenutzer zu konfigurieren.
# 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'
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
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'
Verwenden Sie schließlich die folgenden Befehle, um den EAP-Dienst zu 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
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
● 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).
Geben Sie q ein, um den Pager zu beenden. Beenden Sie die SSH-Verbindung durch Eingabe von exit.
Nachdem Sie den Red Hat JBoss EAP-Dienst gestartet haben, können Sie über http://$ADMIN_VM_PUBLIC_IP:9990
in Ihrem Webbrowser auf die Verwaltungskonsole zugreifen. Melden Sie sich mit dem konfigurierten Benutzernamen jbossadmin
und Kennwort Secret123456
an.
Wählen Sie die Registerkarte Runtime aus. Wählen Sie im Navigationsbereich die Option Topology aus. Sie sollten sehen, dass Ihr Cluster im Moment nur einen Domänencontroller enthält:
Konfigurieren des Host-Controllers (Arbeitsknoten)
Verwenden Sie SSH, um sich mit mspVM1
als Benutzer*in von azureuser
zu verbinden. Ermitteln Sie die öffentliche IP-Adresse der VM mit dem folgenden Befehl:
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
Verwenden Sie die folgenden Befehle, um den Host-Controller auf mspVM1
einzurichten:
# 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
Verwenden Sie die folgenden Befehle, um die Änderungen am Host-Controller auf mspVM1
anzuwenden:
# 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})"
Die letzte Zeile der Ausgabe sollte ähnlich wie im folgenden Beispiel aussehen. Ist dies nicht der Fall, beheben Sie das Problem, bevor Sie fortfahren.
[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
Verwenden Sie dann die folgenden Befehle, um den JBoss-Server zu konfigurieren und den EAP-Dienst einzurichten:
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
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
● 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).
Geben Sie q ein, um den Pager zu beenden. Beenden Sie die SSH-Verbindung durch Eingabe von exit.
Verwenden Sie SSH, um sich mit mspVM2
als Benutzer*in von azureuser
zu verbinden. Ermitteln Sie die öffentliche IP-Adresse der VM mit dem folgenden Befehl:
az vm show \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM2 \
--show-details \
--query publicIps | tr -d '"'
Wiederholen Sie die vorherigen Schritte auf mspVM2
und beenden Sie die SSH-Verbindung durch Eingabe von exit.
Nachdem zwei Host-Controller mit adminVM
verbunden sind, sollten Sie die Topologie des Clusters sehen können, wie im folgenden Screenshot dargestellt:
Red Hat JBoss EAP Cluster mit Azure Application Gateway bereitstellen
Nachdem Sie den Cluster auf Azure-VMs erstellt haben, erfahren Sie in diesem Abschnitt, wie Sie JBoss EAP mit Azure Application Gateway ins Internet bringen.
Erstellen Sie die Azure Application Gateway-Instanz.
Um Red Hat JBoss EAP für das Internet zugänglich zu machen, benötigen Sie eine öffentliche IP-Adresse. Erstellen Sie die öffentliche IP-Adresse und verknüpfen Sie dann ein Azure Application Gateway damit. Verwenden Sie az network public-ip create, um sie zu erstellen, wie im folgenden Beispiel gezeigt:
az network public-ip create \
--resource-group $RESOURCE_GROUP_NAME \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
Als nächstes fügen Sie die Backend-Server zum Application Gateway Backend-Pool hinzu. Verwenden Sie für die Abfrage der IP-Adressen der Backends die folgenden Befehle. Sie haben nur die Host-Controller (Arbeitsknoten) als Backend-Server konfiguriert.
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)
Als nächstes erstellen Sie ein Azure Application Gateway. Das folgende Beispiel erstellt ein Application Gateway mit Host-Controllern im Standard Backend-Pool:
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}
Hinweis
In diesem Beispiel wird ein einfacher Zugriff auf die Red Hat JBoss EAP-Server über HTTP eingerichtet. Wenn Sie einen sicheren Zugriff wünschen, konfigurieren Sie die TLS/SSL-Terminierung, indem Sie die Anweisungen in Ende-zu-Ende TLS mit Application Gateway befolgen.
In diesem Beispiel werden die Host-Controller über Port 8080 angesprochen. Sie stellen in späteren Schritten eine Beispielanwendung mit einer Datenbankverbindung zum Cluster bereit.
Azure Database für PostgreSQL Flexible-Server verbinden
Dieser Abschnitt zeigt Ihnen, wie Sie eine Azure Database for PostgreSQL Flexible-Server-Instanz erstellen und eine Verbindung zu PostgreSQL auf Ihrem Red Hat JBoss EAP-Cluster konfigurieren.
Erstellen einer Azure Datenbank for PostgreSQL Flexible-Server-Instanz
Verwenden Sie die folgenden Schritte, um die Datenbankinstanz zu erstellen:
Verwenden Sie az postgres flexible-server create , um eine Azure Datenbank for PostgreSQL Flexible-Server -nstanz zu erstellen, wie im folgenden Beispiel gezeigt:
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
Verwenden Sie die folgenden Befehle, um den Zugriff von Azure Services aus zuzulassen:
# 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"
Verwenden Sie den folgenden Befehl, um die Datenbank zu erstellen:
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name ${DB_SERVER_NAME} \ --database-name testdb
Treiber installieren
Führen Sie die folgenden Schritte aus, um den INSTALLATIONStreiber mit der JBoss Management CLI zu installieren:
Verbinden Sie sich per SSH mit
adminVM
, indem Sie den folgenden Befehl verwenden. Sie können diesen Schritt überspringen, wenn Sie bereits eine Verbindung geöffnet haben.ssh -A -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
Verwenden Sie die folgenden Befehle, um DEN ELEMENTTREIBER AUF adminVM herunterzuladen:
# 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
Verwenden Sie die folgenden Befehle, um den ELEMENTTREIBER AUF die Hostcontroller zu kopieren:
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"
Die Log-Dateien des Servers befinden sich auf
mspVM1
undmspVM2
unter/var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log
. Wenn die Bereitstellung fehlschlägt, prüfen Sie diese Log-Datei und beheben Sie das Problem, bevor Sie fortfahren.
Verwenden Sie die folgenden Befehle, um den BEFEHL ZU registrieren:
# 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)"
Konfigurieren der Datenbankverbindung für den Red Hat JBoss EAP-Cluster
Sie haben den Datenbankserver gestartet, die erforderliche Ressourcen-ID abgerufen und den JDBC-Treiber installiert. Die nächsten Schritte in diesem Abschnitt zeigen Ihnen, wie Sie die JBoss CLI verwenden, um eine Datenquellenverbindung mit der zuvor erstellten PostgreSQL-Instanz zu konfigurieren.
Öffnen Sie ein Terminal und verbinden Sie sich per SSH mit
adminVM
, indem Sie den folgenden Befehl verwenden:ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
Erstellen Sie die Datenquelle mit Hilfe der folgenden Befehle:
# 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} "
Sie haben erfolgreich eine Datenquelle mit dem Namen java:jboss/datasources/JavaEECafeDB
konfiguriert.
Java EE Cafe-Beispielanwendung bereitstellen
Führen Sie die folgenden Schritte aus, um die Java EE Cafe-Beispielanwendung auf dem Red Hat JBoss EAP-Cluster bereitzustellen:
Verwenden Sie die folgenden Schritte, um Java EE Cafe zu erstellen. Diese Schritte setzen voraus, dass Sie über eine lokale Umgebung mit installiertem Git und Maven verfügen:
Verwenden Sie den folgenden Befehl, um den Quellcode von GitHub zu klonen:
git clone https://github.com/Azure/rhel-jboss-templates.git --branch 20240904 --single-branch
Verwenden Sie den folgenden Befehl, um den Quellcode zu erstellen:
mvn clean install --file rhel-jboss-templates/eap-coffee-app/pom.xml
Dieser Befehl erstellt die Datei eap-coffee-app/target/javaee-cafe.war. Diese Datei laden Sie im nächsten Schritt hoch.
Öffnen Sie einen Webbrowser und rufen Sie die Verwaltungskonsole unter
http://<adminVM-public-IP>:9990
auf. Melden Sie sich dann mit dem Benutzernamenjbossadmin
und dem KennwortSecret123456
an.Führen Sie die folgenden Schritte aus, um die Datei javaee-cafe.war in das Content Repository hochzuladen:
Wählen Sie auf der Registerkarte Deployments der Red Hat JBoss EAP-Verwaltungskonsole im Navigationsbereich Content Repository.
Klicken Sie auf die Schaltfläche Add, und wählen Sie dann Upload Content.
Verwenden Sie Dateiauswahl des Browsers, um die Datei javaee-cafe.war auszuwählen.
Wählen Sie Weiter aus.
Übernehmen Sie auf dem nächsten Bildschirm die Standardwerte, und wählen Sie anschließend Finish aus.
Wählen Sie View content aus.
Führen Sie die folgenden Schritte aus, um eine Anwendung auf
main-server-group
bereitzustellen:Wählen Sie unter Content Repository die Option javaee-cafe.war aus.
Wählen Sie im Dropdown-Menü Deploy.
Wählen Sie
main-server-group
als Servergruppe für die Bereitstellung von javaee-cafe.war.Wählen Sie Bereitstellen aus, um die Bereitstellung zu starten. Daraufhin sollte ein Hinweis wie der folgende angezeigt werden:
Testen der Red Hat JBoss EAP-Cluster-Konfiguration
Sie haben den JBoss EAP-Cluster konfiguriert und die Anwendung darauf bereitgestellt. Verwenden Sie die folgenden Schritte, um auf die Anwendung zuzugreifen und alle Einstellungen zu überprüfen:
Verwenden Sie den folgenden Befehl, um die öffentliche IP-Adresse des Azure Application Gateway abzurufen:
az network public-ip show \ --resource-group $RESOURCE_GROUP_NAME \ --name myAGPublicIPAddress \ --query '[ipAddress]' \ --output tsv
Öffnen Sie einen Webbrowser.
Navigieren Sie zu der Anwendung mit der URL
http://<gateway-public-ip-address>/javaee-cafe/
. Vergessen Sie den abschließenden Schrägstrich nicht.Versuchen Sie, Kaffees hinzuzufügen und zu entfernen.
Bereinigen von Ressourcen
Zum Vermeiden von Azure-Gebühren sollten Sie nicht benötigte Ressourcen bereinigen. Wenn Sie den auf einer Azure-VM bereitgestellten Red Hat JBoss EAP-Cluster nicht mehr benötigen, heben Sie die Registrierung der Red Hat JBoss EAP-Server auf und entfernen Sie die Ressourcen von Azure.
Verwenden Sie die folgenden Befehle, um die Registrierung der Red Hat JBoss EAP-Server und -VMs aus der Red Hat Abonnement-Verwaltung aufzuheben:
# 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"
Verwenden Sie den folgenden Befehl, um die Ressourcengruppe $RESOURCE_GROUP_NAME
zu löschen:
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Nächste Schritte
Entdecken Sie weitere Optionen, um JBoss EAP auf Azure auszuführen.