教學課程:手動在 Azure 虛擬機器 上安裝 Red Hat JBoss EAP
本教學課程說明在 Red Hat Enterprise Linux 上安裝 Red Hat JBoss EAP 並在 Azure 虛擬機器 (VM)上設定叢集的步驟。
在本教學課程中,您將瞭解如何執行下列工作:
- 建立自定義虛擬網路,並在網路中建立 VM。
- 手動使用命令行在 VM 上安裝所需的 JDK 和 Red Hat JBoss EAP。
- 使用命令行介面 (CLI) 在網域模式中設定 Red Hat JBoss EAP 叢集。
- 在叢集中設定 PostgreSQL 數據源連線。
- 在叢集中部署和執行範例 Java EE 應用程式。
- 透過 Azure 應用程式閘道 將應用程式公開至公用因特網。
- 驗證成功的設定。
如果您偏好使用完全自動化的解決方案,代表 GNU/Linux VM 執行上述所有步驟,請直接從 Azure 入口網站,請參閱快速入門:使用 Azure 入口網站 在 Azure 虛擬機上部署 JBoss EAP Server。
注意
本文包含「從屬」一詞的參考,Microsoft 已不再使用該字詞。 從軟體中移除該字詞時,我們也會將其從本文中移除。
必要條件
如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
安裝 Azure CLI 2.51.0 版 或更高版本以執行 Azure CLI 命令。
- 出現提示時,請在第一次使用時安裝 Azure CLI 擴充功能。 如需延伸模組詳細資訊,請參閱使用 Azure CLI 延伸模組。
- 執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
請確定您擁有必要的 Red Hat 授權。 您必須具備 Red Hat 訂用帳戶管理 (RHSM) Red Hat JBoss EAP 的 Red Hat 帳戶。 此權利可讓先前所述的完全自動化解決方案(使用 Azure 入口網站 在 Azure 虛擬機上部署 JBoss EAP 伺服器中),以安裝經過測試和認證的 JBoss EAP 版本。
注意
如果您沒有 EAP 權利,您可以透過個人版 Red Hat 開發人員訂用帳戶註冊免費的開發人員訂用帳戶。 將帳戶詳細數據儲存在一邊,在下一節中做為 RHSM 用戶名稱和RHSM 密碼 。
如果您已註冊,或在完成註冊之後,您可以使用下列步驟找出必要的認證(集區標識符)。 這些 集區標識碼 也會作為後續步驟中的 RHSM 集區標識碼與 EAP 權利 。
登入您的 Red Hat 帳戶。
第一次登入時,系統會提示您完成配置檔。 根據您的使用量,選取 [個人 ] 或 [公司 帳戶 類型],如下列螢幕快照所示:
開啟 個人版的 Red Hat 開發人員訂用帳戶。 此連結會帶您前往帳戶中適用於適當 SKU 的所有訂用帳戶。
在 [所有已購買的訂閱] 數據表底下的控件數據列中,選取 [作用中]。 這可確保只會顯示作用中的訂用帳戶。
選取 [結束日期] 的可排序數據行標頭,直到未來最遠的值顯示為第一個數據列為止。
選取第一個數據列。 然後,從集區標識符複製並儲存下列主要集區的值。
Java JDK 版本 11。 在本指南中,我們建議 使用 Red Hat Build of OpenJDK。 請確定您已在命令執行所在的殼層中正確設定
JAVA_HOME
環境變數。Git;用來
git --version
測試是否git
正常運作。 本教學課程已經過 2.25.1 版的測試。Maven;用來
mvn -version
測試是否mvn
正常運作。 本教學課程已經過 3.6.3 版的測試。
準備環境
在本節中,您會設定安裝 JDK、Red Hat JBoss EAP 和 PostgreSQL JDBC 驅動程式的基礎結構。
假設
本教學課程會在網域模式中設定 Red Hat JBoss EAP 叢集,並在總共三部 VM 上設定兩部受管理伺服器。 若要設定叢集,您必須建立下列三個 Azure VM:
- 系統管理 VM (VM 名稱
adminVM
) 會以域控制器身分執行。 - 兩個受控 VM (VM 名稱和
mspVM1
mspVM2
) 會以主機控制器身分執行。
登入 Azure
如果您尚未登入,請使用 az login 命令登入您的 Azure 訂用帳戶,並遵循螢幕上的指示。
az login
注意
如果您有多個與 Azure 認證相關聯的 Azure 租使用者,您必須指定您要登入的租使用者。 您可以使用 選項來執行此動作 --tenant
。 例如: az login --tenant contoso.onmicrosoft.com
。
建立資源群組
使用 az group create 來建立資源群組。 資源群組名稱在訂用帳戶全域中必須是唯一的。 基於這個理由,請考慮將一些唯一標識符前面加上您建立的任何名稱,該名稱必須是唯一的。 實用的技巧是使用您的首字母,後面接著使用 mmdd
格式的今天日期。 此範例會在位置中eastus
建立名為 abc1110rg
的資源群組:
az group create \
--name abc1110rg \
--location eastus
建立虛擬網路
組成 Red Hat JBoss EAP 叢集的資源必須使用虛擬網路彼此通訊,以及公用因特網。 如需規劃虛擬網路的完整指南,請參閱 Azure 指南規劃虛擬網路的 雲端採用架構。 如需詳細資訊,請參閱 Azure 虛擬網絡 常見問題。
本節中的範例會建立具有位址空間 192.168.0.0/16
的虛擬網路,並建立用於 VM 的子網。
首先,使用 az network vnet create 建立虛擬網路。 下列範例會建立名為 myVNet
的網路:
az network vnet create \
--resource-group abc1110rg \
--name myVNet \
--address-prefixes 192.168.0.0/24
使用 az network vnet subnet create 建立 Red Hat JBoss EAP 叢集的子網。 下列範例會建立名為 mySubnet
的子網:
az network vnet subnet create \
--resource-group abc1110rg \
--name mySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.0/25
使用 az network vnet subnet create 建立 應用程式閘道 的子網。 下列範例會建立名為 jbossVMGatewaySubnet
的子網:
az network vnet subnet create \
--resource-group abc1110rg \
--name jbossVMGatewaySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.128/25
建立網路安全組,並將子網指派給它
建立具有公用IP的VM之前,請先建立網路安全組 (NSG),以保護先前建立的虛擬網路和子網。
使用 az network nsg create 建立網路安全組。 下列範例會建立名為 mynsg
的網路安全性群組:
az network nsg create \
--resource-group abc1110rg \
--name mynsg
使用 az network nsg rule create 建立網路安全組規則。 下列範例會建立名為 ALLOW_APPGW
和 ALLOW_HTTP_ACCESS
的網路安全組規則。 這些規則可讓應用程式閘道在 Red Hat JBoss EAP 所使用的 HTTP 連接埠上接受輸入流量:
az network nsg rule create \
--resource-group abc1110rg \
--nsg-name mynsg \
--name ALLOW_APPGW \
--protocol Tcp \
--destination-port-ranges 65200-65535 \
--source-address-prefix GatewayManager \
--destination-address-prefix '*' \
--access Allow \
--priority 500 \
--direction Inbound
az network nsg rule create \
--resource-group abc1110rg \
--nsg-name mynsg \
--name ALLOW_HTTP_ACCESS \
--protocol Tcp \
--destination-port-ranges 22 80 443 9990 8080 \
--source-address-prefix Internet \
--destination-address-prefix '*' \
--access Allow \
--priority 510 \
--direction Inbound
使用 az network vnet subnet update 將先前建立的子網關聯至此網路安全組,如下列範例所示:
az network vnet subnet update \
--resource-group abc1110rg \
--vnet-name myVNet \
--name mySubnet \
--network-security-group mynsg
az network vnet subnet update \
--resource-group abc1110rg \
--vnet-name myVNet \
--name jbossVMGatewaySubnet \
--network-security-group mynsg
為系統管理員建立 Red Hat Enterprise Linux 計算機
建立系統管理 VM
您用來建立 VM 的 Marketplace 映像為 RedHat:rhel-raw:86-gen2:latest
。 如需其他映像,請參閱 Azure 中提供的 Red Hat Enterprise Linux (RHEL) 映像。
注意
您可以使用 az vm image list 命令查詢 Red Hat 所提供的所有可用 Red Hat Enterprise Linux 映像,例如:az vm image list --offer RHEL --publisher RedHat --output table --all
。 如需詳細資訊,請參閱 Red Hat Enterprise Linux 映像概觀。
如果您使用不同的映像,您可能需要安裝額外的連結庫,才能啟用本指南中使用的基礎結構。
建立基本 VM、在上面安裝所有必要的工具、建立快照集,然後根據快照集建立複本。
使用 az vm create 建立 VM。 您會在此 VM 上執行 管理員 伺服器。
下列範例會使用使用者名稱和密碼組來建立 Red Hat Enterprise Linux VM 來進行驗證。 如有需要,您可以改用 TLS/SSL 驗證。
az vm create \
--resource-group abc1110rg \
--name adminVM \
--image RedHat:rhel-raw:86-gen2:latest \
--size Standard_DS1_v2 \
--admin-username azureuser \
--admin-password Secret123456 \
--public-ip-sku Standard \
--nsg mynsg \
--vnet-name myVnet \
--subnet mySubnet
安裝 OpenJDK 11 和 Red Hat JBoss EAP 7.4
使用下列步驟來安裝:
使用下列指令取得 的
adminVM
公用IP:export ADMIN_VM_PUBLIC_IP=$(az vm show \ --resource-group abc1110rg \ --name adminVM \ --show-details \ --query publicIps | tr -d '"')
使用下列命令開啟終端機與 SSH 至
adminVM
:ssh azureuser@$ADMIN_VM_PUBLIC_IP
提供
Secret123456
做為密碼。使用下列命令設定埠的防火牆:
sudo firewall-cmd --zone=public --add-port={9999/tcp,8443/tcp,8009/tcp,8080/tcp,9990/tcp,9993/tcp,45700/tcp,7600/tcp} --permanent sudo firewall-cmd --reload sudo iptables-save
您應該會在前兩個命令之後看到這個字
success
。 您應該會在第三個命令之後看到類似下列範例的輸出:# Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *filter :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *security :INPUT ACCEPT [19:3506] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [5:492] -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m owner --uid-owner 0 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m conntrack --ctstate INVALID,NEW -j DROP COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *raw :PREROUTING ACCEPT [20:3546] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *mangle :PREROUTING ACCEPT [20:3546] :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] :POSTROUTING ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *nat :PREROUTING ACCEPT [1:40] :INPUT ACCEPT [0:0] :POSTROUTING ACCEPT [4:240] :OUTPUT ACCEPT [4:240] COMMIT # Completed on Wed Mar 29 22:39:23 2023
使用下列命令,將系統管理員主機註冊到您的 Red Hat 訂用帳戶管理 (RHSM) 帳戶:
export RHSM_USER=<your-rhsm-username> export RHSM_PASSWORD="<your-rhsm-password>" export EAP_POOL=<your-rhsm-pool-ID> sudo subscription-manager register --username ${RHSM_USER} --password ${RHSM_PASSWORD} --force
您應該會看到類似下列範例的結果:
Registering to: subscription.rhsm.redhat.com:443/subscription The system has been registered with ID: redacted The registered system name is: adminVM
使用下列命令將系統管理員主機附加至 Red Hat JBoss EAP 集區:
sudo subscription-manager attach --pool=${EAP_POOL}
注意
如果您使用簡單內容存取模式,則會忽略此命令。
使用下列命令安裝 OpenJDK 11:
sudo yum install java-11-openjdk -y
您應該會看到許多輸出行,結尾為
Complete!
使用下列命令來安裝 Red Hat JBoss EAP 7.4:
sudo subscription-manager repos --enable=jb-eap-7.4-for-rhel-8-x86_64-rpms sudo yum update -y --disablerepo='*' --enablerepo='*microsoft*' sudo yum groupinstall -y jboss-eap7
針對第二和第三個命令,您應該會看到許多輸出行,結尾為
Complete!
使用下列命令來設定權限和 TCP 組態:
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config echo 'AllowTcpForwarding no' | sudo tee -a /etc/ssh/sshd_config sudo systemctl restart sshd
使用下列命令來設定環境變數:
echo 'export EAP_RPM_CONF_DOMAIN="/etc/opt/rh/eap7/wildfly/eap7-domain.conf"' >> ~/.bash_profile echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' >> ~/.bash_profile source ~/.bash_profile sudo touch /etc/profile.d/eap_env.sh echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' | sudo tee -a /etc/profile.d/eap_env.sh
輸入 exit 以結束 SSH 連線。
建立受管理伺服器的機器
您已在 上安裝 adminVM
OpenJDK 11 和 Red Hat JBoss EAP 7.4,其會以域控制器伺服器的形式執行。 您仍然需要準備機器以執行兩部主機控制器伺服器。 接下來,您會建立的 adminVM
快照集,併為兩個受控分機 mspVM1
和 mspVM2
準備機器。
本節介紹使用 快照 adminVM
集準備機器的方法。 返回已登入 Azure CLI 的終端機,然後使用下列步驟:
使用下列命令來停止
adminVM
:az vm stop --resource-group abc1110rg --name adminVM
使用 az snapshot create 來擷取 OS 磁碟的
adminVM
快照集,如下列範例所示:export ADMIN_OS_DISK_ID=$(az vm show \ --resource-group abc1110rg \ --name adminVM \ --query storageProfile.osDisk.managedDisk.id \ --output tsv) az snapshot create \ --resource-group abc1110rg \ --name myAdminOSDiskSnapshot \ --source ${ADMIN_OS_DISK_ID}
使用下列指令啟動
adminVM
:az vm start --resource-group abc1110rg --name adminVM
使用下列步驟來建立
mspVM1
:首先,使用 az disk create 建立 的
mspVM1
受控磁碟:#Get the snapshot ID export SNAPSHOT_ID=$(az snapshot show \ --name myAdminOSDiskSnapshot \ --resource-group abc1110rg \ --query '[id]' \ --output tsv) #Create a new Managed Disks using the snapshot Id #Note that managed disk is created in the same location as the snapshot az disk create \ --resource-group abc1110rg \ --name mspVM1_OsDisk_1 \ --source ${SNAPSHOT_ID}
接下來,使用下列命令來建立 VM
mspVM1
,並連結 OS 磁碟mspVM1_OsDisk_1
:#Get the resource Id of the managed disk export MSPVM1_DISK_ID=$(az disk show \ --name mspVM1_OsDisk_1 \ --resource-group abc1110rg \ --query '[id]' \ --output tsv) #Create VM by attaching existing managed disks as OS az vm create \ --resource-group abc1110rg \ --name mspVM1 \ --attach-os-disk ${MSPVM1_DISK_ID} \ --os-type linux \ --public-ip-sku Standard \ --nsg mynsg \ --vnet-name myVnet \ --subnet mySubnet
您已使用已安裝 OpenJDK 11 和 Red Hat JBoss EAP 7.4 來建立
mspVM1
。 由於 VM 是從 OS 磁碟的adminVM
快照集建立,因此這兩個 VM 具有相同的主機名。 使用 az vm run-command invoke 將主機名變更為 值mspVM1
:az vm run-command invoke \ --resource-group abc1110rg \ --name mspVM1 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM1"
當命令順利完成時,您會看到類似下列範例的輸出:
{ "value": [ { "code": "ProvisioningState/succeeded", "displayStatus": "Provisioning succeeded", "level": "Info", "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n", "time": null } ] }
使用相同的指令來建立
mspVM2
:#Create a new Managed Disks for mspVM2 az disk create \ --resource-group abc1110rg \ --name mspVM2_OsDisk_1 \ --source ${SNAPSHOT_ID} #Get the resource Id of the managed disk export MSPVM2_DISK_ID=$(az disk show \ --name mspVM2_OsDisk_1 \ --resource-group abc1110rg \ --query '[id]' \ --output tsv) #Create VM by attaching existing managed disks as OS az vm create \ --resource-group abc1110rg \ --name mspVM2 \ --attach-os-disk ${MSPVM2_DISK_ID} \ --os-type linux \ --public-ip-sku Standard \ --nsg mynsg \ --vnet-name myVnet \ --subnet mySubnet #Set hostname az vm run-command invoke \ --resource-group abc1110rg \ --name mspVM2 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM2"
使用下列命令來取得並顯示您在後續章節中使用的私人 IP 位址:
export ADMINVM_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name adminVM \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export ADMINVM_IP=$(az network nic show \
--ids ${ADMINVM_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM1_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name mspVM1 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM1_IP=$(az network nic show \
--ids ${MSPVM1_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM2_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name mspVM2 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM2_IP=$(az network nic show \
--ids ${MSPVM2_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
echo "Private IP of adminVM: ${ADMINVM_IP}"
echo "Private IP of mspVM1: ${MSPVM1_IP}"
echo "Private IP of mspVM2: ${MSPVM2_IP}"
現在,這三部機器都已就緒。 接下來,您會在受控網域模式中設定 Red Hat JBoss EAP 叢集。
設定受控網域和叢集
設定已啟用會話復寫的叢集。 如需詳細資訊,請參閱 會話複寫。
若要啟用會話複寫,請使用叢集的 Red Hat JBoss EAP 高可用性。 Microsoft Azure 不支援以 UDP 多播為基礎的 JGroups 探索通訊協定。 雖然您可以使用其他 JGroups 探索通訊協定(例如靜態組態)、共用資料庫 (TCPPING
JDBC_PING
)、共用文件系統型 Ping (FILE_PING
), 或 TCPGOSSIP
),但強烈建議您使用專為 Azure 開發的共用檔案探索通訊協定:AZURE_PING
。 如需詳細資訊,請參閱 在 Microsoft Azure 中使用 JBoss EAP 高可用性。
建立適用於AZURE_PING的 Azure 記憶體帳戶和 Blob 容器
使用下列命令來建立記憶體帳戶和 Blob 容器:
# Define your storage account name
export STORAGE_ACCOUNT_NAME=azurepingstgabc1110rg
# Define your Blob container name
export CONTAINER_NAME=azurepingcontainerabc1110rg
# Create storage account
az storage account create \
--resource-group abc1110rg \
--name ${STORAGE_ACCOUNT_NAME} \
--location eastus \
--sku Standard_LRS \
--kind StorageV2 \
--access-tier Hot
然後,使用下列命令擷取記憶體帳戶密鑰以供稍後使用。 如果您看到錯誤,請稍候幾分鐘,然後再試一次。 此錯誤可能是由上一個命令所造成,以建立未完全完成的記憶體帳戶。
export STORAGE_ACCESS_KEY=$(az storage account keys list \
--resource-group abc1110rg \
--account-name ${STORAGE_ACCOUNT_NAME} \
--query "[0].value" \
--output tsv)
# Create blob container
az storage container create \
--name ${CONTAINER_NAME} \
--account-name ${STORAGE_ACCOUNT_NAME} \
--account-key ${STORAGE_ACCESS_KEY}
您應該會看見下列輸出:
{
"created": true
}
設定網域控制器 (管理員節點)
本教學課程使用 Red Hat JBoss EAP 管理 CLI 命令來設定域控制器。 如需詳細資訊,請參閱 管理 CLI 指南。
下列步驟在 上 adminVM
設定域控制器組態。 使用 SSH 以使用者身分azureuser
連線到 adminVM
。 回想一下,先前已將的 adminVM
公用IP位址擷取到 ADMIN_VM_PUBLIC_IP
環境變數中。
ssh azureuser@$ADMIN_VM_PUBLIC_IP
首先,使用下列命令來使用 AZURE_PING
通訊協議來設定HA設定檔和 JGroups:
export HOST_VM_IP=$(hostname -I)
export STORAGE_ACCOUNT_NAME=azurepingstgabc1110rg
export CONTAINER_NAME=azurepingcontainerabc1110rg
export STORAGE_ACCESS_KEY=<the-value-from-before-you-connected-with-SSH>
#-Configure the HA profile and JGroups using AZURE_PING protocol
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
'embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-master.xml',\
':write-attribute(name=name,value=domain1)',\
'/profile=ha/subsystem=jgroups/stack=tcp:remove',\
'/profile=ha/subsystem=jgroups/stack=tcp:add()',\
'/profile=ha/subsystem=jgroups/stack=tcp/transport=TCP:add(socket-binding=jgroups-tcp,properties={ip_mcast=false})',\
"/profile=ha/subsystem=jgroups/stack=tcp/protocol=azure.AZURE_PING:add(properties={storage_account_name=\"${STORAGE_ACCOUNT_NAME}\", storage_access_key=\"${STORAGE_ACCESS_KEY}\", container=\"${CONTAINER_NAME}\"})",\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MERGE3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_ALL:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=VERIFY_SUSPECT:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.NAKACK2:add(properties={use_mcast_xmit=false,use_mcast_xmit_req=false})',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=UNICAST3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.STABLE:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.GMS:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MFC:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FRAG3:add',\
'/profile=ha/subsystem=jgroups/channel=ee:write-attribute(name="stack", value="tcp")',\
'/server-group=main-server-group:write-attribute(name="profile", value="ha")',\
'/server-group=main-server-group:write-attribute(name="socket-binding-group", value="ha-sockets")',\
"/host=master/subsystem=elytron/http-authentication-factory=management-http-authentication:write-attribute(name=mechanism-configurations,value=[{mechanism-name=DIGEST,mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])",\
"/host=master/interface=unsecure:add(inet-address=${HOST_VM_IP})",\
"/host=master/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=master/interface=public:add(inet-address=${HOST_VM_IP})"
# Save a copy of the domain.xml, later you need to share it with all host controllers
cp $EAP_HOME/wildfly/domain/configuration/domain.xml /tmp/domain.xml
輸出的最後一節看起來應該類似下列範例。 如果沒有,請先進行疑難解答並解決問題,再繼續進行。
[domain@embedded /] /host=master/interface=public:add(inet-address=192.168.0.4 )
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined,
"response-headers" => {"process-state" => "reload-required"}
}
02:05:55,019 INFO [org.jboss.as] (MSC service thread 1-1) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 28ms
然後,使用下列命令來設定 JBoss 伺服器並設定 EAP 服務:
# Configure the JBoss server and setup EAP service
echo 'WILDFLY_HOST_CONFIG=host-master.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN
# Configure JBoss EAP management user
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
sudo $EAP_HOME/wildfly/bin/add-user.sh -u $JBOSS_EAP_USER -p $JBOSS_EAP_PASSWORD -g 'guest,mgmtgroup'
輸出應類似下列範例:
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-users.properties'
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-users.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-groups.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-groups.properties'
最後,使用下列命令啟動 EAP 服務:
# Start the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service
# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service
# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service
# Check the status of EAP service
systemctl status eap7-domain.service
輸出應類似下列範例:
● eap7-domain.service - JBoss EAP (domain mode)
Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
Active: active (running) since Thu 2023-03-30 02:11:44 UTC; 5s ago
Main PID: 3855 (scl)
Tasks: 82 (limit: 20612)
Memory: 232.4M
CGroup: /system.slice/eap7-domain.service
├─3855 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
├─3856 /bin/bash /var/tmp/sclfYu7yW
├─3858 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
├─3862 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
├─3955 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
└─3967 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>
Mar 30 02:11:44 adminVM systemd[1]: Started JBoss EAP (domain mode).
輸入 q 以結束呼叫器。 輸入 exit 以結束 SSH 連線。
啟動 Red Hat JBoss EAP 服務之後,您可以在網頁瀏覽器中透過 http://$ADMIN_VM_PUBLIC_IP:9990
存取管理主控台。 使用已設定的使用者 jbossadmin
名稱和密碼 Secret123456
登入。
選取 [運行時間] 索引標籤。在瀏覽窗格中,選取 [拓撲]。 您現在應該會看到叢集只包含一個域控制器:
設定主機控制器 (背景工作節點)
使用 SSH 以使用者身azureuser
分連線至 mspVM1
。 使用下列指令取得 VM 的公用 IP 位址:
MSPVM_PUBLIC_IP=$(az vm show \
--resource-group abc1110rg \
--name mspVM1 \
--show-details \
--query publicIps)
ssh azureuser@$MSPVM_PUBLIC_IP
請記住密碼與之前相同,因為 mspVM1
只是的 adminVM
複製。
使用下列命令在 上 mspVM1
設定主機控制器:
# environment variables
export DOMAIN_CONTROLLER_PRIVATE_IP=<adminVM-private-IP>
export HOST_VM_NAME=$(hostname)
export HOST_VM_NAME_LOWERCASE=$(echo "${HOST_VM_NAME,,}")
export HOST_VM_IP=$(hostname -I)
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
# Save default domain configuration as backup
sudo -u jboss mv $EAP_HOME/wildfly/domain/configuration/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml.backup
# Fetch domain.xml from domain controller
sudo -u jboss scp azureuser@${DOMAIN_CONTROLLER_PRIVATE_IP}:/tmp/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml
系統會要求您輸入連線的密碼。 在此範例中,密碼為 Secret123456。
使用下列命令將主機控制器變更套用至 mspVM1
:
# Setup host controller
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
"embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-slave.xml",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=server-one:remove",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=server-two:remove",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=${HOST_VM_NAME_LOWERCASE}-server0:add(group=main-server-group)",\
"/host=${HOST_VM_NAME_LOWERCASE}/subsystem=elytron/authentication-configuration=slave:add(authentication-name=${JBOSS_EAP_USER}, credential-reference={clear-text=${JBOSS_EAP_PASSWORD}})",\
"/host=${HOST_VM_NAME_LOWERCASE}/subsystem=elytron/authentication-context=slave-context:add(match-rules=[{authentication-configuration=slave}])",\
"/host=${HOST_VM_NAME_LOWERCASE}:write-attribute(name=domain-controller.remote.username, value=${JBOSS_EAP_USER})",\
"/host=${HOST_VM_NAME_LOWERCASE}:write-attribute(name=domain-controller.remote, value={host=${DOMAIN_CONTROLLER_PRIVATE_IP}, port=9990, protocol=remote+http, authentication-context=slave-context})",\
"/host=${HOST_VM_NAME_LOWERCASE}/core-service=discovery-options/static-discovery=primary:write-attribute(name=host, value=${DOMAIN_CONTROLLER_PRIVATE_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=unsecured:add(inet-address=${HOST_VM_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=public:write-attribute(name=inet-address, value=${HOST_VM_IP})"
輸出的最後一節看起來應該類似下列範例。 如果沒有,請先進行疑難解答並解決問題,再繼續進行。
[domain@embedded /] /host=mspvm1/interface=public:write-attribute(name=inet-address, value=192.168.0.5 )
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined,
"response-headers" => {"process-state" => "reload-required"}
}
02:58:59,388 INFO [org.jboss.as] (MSC service thread 1-2) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 58ms
然後,使用下列命令來設定 JBoss 伺服器並設定 EAP 服務:
echo 'WILDFLY_HOST_CONFIG=host-slave.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN
# Enable the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service
# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service
# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service
# Check the status of EAP service
systemctl status eap7-domain.service
輸出應類似下列範例:
● eap7-domain.service - JBoss EAP (domain mode)
Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
Active: active (running) since Thu 2023-03-30 03:02:15 UTC; 7s ago
Main PID: 9699 (scl)
Tasks: 51 (limit: 20612)
Memory: 267.6M
CGroup: /system.slice/eap7-domain.service
├─9699 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
├─9700 /bin/bash /var/tmp/sclgJ1hRD
├─9702 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
├─9706 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
├─9799 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
└─9811 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>
Mar 30 03:02:15 mspVM1 systemd[1]: Started JBoss EAP (domain mode).
輸入 q 以結束呼叫器。 輸入 exit 以結束 SSH 連線。
使用 SSH 以使用者身azureuser
分連線至 mspVM2
。 使用下列指令取得 VM 的公用 IP 位址:
az vm show \
--resource-group abc1110rg \
--name mspVM2 \
--show-details \
--query publicIps
在上 mspVM2
重複上述步驟,然後輸入 exit以結束 SSH 連線。
線上到 adminVM
兩個主機控制器之後,您應該可以看到叢集拓撲,如下列螢幕快照所示:
使用 Azure 應用程式閘道 公開 Red Hat JBoss EAP 叢集
既然您已在 Azure 虛擬機上建立 Red Hat JBoss EAP 叢集,本節將逐步引導您完成使用 Azure 應用程式閘道 將 Red Hat JBoss EAP 公開至因特網的程式。
建立 Azure 應用程式閘道
若要將 Red Hat JBoss EAP 公開至因特網,則需要公用 IP 位址。 建立公用IP位址,然後將Azure 應用程式閘道與其產生關聯。 使用 az network public-ip create 建立它,如下列範例所示:
az network public-ip create \
--resource-group abc1110rg \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
接下來,將後端伺服器新增至 應用程式閘道 後端集區。 使用下列命令查詢後端IP位址。 您只將主機控制器(工作節點)設定為後端伺服器。
export MSPVM1_NIC_ID=$(az vm show \
--resource-group abc1110rg \
--name mspVM1 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM1_IP=$(az network nic show \
--ids ${MSPVM1_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM2_NIC_ID=$(az vm show \
--resource-group abc1110rg \
--name mspVM2 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM2_IP=$(az network nic show \
--ids ${MSPVM2_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
接下來,建立 Azure 應用程式閘道。 下列範例會在預設後端集區中建立具有主機控制器的應用程式閘道:
az network application-gateway create \
--resource-group abc1110rg \
--name myAppGateway \
--public-ip-address myAGPublicIPAddress \
--location eastus \
--capacity 2 \
--http-settings-port 8080 \
--http-settings-protocol Http \
--frontend-port 80 \
--sku Standard_V2 \
--subnet jbossVMGatewaySubnet \
--vnet-name myVNet \
--priority 1001 \
--servers ${MSPVM1_IP} ${MSPVM2_IP}
注意
此範例會設定使用 HTTP 對 Red Hat JBoss EAP 伺服器的簡單存取。 如果您想要安全存取,請依照使用 應用程式閘道 的端對端 TLS 中的指示來設定 TLS/SSL 終止。
此範例會在埠 8080 公開主機控制器。 您可以在後續步驟中,使用資料庫連線至叢集部署範例應用程式。
連線 適用於 PostgreSQL 的 Azure 資料庫
本節說明如何在 Azure 上建立 PostgreSQL 實例,並在您的 Red Hat JBoss EAP 叢集上設定 PostgreSQL 的連線。
建立 適用於 PostgreSQL 的 Azure 資料庫 實例
使用下列步驟來建立資料庫實例:
使用 az postgres server create 在 Azure 上布建 PostgreSQL 實例,如下列範例所示:
export DATA_BASE_USER=jboss export DATA_BASE_PASSWORD=Secret123456 DB_SERVER_NAME="jbossdb$(date +%s)" echo "DB_SERVER_NAME=${DB_SERVER_NAME}" az postgres server create \ --resource-group abc1110rg \ --name ${DB_SERVER_NAME} \ --location eastus \ --admin-user ${DATA_BASE_USER} \ --ssl-enforcement Enabled \ --admin-password ${DATA_BASE_PASSWORD} \ --sku-name GP_Gen5_2
使用下列命令來允許從 Azure 服務存取:
# Save aside the following names for later use export fullyQualifiedDomainName=$(az postgres server show \ --resource-group abc1110rg \ --name ${DB_SERVER_NAME} \ --query "fullyQualifiedDomainName" \ --output tsv) export name=$(az postgres server show \ --resource-group abc1110rg \ --name ${DB_SERVER_NAME} \ --query "name" \ --output tsv) az postgres server firewall-rule create \ --resource-group abc1110rg \ --server ${DB_SERVER_NAME} \ --name "AllowAllAzureIps" \ --start-ip-address 0.0.0.0 \ --end-ip-address 0.0.0.0
使用下列命令來建立資料庫:
az postgres db create \ --resource-group abc1110rg \ --server ${DB_SERVER_NAME} \ --name testdb
安裝驅動程式
使用下列步驟,透過 JBoss 管理 CLI 安裝 JDBC 驅動程式。 如需 Red Hat JBoss EAP 上 JDBC 驅動程式的詳細資訊,請參閱 將 JDBC 驅動程式安裝為 JAR 部署。
使用下列命令透過 SSH 連線至
adminVM
。 如果您已開啟連線,則可以略過此步驟。ssh azureuser@$ADMIN_VM_PUBLIC_IP
使用下列命令下載 JDBC 驅動程式。 在這裡,您會使用 postgresql-42.5.2.jar。 如需 JDBC 驅動程式下載位置的詳細資訊,請參閱 Red Hat 提供的 JDBC 驅動程式下載位置 。
jdbcDriverName=postgresql-42.5.2.jar sudo curl --retry 5 -Lo /tmp/${jdbcDriverName} https://jdbc.postgresql.org/download/${jdbcDriverName}
使用下列 JBoss CLI 命令部署 JDBC 驅動程式:
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \ "deploy /tmp/${jdbcDriverName} --server-groups=main-server-group"
伺服器記錄位於和
mspVM2
上mspVM1
/var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log
。 如果部署失敗,請檢查此記錄檔並解決問題,然後再繼續。
設定 Red Hat JBoss EAP 叢集的資料庫連線
您已啟動資料庫伺服器、取得必要的資源識別碼,並安裝 JDBC 驅動程式。 接下來,本節中的步驟會示範如何使用 JBoss CLI 來設定與先前建立之 PostgreSQL 實例的數據源聯機。
使用下列命令開啟終端機與 SSH 至
adminVM
:ssh azureuser@$ADMIN_VM_PUBLIC_IP
使用下列指令建立資料來源:
# Replace the following values with your own export DATA_SOURCE_CONNECTION_STRING=jdbc:postgresql://<database-fully-qualified-domain-name>:5432/testdb export DATA_BASE_USER=jboss@<database-server-name> export JDBC_DATA_SOURCE_NAME=dataSource-postgresql export JDBC_JNDI_NAME=java:jboss/datasources/JavaEECafeDB export DATA_BASE_PASSWORD=Secret123456 export JDBC_DRIVER_NAME=postgresql-42.5.2.jar sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \ "data-source add --driver-name=${JDBC_DRIVER_NAME} --profile=ha --name=${JDBC_DATA_SOURCE_NAME} --jndi-name=${JDBC_JNDI_NAME} --connection-url=${DATA_SOURCE_CONNECTION_STRING} --user-name=${DATA_BASE_USER} --password=${DATA_BASE_PASSWORD}"
在這些步驟之後,您已成功設定名為 java:jboss/datasources/JavaEECafeDB
的數據源。
部署 Java EE Cafe 範例應用程式
使用下列步驟將 Java EE Cafe 範例應用程式部署至 Red Hat JBoss EAP 叢集:
使用下列步驟來建置 Java EE Cafe。 這些步驟假設您已安裝 Git 和 Maven 的本機環境:
使用下列命令從 GitHub 複製原始碼:
git clone https://github.com/Azure/rhel-jboss-templates.git
使用下列命令來建置原始碼:
mvn clean install --file rhel-jboss-templates/eap-coffee-app/pom.xml
此命令會建立 eap-coffee-app/target/javaee-café.war 檔案。 您會在下一個步驟中上傳此檔案。
開啟網頁瀏覽器,然後移至的
http://<adminVM-public-IP>:9990
管理主控台,然後使用使用者jbossadmin
名稱和密碼Secret123456
登入。使用下列步驟將javaee-café.war 上傳至內容存放庫:
使用下列步驟將應用程式部署至
main-server-group
:
測試 Red Hat JBoss EAP 叢集設定
您現在已完成設定 Red Hat JBoss EAP 叢集,並將 Java EE 應用程式部署至該叢集。 使用下列步驟來存取應用程式,以驗證所有設定:
使用下列命令來取得 Azure 應用程式閘道 的公用 IP 位址:
az network public-ip show \ --resource-group abc1110rg \ --name myAGPublicIPAddress \ --query '[ipAddress]' \ --output tsv
開啟網頁瀏覽器。
流覽至具有URL
http://<gateway-public-ip-address>/javaee-cafe/
的應用程式。 別忘了尾端斜線。請嘗試新增和移除咖啡。
清除資源
若要避免 Azure 費用,您應該清除不必要的資源。 當您不再需要部署在 Azure VM 上的 Red Hat JBoss EAP 叢集時,請取消註冊 Red Hat JBoss EAP 伺服器,並移除 Azure 資源。
使用下列命令,從 Red Hat 訂用帳戶管理取消註冊 Red Hat JBoss EAP 伺服器和 VM:
# Unregister domain controller
az vm run-command invoke \
--resource-group abc1110rg \
--name adminVM \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
# Unregister host controllers
az vm run-command invoke \
--resource-group abc1110rg \
--name mspVM1 \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
az vm run-command invoke \
--resource-group abc1110rg \
--name mspVM2 \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
使用下列命令來移除資源群組 abc1110rg
:
az group delete --name abc1110rg --yes --no-wait
下一步
繼續探索在 Azure 上執行 Red Hat JBoss EAP 的選項。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應