자습서: 수동으로 Azure VM(Virtual Machines)에 JBoss EAP 설치
이 자습서에서는 Red Hat JBoss EAP(Enterprise Application Platform)를 설치하고 RHEL(Red Hat Enterprise Linux)의 Azure VM(Virtual Machines)에서 도메인 모드로 클러스터를 구성하는 단계를 보여 줍니다.
이 자습서에서는 다음 작업을 수행하는 방법을 알아봅니다.
- 사용자 지정 가상 네트워크를 만들고 네트워크 내에서 VM을 만듭니다.
- 명령줄을 수동으로 사용하여 VM에 원하는 JDK 및 Red Hat JBoss EAP를 설치합니다.
- CLI(명령줄 인터페이스)를 사용하여 도메인 모드에서 Red Hat JBoss EAP 클러스터를 구성합니다.
- 클러스터에서 PostgreSQL 데이터 원본 연결을 구성합니다.
- 클러스터에서 샘플 Java EE 애플리케이션을 배포하고 실행합니다.
- Azure 애플리케이션 Gateway를 통해 공용 인터넷에 애플리케이션을 노출합니다.
- 성공적인 구성의 유효성을 검사합니다.
Azure Portal에서 직접 GNU/Linux VM을 대신하여 이러한 모든 단계를 수행하는 완전히 자동화된 솔루션을 선호하는 경우 빠른 시작: Azure VM(Virtual Machines)에 JBoss EAP 클러스터 배포를 참조하세요.
피드백을 제공하거나 Azure 솔루션에서 JBoss EAP를 개발하는 엔지니어링 팀과 함께 마이그레이션 시나리오에 대해 긴밀히 작업하려는 경우 JBoss EAP 마이그레이션에 대한 이 간단한 설문 조사를 작성하고 연락처 정보를 포함하세요. 프로그램 관리자, 설계자 및 엔지니어 팀이 즉시 연락을 취하여 긴밀한 공동 작업을 시작합니다.
참고 항목
이 문서에는 Microsoft에서 더 이상 사용하지 않는 용어인 슬레이브라는 용어에 대한 참조가 포함되어 있습니다. 소프트웨어에서 용어가 제거되면 이 문서에서 해당 용어가 제거됩니다.
필수 구성 요소
Azure CLI 버전 2.51.0 이상을 설치하여 Azure CLI 명령을 실행합니다.
- 메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
- az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
필요한 Red Hat 라이선스가 있는지 확인합니다. Red Hat JBoss EAP에 대한 RHSM(Red Hat 구독 관리) 자격이 있는 Red Hat 계정이 있어야 합니다. 이 자격을 통해 완전 자동화된 솔루션( 빠른 시작: Azure VM(Virtual Machines)에 JBoss EAP 클러스터 배포)이 테스트되고 인증된 JBoss EAP 버전을 설치할 수 있습니다.
참고 항목
EAP 자격이 없는 경우 Red Hat 개인 개발자 구독을 통해 무료 개발자 구독에 등록할 수 있습니다. 다음 섹션에서 RHSM 사용자 이름 및 RHSM 암호로 사용되는 계정 세부 정보를 따로 저장합니다.
이미 등록되었거나 등록을 완료한 후 다음 단계를 사용하여 필요한 자격 증명(풀 ID)을 찾을 수 있습니다. 이러한 풀 ID는 후속 단계에서 EAP 자격이 있는 RHSM 풀 ID로도 사용됩니다.
Red Hat 계정에 로그인합니다.
처음 로그인하면 프로필을 완료하라는 메시지가 표시됩니다. 사용량에 따라 다음 스크린샷과 같이 계정 유형에 대한 개인 또는 회사 중 하나를 선택합니다.
Red Hat Developer Subscription for Individuals를 엽니다. 이 링크를 통해 적절한 SKU에 대한 계정의 모든 구독으로 이동합니다.
구매한 모든 구독 테이블 아래의 컨트롤 행에서 활성을 선택합니다.
나중에 가장 먼 값이 첫 번째 행으로 표시될 때까지 종료 날짜에 대해 정렬 가능한 열 머리글을 선택합니다.
첫 번째 행을 선택합니다. 그런 다음 풀 ID에서 마스터 풀 다음 값을 복사하여 저장합니다.
JDK(Java Development Kit) 버전 11. 이 가이드에서는 OpenJDK의 Red Hat 빌드를 권장합니다. 명령을 실행하는 셸에서
JAVA_HOME
환경 변수가 올바르게 설정되었는지 확인합니다.Git; 작동 여부를
git
테스트하는 데 사용합니다git --version
. 이 자습서는 버전 2.25.1로 테스트되었습니다.Maven; 작동 여부를
mvn
테스트하는 데 사용합니다mvn -version
. 이 자습서는 버전 3.6.3에서 테스트되었습니다.
환경 준비
이 섹션에서는 JDK, Red Hat JBoss EAP 및 PostgreSQL JDBC(Java Database Connectivity) 드라이버를 설치하는 인프라를 설정합니다.
가정
이 자습서에서는 관리 서버와 총 3개의 VM에 두 개의 관리 서버가 있는 도메인 모드에서 Red Hat JBoss EAP 클러스터를 구성합니다. 클러스터를 구성하려면 다음 세 개의 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
형식을 사용해서 이니셜과 오늘 날짜를 차례로 사용하는 것입니다. 이 예제에서는 위치에 명명된 $RESOURCE_GROUP_NAME
westus
리소스 그룹을 만듭니다.
export SUBSCRIPTION=$(az account show --query id --output tsv)
export SUFFIX=$(date +%s)
export RESOURCE_GROUP_NAME=rg-$SUFFIX
echo "Resource group name: $RESOURCE_GROUP_NAME"
az group create \
--name $RESOURCE_GROUP_NAME \
--location westus
가상 네트워크 만들기
Red Hat JBoss EAP 클러스터를 구성하는 리소스는 가상 네트워크를 사용하여 서로 및 공용 인터넷과 통신해야 합니다. 가상 네트워크 계획에 대한 전체 가이드는 Azure 가이드 가상 네트워크 계획 클라우드 채택 프레임워크 참조하세요. 자세한 내용은 Azure Virtual Network 질문과 대답을 참조 하세요.
이 섹션의 예제에서는 주소 공간이 192.168.0.0/16
있는 가상 네트워크를 만들고 VM에 사용되는 서브넷을 만듭니다.
먼저 az network vnet create를 사용하여 가상 네트워크를 만듭니다. 다음 예제에서는 다음과 같은 네트워크를 myVNet
만듭니다.
az network vnet create \
--resource-group $RESOURCE_GROUP_NAME \
--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 $RESOURCE_GROUP_NAME \
--name mySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.0/25
az network vnet subnet create를 사용하여 Application Gateway용 서브넷을 만듭니다. 다음 예제는 jbossVMGatewaySubnet
이라는 서브넷을 만듭니다.
az network vnet subnet create \
--resource-group $RESOURCE_GROUP_NAME \
--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 $RESOURCE_GROUP_NAME \
--name mynsg
az network nsg rule create를 사용하여 네트워크 보안 그룹 규칙을 만듭니다. 다음 예제에서는 명명 ALLOW_APPGW
된 네트워크 보안 그룹 규칙을 만듭니다.ALLOW_HTTP_ACCESS
이러한 규칙을 통해 App Gateway는 Red Hat JBoss EAP에서 사용하는 HTTP 포트에서 인바운드 트래픽을 허용합니다.
az network nsg rule create \
--resource-group $RESOURCE_GROUP_NAME \
--nsg-name mynsg \
--name ALLOW_APPGW \
--protocol Tcp \
--destination-port-ranges 65200-65535 \
--source-address-prefix GatewayManager \
--destination-address-prefix '*' \
--access Allow \
--priority 500 \
--direction Inbound
az network nsg rule create \
--resource-group $RESOURCE_GROUP_NAME \
--nsg-name mynsg \
--name ALLOW_HTTP_ACCESS \
--protocol Tcp \
--destination-port-ranges 22 80 443 9990 8080 \
--source-address-prefix Internet \
--destination-address-prefix '*' \
--access Allow \
--priority 510 \
--direction Inbound
다음 예제와 같이 az network vnet subnet update를 사용하여 이전에 만든 서브넷을 이 네트워크 보안 그룹에 연결합니다.
az network vnet subnet update \
--resource-group $RESOURCE_GROUP_NAME \
--vnet-name myVNet \
--name mySubnet \
--network-security-group mynsg
az network vnet subnet update \
--resource-group $RESOURCE_GROUP_NAME \
--vnet-name myVNet \
--name jbossVMGatewaySubnet \
--network-security-group mynsg
관리자용 Red Hat Enterprise Linux 머신 만들기
SSH 키 생성
다음 명령을 사용하여 다음에 대한 SSH 키를 생성합니다 adminVM
.
ssh-keygen -t rsa -b 4096 -f ~/.ssh/jbosseapvm
ssh-add ~/.ssh/jbosseapvm
관리자 VM 만들기
VM을 만드는 데 사용하는 Marketplace 이미지는 다음과 같습니다 RedHat:rhel-raw:86-gen2:latest
. 다른 이미지는 Azure에서 사용할 수 있는 RHEL(Red Hat Enterprise Linux) 이미지를 참조하세요.
참고 항목
다음과 같이 az vm image list --offer RHEL --publisher RedHat --output table --all
az vm image list 명령을 사용하여 Red Hat에서 제공하는 사용 가능한 모든 Red Hat Enterprise Linux 이미지를 쿼리할 수 있습니다. 자세한 내용은 Red Hat Enterprise Linux 이미지 개요를 참조 하세요.
다른 이미지를 사용하는 경우 이 가이드에서 사용되는 인프라를 사용하도록 설정하기 위해 추가 라이브러리를 설치해야 할 수 있습니다.
기본 VM을 만들고, 필요한 모든 도구를 설치하고, 스냅샷을 만든 다음, 스냅샷을 기반으로 복제본을 만듭니다.
az vm create를 사용하여 VM을 만듭니다. 이 VM에서 관리 서버를 실행합니다.
다음 예제에서는 TLS/SSL 인증을 사용하여 Azure 관리 ID 및 Red Hat Enterprise Linux VM을 만듭니다.
az identity create \
--name "passwordless-managed-identity" \
--resource-group $RESOURCE_GROUP_NAME \
--location westus
az vm create \
--resource-group $RESOURCE_GROUP_NAME \
--name adminVM \
--image RedHat:rhel-raw:86-gen2:latest \
--assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \
--size Standard_DS1_v2 \
--admin-username azureuser \
--ssh-key-values ~/.ssh/jbosseapvm.pub \
--public-ip-sku Standard \
--nsg mynsg \
--vnet-name myVnet \
--subnet mySubnet
Red Hat JBoss EAP 설치
다음 단계를 사용하여 설치합니다.
다음 명령을 사용하여 다음의
adminVM
공용 IP를 가져옵니다.export ADMIN_VM_PUBLIC_IP=$(az vm show \ --resource-group $RESOURCE_GROUP_NAME \ --name adminVM \ --show-details \ --query publicIps | tr -d '"')
다음 명령을 사용하여 터미널 및 SSH
adminVM
를 엽니다.ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
다음 명령을 사용하여 포트에 대한 방화벽을 구성합니다.
sudo firewall-cmd --zone=public --add-port={9999/tcp,8443/tcp,8009/tcp,8080/tcp,9990/tcp,9993/tcp,45700/tcp,7600/tcp} --permanent sudo firewall-cmd --reload sudo iptables-save
처음 두 명령 뒤의 단어가
success
표시됩니다. 세 번째 명령 다음에 다음 예제와 유사한 출력이 표시됩니다.# Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *filter :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *security :INPUT ACCEPT [19:3506] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [5:492] -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m owner --uid-owner 0 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m conntrack --ctstate INVALID,NEW -j DROP COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *raw :PREROUTING ACCEPT [20:3546] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *mangle :PREROUTING ACCEPT [20:3546] :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] :POSTROUTING ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *nat :PREROUTING ACCEPT [1:40] :INPUT ACCEPT [0:0] :POSTROUTING ACCEPT [4:240] :OUTPUT ACCEPT [4:240] COMMIT # Completed on Wed Mar 29 22:39:23 2023
참고 항목
RHSM_USER
Red Hat JBoss EAP를 설치하려면 값과 RHSM_PASSWORD
값이 필요합니다. Red Hat 고객 포털에 액세스할 수 있는 권한이 제한된 서비스 계정을 사용하는 것이 좋습니다.
다음 명령을 사용하여 RHSM(Red Hat 구독 관리) 계정에 관리 호스트를 등록합니다.
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}
참고 항목
단순 콘텐츠 액세스 모드를 사용하는 경우 이 명령은 무시됩니다.
다음 명령을 사용하여 Red Hat JBoss EAP를 설치합니다.
sudo subscription-manager repos --enable=jb-eap-7.4-for-rhel-8-x86_64-rpms sudo yum update -y --disablerepo='*' --enablerepo='*microsoft*' sudo yum groupinstall -y jboss-eap7
두 번째 및 세 번째 명령의 경우 여러 줄의 출력이 표시되어야 합니다. Complete!
사용 권한 및 네트워크 구성을 설정하는 다음 명령을 사용합니다.
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 연결에서 종료합니다.
관리되는 서버용 머신 만들기
도메인 컨트롤러 서버로 실행되는 Red Hat JBoss EAP adminVM
를 설치했습니다. 두 호스트 컨트롤러 서버를 실행하기 위해 컴퓨터를 준비해야 합니다. 다음으로, 두 관리되는 세버에 대한 컴퓨터의 adminVM
스냅샷을 만들고 준비합니다mspVM2
mspVM1
.
이 섹션에서는 스냅샷 adminVM
을 사용하여 컴퓨터를 준비하는 방법을 소개합니다. Azure CLI가 로그인된 터미널로 돌아가서 다음 단계를 사용합니다.
다음 명령을 사용하여 중지
adminVM
합니다.az vm stop --resource-group $RESOURCE_GROUP_NAME --name adminVM
다음 예제와 같이 az snapshot create를 사용하여 OS 디스크의
adminVM
스냅샷을 만듭니다.export ADMIN_OS_DISK_ID=$(az vm show \ --resource-group $RESOURCE_GROUP_NAME \ --name adminVM \ --query storageProfile.osDisk.managedDisk.id \ --output tsv) az snapshot create \ --resource-group $RESOURCE_GROUP_NAME \ --name myAdminOSDiskSnapshot \ --source ${ADMIN_OS_DISK_ID}
다음 명령을 사용하여 시작
adminVM
합니다.az vm start --resource-group $RESOURCE_GROUP_NAME --name adminVM
다음 단계를 사용하여 만듭니다
mspVM1
.먼저 az disk create를 사용하여 관리 디스크를
mspVM1
만듭니다.#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}
다음으로, 다음 명령을 사용하여 OS 디스크
mspVM1_OsDisk_1
를 연결하는 VMmspVM1
을 만듭니다.#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
Red Hat JBoss EAP를 설치하여 만들었습니다
mspVM1
. VM은 OS 디스크의adminVM
스냅샷에서 만들어졌기 때문에 두 VM의 호스트 이름이 동일합니다. az vm run-command invoke를 사용하여 호스트 이름을 값mspVM1
으로 변경합니다.az vm run-command invoke \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM1 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM1"
명령이 성공적으로 완료되면 다음 예제와 유사한 출력이 표시됩니다.
{ "value": [ { "code": "ProvisioningState/succeeded", "displayStatus": "Provisioning succeeded", "level": "Info", "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n", "time": null } ] }
동일한 명령을 사용하여 다음을 만듭니
mspVM2
다.#Create a new Managed Disks for mspVM2 az disk create \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM2_OsDisk_1 \ --source ${SNAPSHOT_ID} #Get the resource Id of the managed disk export MSPVM2_DISK_ID=$(az disk show \ --name mspVM2_OsDisk_1 \ --resource-group $RESOURCE_GROUP_NAME \ --query '[id]' \ --output tsv) #Create VM by attaching existing managed disks as OS az vm create \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM2 \ --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \ --attach-os-disk ${MSPVM2_DISK_ID} \ --os-type linux \ --public-ip-sku Standard \ --nsg mynsg \ --vnet-name myVnet \ --subnet mySubnet #Set hostname az vm run-command invoke \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM2 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM2"
다음 명령을 사용하여 이후 섹션에서 사용하는 개인 IP 주소를 가져와서 표시합니다.
export ADMINVM_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name adminVM \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export ADMINVM_IP=$(az network nic show \
--ids ${ADMINVM_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM1_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name mspVM1 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM1_IP=$(az network nic show \
--ids ${MSPVM1_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM2_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name mspVM2 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM2_IP=$(az network nic show \
--ids ${MSPVM2_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
echo "Private IP of adminVM: ${ADMINVM_IP}"
echo "Private IP of mspVM1: ${MSPVM1_IP}"
echo "Private IP of mspVM2: ${MSPVM2_IP}"
이제 세 대의 컴퓨터가 모두 준비되었습니다. 다음으로, 관리되는 도메인 모드에서 Red Hat JBoss EAP 클러스터를 구성합니다.
관리되는 도메인 및 클러스터 구성
세션 복제를 사용하도록 설정된 클러스터를 구성합니다. 자세한 내용은 세션 복제를 참조 하세요.
세션 복제를 사용하도록 설정하려면 클러스터에 Red Hat JBoss EAP 고가용성을 사용합니다. Microsoft Azure는 멀티캐스트를 기반으로 하는 JGroups 검색 프로토콜을 지원하지 않습니다. 다른 JGroups 검색 프로토콜(예: 정적 구성(), 공유 데이터베이스(TCPPING
JDBC_PING
), 공유 파일 시스템 기반 ping(FILE_PING
) 또는TCPGOSSIP
)을 사용할 수 있지만 AzureAZURE_PING
용으로 개발된 공유 파일 검색 프로토콜을 사용하는 것이 좋습니다. 자세한 내용은 Microsoft Azure에서 JBoss EAP 고가용성 사용을 참조하세요.
AZURE_PING Azure Storage 계정 및 Blob 컨테이너 만들기
다음 명령을 사용하여 스토리지 계정 및 Blob 컨테이너를 만듭니다.
# Define your storage account name
export STORAGE_ACCOUNT_NAME=azurepingstgabc1111rg
# Define your Blob container name
export CONTAINER_NAME=azurepingcontainerabc1111rg
# Create storage account
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name ${STORAGE_ACCOUNT_NAME} \
--location westus \
--sku Standard_LRS \
--kind StorageV2 \
--access-tier Hot
그런 다음, 다음 명령을 사용하여 나중에 사용할 스토리지 계정 키를 검색합니다. 오류가 표시되면 몇 분 정도 기다렸다가 다시 시도하세요. 스토리지 계정을 만드는 이전 명령은 아직 수행되지 않을 수 있습니다.
export STORAGE_ACCESS_KEY=$(az storage account keys list \
--resource-group $RESOURCE_GROUP_NAME \
--account-name ${STORAGE_ACCOUNT_NAME} \
--query "[0].value" \
--output tsv)
# Create blob container
az storage container create \
--name ${CONTAINER_NAME} \
--account-name ${STORAGE_ACCOUNT_NAME} \
--account-key ${STORAGE_ACCESS_KEY}
다음과 같은 출력이 표시됩니다.
{
"created": true
}
도메인 컨트롤러 구성(관리자 노드)
이 자습서에서는 Red Hat JBoss EAP 관리 CLI 명령을 사용하여 도메인 컨트롤러를 구성합니다. 자세한 내용은 관리 CLI 가이드를 참조 하세요.
다음 단계에서는 도메인 컨트롤러 구성 adminVM
을 설정합니다. SSH를 사용하여 사용자로 연결 adminVM
합니다 azureuser
. 공용 IP 주소 adminVM
가 이전에 환경 변수에 캡처된 것을 ADMIN_VM_PUBLIC_IP
기억하세요.
ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
먼저 다음 명령을 사용하여 프로토콜을 사용하여 HA 프로필 및 JGroup을 AZURE_PING
구성합니다.
export HOST_VM_IP=$(hostname -I)
export STORAGE_ACCOUNT_NAME=azurepingstgabc1111rg
export CONTAINER_NAME=azurepingcontainerabc1111rg
export STORAGE_ACCESS_KEY=<the-value-from-before-you-connected-with-SSH>
#-Configure the HA profile and JGroups using AZURE_PING protocol
sudo -u jboss $EAP_HOME/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 서비스를 설정합니다.
참고 항목
JBOSS_EAP_USER
JBoss EAP 관리 사용자를 구성하려면 값과 JBOSS_EAP_PASSWORD
값이 필요합니다.
# Configure the JBoss server and setup EAP service
echo 'WILDFLY_HOST_CONFIG=host-master.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN
# Configure JBoss EAP management user
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
sudo $EAP_HOME/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 서비스를 시작한 후 웹 브라우저에서 관리 콘솔 http://$ADMIN_VM_PUBLIC_IP:9990
액세스할 수 있습니다. 구성된 사용자 이름 jbossadmin
및 암호를 사용하여 로그인합니다 Secret123456
.
런타임 탭을 선택합니다. 탐색 창에서 토폴로지를 선택합니다. 지금은 클러스터에 도메인 컨트롤러가 하나만 포함되어 있음을 알 수 있습니다.
호스트 컨트롤러 구성(작업자 노드)
SSH를 사용하여 사용자로 연결 mspVM1
합니다 azureuser
. 다음 명령을 사용하여 VM의 공용 IP 주소를 가져옵니다.
MSPVM_PUBLIC_IP=$(az vm show \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM1 \
--show-details \
--query publicIps | tr -d '"' )
ssh -A -i ~/.ssh/jbosseapvm azureuser@$MSPVM_PUBLIC_IP
다음 명령을 사용하여 다음에서 호스트 컨트롤러를 설정합니다.mspVM1
# environment variables
export DOMAIN_CONTROLLER_PRIVATE_IP=<adminVM-private-IP>
export HOST_VM_NAME=$(hostname)
export HOST_VM_NAME_LOWERCASE=$(echo "${HOST_VM_NAME,,}")
export HOST_VM_IP=$(hostname -I)
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
# Save default domain configuration as backup
sudo -u jboss mv $EAP_HOME/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
다음 명령을 사용하여 호스트 컨트롤러 변경 내용을 적용합니다 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 $RESOURCE_GROUP_NAME \
--name mspVM2 \
--show-details \
--query publicIps | tr -d '"'
이전 단계를 mspVM2
반복한 다음 종료를 입력하여 SSH 연결을 종료합니다.
두 호스트 컨트롤러가 연결 adminVM
되면 다음 스크린샷과 같이 클러스터 토폴로지도 볼 수 있습니다.
Azure 애플리케이션 Gateway를 사용하여 Red Hat JBoss EAP 클러스터 노출
이제 Azure VM에서 클러스터를 만들었으므로 이 섹션에서는 Azure 애플리케이션 Gateway를 사용하여 JBoss EAP를 인터넷에 노출하는 방법을 안내합니다.
Azure Application Gateway 만들기
Red Hat JBoss EAP를 인터넷에 노출하려면 공용 IP 주소가 필요합니다. 공용 IP 주소를 만든 다음 Azure 애플리케이션 게이트웨이를 연결합니다. 다음 예제와 같이 az network public-ip create를 사용하여 만듭니 다.
az network public-ip create \
--resource-group $RESOURCE_GROUP_NAME \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
다음으로 Application Gateway 백 엔드 풀에 백 엔드 서버를 추가합니다. 다음 명령을 사용하여 백 엔드 IP 주소를 쿼리합니다. 호스트 컨트롤러(작업 노드)만 백 엔드 서버로 구성됩니다.
export MSPVM1_NIC_ID=$(az vm show \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM1 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM1_IP=$(az network nic show \
--ids ${MSPVM1_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM2_NIC_ID=$(az vm show \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM2 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM2_IP=$(az network nic show \
--ids ${MSPVM2_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
다음으로, Azure 애플리케이션 게이트웨이를 만듭니다. 다음 예제에서는 기본 백 엔드 풀에 호스트 컨트롤러를 사용하여 애플리케이션 게이트웨이를 만듭니다.
az network application-gateway create \
--resource-group $RESOURCE_GROUP_NAME \
--name myAppGateway \
--public-ip-address myAGPublicIPAddress \
--location westus \
--capacity 2 \
--http-settings-port 8080 \
--http-settings-protocol Http \
--frontend-port 80 \
--sku Standard_V2 \
--subnet jbossVMGatewaySubnet \
--vnet-name myVNet \
--priority 1001 \
--servers ${MSPVM1_IP} ${MSPVM2_IP}
참고 항목
이 예제에서는 HTTP를 사용하여 Red Hat JBoss EAP 서버에 대한 간단한 액세스를 설정합니다. 보안 액세스를 원하는 경우 Application Gateway를 사용하여 엔드투엔드 TLS의 지침에 따라 TLS/SSL 종료를 구성합니다.
이 예제에서는 포트 8080에서 호스트 컨트롤러를 노출합니다. 이후 단계에서 클러스터에 데이터베이스 연결이 있는 샘플 애플리케이션을 배포합니다.
Azure Database for PostgreSQL 유연한 서버 연결
이 섹션에서는 Azure Database for PostgreSQL 유연한 서버 인스턴스를 만들고 Red Hat JBoss EAP 클러스터에서 PostgreSQL에 대한 연결을 구성하는 방법을 보여 줍니다.
Azure Database for PostgreSQL 유연한 서버 인스턴스 만들기
다음 단계를 사용하여 데이터베이스 인스턴스를 만듭니다.
다음 예제와 같이 az postgres flexible-server create 를 사용하여 Azure Database for PostgreSQL 유연한 서버 인스턴스를 프로비전합니다.
export DATA_BASE_USER=jboss DB_SERVER_NAME="jbossdb$(date +%s)" echo "DB_SERVER_NAME=${DB_SERVER_NAME}" az postgres flexible-server create \ --active-directory-auth Enabled \ --resource-group $RESOURCE_GROUP_NAME \ --name ${DB_SERVER_NAME} \ --location westus \ --version 16 \ --public-access 0.0.0.0 \ --tier Burstable \ --sku-name Standard_B1ms \ --yes objectId=$(az identity show --name passwordless-managed-identity --resource-group $RESOURCE_GROUP_NAME --query principalId -o tsv) az postgres flexible-server ad-admin create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name ${DB_SERVER_NAME} \ --display-name "passwordless-managed-identity" \ --object-id $objectId \ --type ServicePrincipal
다음 명령을 사용하여 Azure 서비스에서 액세스를 허용합니다.
# Save aside the following names for later use export fullyQualifiedDomainName=$(az postgres flexible-server show \ --resource-group $RESOURCE_GROUP_NAME \ --name ${DB_SERVER_NAME} \ --query "fullyQualifiedDomainName" \ --output tsv) export name=$(az postgres flexible-server show \ --resource-group $RESOURCE_GROUP_NAME \ --name ${DB_SERVER_NAME} \ --query "name" \ --output tsv) az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name ${DB_SERVER_NAME} \ --rule-name "AllowAllWindowsAzureIps" \ --start-ip-address "0.0.0.0" \ --end-ip-address "0.0.0.0"
다음 명령을 사용하여 데이터베이스를 만듭니다.
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name ${DB_SERVER_NAME} \ --database-name testdb
드라이버 설치
JBoss 관리 CLI를 사용하여 JDBC 드라이버를 설치하려면 다음 단계를 사용합니다.
다음 명령을 사용하여 SSH
adminVM
합니다. 이미 연결이 열려 있는 경우 이 단계를 건너뛸 수 있습니다.ssh -A -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
다음 명령을 사용하여 adminVM에서 JDBC 드라이버를 다운로드합니다.
# 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
다음 명령을 사용하여 JDBC 드라이버를 호스트 컨트롤러에 복사합니다.
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"
서버 로그는 .에
mspVM1
/var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log
있습니다mspVM2
. 배포가 실패하면 계속하기 전에 이 로그 파일을 검사하고 문제를 해결합니다.
다음 명령을 사용하여 JDBC 드라이버를 등록합니다.
# 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)"
Red Hat JBoss EAP 클러스터에 대한 데이터베이스 연결 구성
데이터베이스 서버를 시작하고 필요한 리소스 ID를 가져오고 JDBC 드라이버를 설치했습니다. 다음으로, 이 섹션의 단계에서는 JBoss CLI를 사용하여 이전에 만든 PostgreSQL 인스턴스와의 데이터 원본 연결을 구성하는 방법을 보여 줍니다.
다음 명령을 사용하여 터미널 및 SSH를
adminVM
엽니다.ssh -i ~/.ssh/jbosseapvm 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?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} "
라는 java:jboss/datasources/JavaEECafeDB
데이터 원본을 구성했습니다.
Java EE Cafe 샘플 애플리케이션 배포
다음 단계를 사용하여 Red Hat JBoss EAP 클러스터에 Java EE Cafe 샘플 애플리케이션을 배포합니다.
다음 단계를 사용하여 Java EE Cafe를 빌드합니다. 다음 단계에서는 Git 및 Maven이 설치된 로컬 환경이 있다고 가정합니다.
다음 명령을 사용하여 GitHub에서 소스 코드를 복제합니다.
git clone https://github.com/Azure/rhel-jboss-templates.git --branch 20240904 --single-branch
다음 명령을 사용하여 소스 코드를 빌드합니다.
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 클러스터 구성 테스트
JBoss EAP 클러스터를 구성하고 애플리케이션을 배포했습니다. 애플리케이션에 액세스하여 모든 설정의 유효성을 검사하려면 다음 단계를 사용합니다.
다음 명령을 사용하여 Azure 애플리케이션 게이트웨이의 공용 IP 주소를 가져옵니다.
az network public-ip show \ --resource-group $RESOURCE_GROUP_NAME \ --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 $RESOURCE_GROUP_NAME \
--name adminVM \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
# Unregister host controllers
az vm run-command invoke \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM1 \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
az vm run-command invoke \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM2 \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
다음 명령을 사용하여 리소스 그룹을 $RESOURCE_GROUP_NAME
삭제합니다.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
다음 단계
Azure에서 JBoss EAP를 실행하는 옵션을 계속 탐색합니다.