教程:在 Azure 虚拟机上手动安装 Red Hat JBoss EAP
本教程演示了在 Red Hat Enterprise Linux (RHEL)上安装 Red Hat JBoss EAP 并在 Azure 虚拟机(VM)上以域模式配置群集的步骤。
本教程介绍如何执行以下任务:
- 创建自定义虚拟网络并在网络中创建 VM。
- 使用手动命令行在 VM 上安装所需的 JDK 和 Red Hat JBoss EAP。
- 使用命令行接口(CLI)在域模式下配置 Red Hat JBoss EAP 群集。
- 在群集中配置 PostgreSQL 数据源连接。
- 在群集中部署并运行示例 Java 企业版应用程序。
- 通过Azure 应用程序网关向公共 Internet 公开应用程序。
- 验证成功配置。
如果你更喜欢代表 GNU/Linux VM 执行所有这些步骤的完全自动化解决方案,请直接从Azure 门户参阅快速入门:使用 Azure 门户 在 Azure 虚拟机上部署 JBoss EAP 服务器。
注意
本文包含对术语“从属”的引用,这是 Microsoft 不再使用的术语。 在从软件中删除该术语后,我们会将其从本文中删除。
先决条件
安装 Azure CLI 2.51.0 或更高版本 以运行 Azure CLI 命令。
- 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
- 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
确保拥有必要的 Red Hat 许可证。 需要拥有 Red Hat 订阅管理(RHSM)的 Red Hat 帐户(RHSM)权利才能获得 Red Hat JBoss EAP。 此权利使完全自动化的解决方案提及之前(使用 Azure 门户 在 Azure 虚拟机上部署 JBoss EAP 服务器)以安装经过测试和认证的 JBoss EAP 版本。
注意
如果你没有 EAP 权利,可以通过适用于个人的 Red Hat 开发人员订阅注册免费的开发人员订阅。 将帐户详细信息保存为下一部分中的 RHSM 用户名 和 RHSM 密码 。
如果已注册或完成注册后,可以使用以下步骤找到所需的凭据(池 ID)。 后续步骤中,这些 池 ID 还用作 具有 EAP 权利 的 RHSM 池 ID。
登录到你的 Red Hat 帐户。
首次登录时,系统会提示你完成个人资料。 根据使用情况,选择 “个人 ”或 “公司 帐户 类型”,如以下屏幕截图所示:
打开 个人 Red Hat 开发人员订阅。 此链接可访问你的帐户中相应 SKU 的所有订阅。
在“所有已购买的订阅”表下的控件行中,选择“活动”。 这可确保仅显示活动订阅。
选择结束日期的可排序列标题,直到将来最远的值显示为第一行。
选择第一行。 然后,从池 ID 复制并保存以下主池的值。
Java JDK 版本 11。 在本指南中,建议 使用 OpenJDK 的 Red Hat 内部版本。 确保在运行命令的 shell 中正确设置
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 群集组成的资源必须使用虚拟网络相互通信,以及公共 Internet。 有关规划虚拟网络的完整指南,请参阅 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 的市场映像是 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,在它上安装所有必需的工具,获取其快照,然后基于快照创建副本 (replica)。
运行 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
使用以下步骤进行安装:
使用以下命令获取公共 IP:
adminVM
export ADMIN_VM_PUBLIC_IP=$(az vm show \ --resource-group abc1110rg \ --name adminVM \ --show-details \ --query publicIps | tr -d '"')
使用以下命令打开终端并 SSH 连接到
adminVM
该终端:ssh azureuser@$ADMIN_VM_PUBLIC_IP
以密码的形式提供
Secret123456
。使用以下命令为端口配置防火墙:
sudo firewall-cmd --zone=public --add-port={9999/tcp,8443/tcp,8009/tcp,8080/tcp,9990/tcp,9993/tcp,45700/tcp,7600/tcp} --permanent sudo firewall-cmd --reload sudo iptables-save
前两个命令后应会看到该单词
success
。 第三个命令后,应会看到类似于以下示例的输出:# Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *filter :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *security :INPUT ACCEPT [19:3506] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [5:492] -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m owner --uid-owner 0 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m conntrack --ctstate INVALID,NEW -j DROP COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *raw :PREROUTING ACCEPT [20:3546] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *mangle :PREROUTING ACCEPT [20:3546] :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] :POSTROUTING ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *nat :PREROUTING ACCEPT [1:40] :INPUT ACCEPT [0:0] :POSTROUTING ACCEPT [4:240] :OUTPUT ACCEPT [4:240] COMMIT # Completed on Wed Mar 29 22:39:23 2023
使用以下命令将管理员主机注册到 Red Hat 订阅管理(RHSM)帐户:
export RHSM_USER=<your-rhsm-username> export RHSM_PASSWORD="<your-rhsm-password>" export EAP_POOL=<your-rhsm-pool-ID> sudo subscription-manager register --username ${RHSM_USER} --password ${RHSM_PASSWORD} --force
应会看到与如下示例类似的输出:
Registering to: subscription.rhsm.redhat.com:443/subscription The system has been registered with ID: redacted The registered system name is: adminVM
使用以下命令将管理员主机附加到 Red Hat JBoss EAP 池:
sudo subscription-manager attach --pool=${EAP_POOL}
注意
如果使用 简单内容访问 模式,将忽略此命令。
使用以下命令安装 OpenJDK 11:
sudo yum install java-11-openjdk -y
应会看到许多输出行,以结尾
Complete!
使用以下命令安装 Red Hat JBoss EAP 7.4:
sudo subscription-manager repos --enable=jb-eap-7.4-for-rhel-8-x86_64-rpms sudo yum update -y --disablerepo='*' --enablerepo='*microsoft*' sudo yum groupinstall -y jboss-eap7
对于第二个和第三个命令,应会看到许多输出行,以结尾
Complete!
使用以下命令设置权限和 TCP 配置:
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config echo 'AllowTcpForwarding no' | sudo tee -a /etc/ssh/sshd_config sudo systemctl restart sshd
使用以下命令配置环境变量:
echo 'export EAP_RPM_CONF_DOMAIN="/etc/opt/rh/eap7/wildfly/eap7-domain.conf"' >> ~/.bash_profile echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' >> ~/.bash_profile source ~/.bash_profile sudo touch /etc/profile.d/eap_env.sh echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' | sudo tee -a /etc/profile.d/eap_env.sh
通过键入退出来退出 SSH 连接。
为托管服务器创建计算机
已安装 OpenJDK 11 和 Red Hat JBoss EAP 7.4 adminVM
,该版本作为域控制器服务器运行。 你仍然需要准备计算机来运行两台主机控制器服务器。 接下来,创建一个快照adminVM
,并为两个托管的分机准备计算机,mspVM1
以及mspVM2
。
本部分介绍使用 快照 adminVM
准备计算机的方法。 返回到已登录 Azure CLI 的终端,然后使用以下步骤:
使用以下命令停止
adminVM
:az vm stop --resource-group abc1110rg --name adminVM
使用 az 快照 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
mspVM1
已安装 OpenJDK 11 和 Red Hat JBoss EAP 7.4。 由于 VM 是从 OS 磁盘的快照adminVM
创建的,因此这两个 VM 具有相同的主机名。 使用 az vm run-command 调用 将主机名更改为值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 群集。
配置托管域和群集
配置启用了会话副本 (replica)的群集。 有关详细信息,请参阅 会话复制。
若要启用会话副本 (replica),请使用群集的 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
该用户。 回想一下,以前捕获到环境变量中的ADMIN_VM_PUBLIC_IP
公共 IP 地址adminVM
。
ssh azureuser@$ADMIN_VM_PUBLIC_IP
首先,使用以下命令使用协议配置 HA 配置文件和 JGroups AZURE_PING
:
export HOST_VM_IP=$(hostname -I)
export STORAGE_ACCOUNT_NAME=azurepingstgabc1110rg
export CONTAINER_NAME=azurepingcontainerabc1110rg
export STORAGE_ACCESS_KEY=<the-value-from-before-you-connected-with-SSH>
#-Configure the HA profile and JGroups using AZURE_PING protocol
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
'embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-master.xml',\
':write-attribute(name=name,value=domain1)',\
'/profile=ha/subsystem=jgroups/stack=tcp:remove',\
'/profile=ha/subsystem=jgroups/stack=tcp:add()',\
'/profile=ha/subsystem=jgroups/stack=tcp/transport=TCP:add(socket-binding=jgroups-tcp,properties={ip_mcast=false})',\
"/profile=ha/subsystem=jgroups/stack=tcp/protocol=azure.AZURE_PING:add(properties={storage_account_name=\"${STORAGE_ACCOUNT_NAME}\", storage_access_key=\"${STORAGE_ACCESS_KEY}\", container=\"${CONTAINER_NAME}\"})",\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MERGE3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_ALL:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=VERIFY_SUSPECT:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.NAKACK2:add(properties={use_mcast_xmit=false,use_mcast_xmit_req=false})',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=UNICAST3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.STABLE:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.GMS:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MFC:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FRAG3:add',\
'/profile=ha/subsystem=jgroups/channel=ee:write-attribute(name="stack", value="tcp")',\
'/server-group=main-server-group:write-attribute(name="profile", value="ha")',\
'/server-group=main-server-group:write-attribute(name="socket-binding-group", value="ha-sockets")',\
"/host=master/subsystem=elytron/http-authentication-factory=management-http-authentication:write-attribute(name=mechanism-configurations,value=[{mechanism-name=DIGEST,mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])",\
"/host=master/interface=unsecure:add(inet-address=${HOST_VM_IP})",\
"/host=master/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=master/interface=public:add(inet-address=${HOST_VM_IP})"
# Save a copy of the domain.xml, later you need to share it with all host controllers
cp $EAP_HOME/wildfly/domain/configuration/domain.xml /tmp/domain.xml
输出的最后一个部分应类似于以下示例。 如果没有,请在继续操作之前进行故障排除并解决问题。
[domain@embedded /] /host=master/interface=public:add(inet-address=192.168.0.4 )
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined,
"response-headers" => {"process-state" => "reload-required"}
}
02:05:55,019 INFO [org.jboss.as] (MSC service thread 1-1) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 28ms
然后,使用以下命令配置 JBoss 服务器并设置 EAP 服务:
# Configure the JBoss server and setup EAP service
echo 'WILDFLY_HOST_CONFIG=host-master.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN
# Configure JBoss EAP management user
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
sudo $EAP_HOME/wildfly/bin/add-user.sh -u $JBOSS_EAP_USER -p $JBOSS_EAP_PASSWORD -g 'guest,mgmtgroup'
输出应类似于以下示例:
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-users.properties'
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-users.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-groups.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-groups.properties'
最后,使用以下命令启动 EAP 服务:
# Start the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service
# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service
# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service
# Check the status of EAP service
systemctl status eap7-domain.service
输出应类似于以下示例:
● eap7-domain.service - JBoss EAP (domain mode)
Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
Active: active (running) since Thu 2023-03-30 02:11:44 UTC; 5s ago
Main PID: 3855 (scl)
Tasks: 82 (limit: 20612)
Memory: 232.4M
CGroup: /system.slice/eap7-domain.service
├─3855 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
├─3856 /bin/bash /var/tmp/sclfYu7yW
├─3858 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
├─3862 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
├─3955 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
└─3967 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>
Mar 30 02:11:44 adminVM systemd[1]: Started JBoss EAP (domain mode).
键入 q 退出寻呼程序。 通过键入退出来退出 SSH 连接。
启动 Red Hat JBoss EAP 服务后,可以通过 Web 浏览器中访问管理控制台http://$ADMIN_VM_PUBLIC_IP:9990
。 使用配置的用户名和密码jbossadmin
Secret123456
登录。
选择“运行时”选项卡。在导航窗格中,选择“拓扑”。 此时,群集应仅包含一个域控制器:
配置主机控制器(工作器节点)
使用 SSH 作为用户进行mspVM1
azureuser
连接。 使用以下命令获取 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 退出寻呼程序。 通过键入退出来退出 SSH 连接。
使用 SSH 作为用户进行mspVM2
azureuser
连接。 使用以下命令获取 VM 的公共 IP 地址:
az vm show \
--resource-group abc1110rg \
--name mspVM2 \
--show-details \
--query publicIps
重复上述步骤 mspVM2
,然后通过键入 退出退出退出来退出 SSH 连接。
连接到 adminVM
两个主机控制器后,应能够看到群集拓扑,如以下屏幕截图所示:
使用 Azure 应用程序网关 公开 Red Hat JBoss EAP 群集
在 Azure 虚拟机上创建了 Red Hat JBoss EAP 群集后,本部分将引导你完成使用 Azure 应用程序网关 向 Internet 公开 Red Hat JBoss EAP 的过程。
创建 Azure 应用程序网关
若要向 Internet 公开 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 上的主机控制器。 在后续步骤中,你将使用数据库连接到群集部署示例应用程序。
连接 Azure Database for PostgreSQL
本部分介绍如何在 Azure 上创建 PostgreSQL 实例,以及如何在 Red Hat JBoss EAP 群集上配置与 PostgreSQL 的连接。
创建 Azure Database for PostgreSQL 实例
使用以下步骤创建数据库实例:
使用 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"
服务器日志位于和
mspVM1
mspVM2
位置/var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log
。 如果部署失败,请检查此日志文件并解决问题,然后再继续。
配置 Red Hat JBoss EAP 群集的数据库连接
你已启动数据库服务器,获取了所需的资源 ID,并安装了 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 企业版 Cafe 示例应用程序
使用以下步骤将 Java 企业版 Cafe 示例应用程序部署到 Red Hat JBoss EAP 群集:
使用以下步骤生成 Java 企业版 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。 在下一步中上传此文件。
打开 Web 浏览器,转到管理控制台,
http://<adminVM-public-IP>:9990
然后使用用户名和密码jbossadmin
Secret123456
登录。使用以下步骤将 javaee-café.war 上传到 内容存储库:
使用以下步骤将应用程序部署到
main-server-group
:
测试 Red Hat JBoss EAP 群集配置
现已完成 Red Hat JBoss EAP 群集的配置,并将 Java 企业版 应用程序部署到该群集。 使用以下步骤访问应用程序以验证所有设置:
使用以下命令获取Azure 应用程序网关的公共 IP 地址:
az network public-ip show \ --resource-group abc1110rg \ --name myAGPublicIPAddress \ --query '[ipAddress]' \ --output tsv
打开 Web 浏览器。
使用 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 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈