다음을 통해 공유


자습서: Azure에서 SLES 가상 머신 기반 SQL Server에 대한 가용성 그룹 구성

적용 대상:SQL Server on Azure VM

참고

이 자습서에서는 SUSE Linux Enterprise Server(SLES) v15와 함께 SQL Server 2022(16.x)를 사용하지만 고가용성을 구성하기 위해 SLES v12 또는 SLES v15와 함께 SQL Server 2019(15.x)를 사용할 수도 있습니다.

이 자습서에서는 다음 작업 방법을 알아봅니다.

  • 새 리소스 그룹, 가용성 집합 및 Linux VM(가상 머신) 만들기
  • HA(고가용성)를 사용하도록 설정
  • Pacemaker 클러스터 만들기
  • STONITH 디바이스를 만들어 펜싱 에이전트 구성
  • SLES에 SQL Server 및 mssql-tools 설치
  • SQL Server Always On 가용성 그룹 구성
  • Pacemaker 클러스터에서 AG(가용성 그룹) 리소스 구성
  • 장애 조치 및 펜싱 에이전트 테스트

이 자습서에서는 Azure CLI를 사용하여 리소스를 Azure에 배포합니다.

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

사전 요구 사항

  • 이 문서에는 Azure CLI 버전 2.0.30 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

리소스 그룹 만들기

둘 이상의 구독이 있는 경우 이러한 리소스를 배포하려는 구독을 설정합니다.

다음 명령을 사용하여 <resourceGroupName> 리소스 그룹을 지역에 만듭니다. <resourceGroupName>을 선택한 이름으로 바꿉니다. 이 자습서에서는 East US 2를 사용합니다. 자세한 내용은 이 빠른 시작을 참조하세요.

az group create --name <resourceGroupName> --location eastus2

가용성 집합 만들기

다음 단계는 가용성 집합을 만드는 것입니다. Azure Cloud Shell에서 다음 명령을 실행하고, <resourceGroupName>을 리소스 그룹 이름으로 바꿉니다. <availabilitySetName>에 대한 이름을 선택합니다.

az vm availability-set create \
    --resource-group <resourceGroupName> \
    --name <availabilitySetName> \
    --platform-fault-domain-count 2 \
    --platform-update-domain-count 2

명령이 완료되면 다음 결과를 얻습니다.

{
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/availabilitySets/<availabilitySetName>",
  "location": "eastus2",
  "name": "<availabilitySetName>",
  "platformFaultDomainCount": 2,
  "platformUpdateDomainCount": 2,
  "proximityPlacementGroup": null,
  "resourceGroup": "<resourceGroupName>",
  "sku": {
    "capacity": null,
    "name": "Aligned",
    "tier": null
  },
  "statuses": null,
  "tags": {},
  "type": "Microsoft.Compute/availabilitySets",
  "virtualMachines": []
}

가상 네트워크 및 서브넷 만들기

  1. 사전 할당된 IP 주소 범위를 사용하여 명명된 서브넷을 만듭니다. 다음 명령에서 이러한 값을 바꿉니다.

    • <resourceGroupName>
    • <vNetName>
    • <subnetName>
    az network vnet create \
        --resource-group <resourceGroupName> \
        --name <vNetName> \
        --address-prefix 10.1.0.0/16 \
        --subnet-name <subnetName> \
        --subnet-prefix 10.1.1.0/24
    

    이전 명령은 사용자 지정 IP 범위를 포함하는 VNet과 서브넷을 만듭니다.

가용성 집합 내에 SLES VM 만들기

  1. BYOS(Bring Your Own Subscription)를 사용하여 SLES v15 SP4를 제공하는 가상 머신 이미지 목록을 가져옵니다. SUSE Enterprise Linux 15 SP4 + 패치 VM(sles-15-sp4-basic)을 사용할 수도 있습니다.

    az vm image list --all --offer "sles-15-sp3-byos"
    # if you want to search the basic offers you could search using the command below
    az vm image list --all --offer "sles-15-sp3-basic"
    

    BYOS 이미지를 검색하면 다음 결과가 표시됩니다.

    [
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen1",
          "urn": "SUSE:sles-15-sp3-byos:gen1:2022.05.05",
          "version": "2022.05.05"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen1",
          "urn": "SUSE:sles-15-sp3-byos:gen1:2022.07.19",
          "version": "2022.07.19"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen1",
          "urn": "SUSE:sles-15-sp3-byos:gen1:2022.11.10",
          "version": "2022.11.10"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen2",
          "urn": "SUSE:sles-15-sp3-byos:gen2:2022.05.05",
          "version": "2022.05.05"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen2",
          "urn": "SUSE:sles-15-sp3-byos:gen2:2022.07.19",
          "version": "2022.07.19"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen2",
          "urn": "SUSE:sles-15-sp3-byos:gen2:2022.11.10",
          "version": "2022.11.10"
       }
    ]
    

    이 자습서에서는 SUSE:sles-15-sp3-byos:gen1:2022.11.10를 사용합니다.

    중요한

    가용성 그룹을 설정하려면 머신 이름이 15자 미만이어야 합니다. 사용자 이름은 대문자를 포함할 수 없으며, 암호는 12~72자여야 합니다.

  2. 가용성 집합에 3개의 VM을 만듭니다. 다음 명령에서 이러한 값을 바꿉니다.

    • <resourceGroupName>
    • <VM-basename>
    • <availabilitySetName>
    • <VM-Size> - 예를 들어 "Standard_D16s_v3"입니다.
    • <username>
    • <adminPassword>
    • <vNetName>
    • <subnetName>
    for i in `seq 1 3`; do
        az vm create \
           --resource-group <resourceGroupName> \
           --name <VM-basename>$i \
           --availability-set <availabilitySetName> \
           --size "<VM-Size>" \
           --os-disk-size-gb 128 \
           --image "SUSE:sles-15-sp3-byos:gen1:2022.11.10" \
           --admin-username "<username>" \
           --admin-password "<adminPassword>" \
           --authentication-type all \
           --generate-ssh-keys \
           --vnet-name "<vNetName>" \
           --subnet "<subnetName>" \
           --public-ip-sku Standard \
           --public-ip-address ""
        done
    

이전 명령은 이전에 정의된 VNet을 사용하여 VM을 만듭니다. 다른 구성에 대한 자세한 내용은 az vm create 문서를 참조하세요.

이 명령에는 128GB의 사용자 지정 OS 드라이브 크기를 생성하기 위한 --os-disk-size-gb 매개 변수도 포함되어 있습니다. 나중에 이 크기를 늘리려면 설치에 맞게 적절한 폴더 볼륨을 확장하고 LVM(논리 볼륨 관리자)을 구성하십시오.

각 VM에 대한 명령이 완료되면 다음과 비슷한 결과를 얻습니다.

{
  "fqdns": "",
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/sles1",
  "location": "westus",
  "macAddress": "<Some MAC address>",
  "powerState": "VM running",
  "privateIpAddress": "<IP1>",
  "resourceGroup": "<resourceGroupName>",
  "zones": ""
}

만든 VM에 대한 연결 테스트

Azure Cloud Shell에서 다음 명령을 사용하여 각 VM에 연결합니다. VM IP를 찾을 수 없는 경우 Azure Cloud Shell에서 이 빠른 시작을 수행합니다.

ssh <username>@<publicIPAddress>

연결에 성공하면 Linux 터미널을 나타내는 다음 출력이 표시됩니다.

[<username>@sles1 ~]$

exit를 입력하여 SSH 세션을 종료합니다.

SUSEConnect에 등록하고 고가용성 패키지 설치

이 자습서를 완료하려면 VM을 SUSEConnect에 등록하여 업데이트와 지원을 받아야 합니다. 그런 다음 HA를 사용하도록 설정하는 패키지 집합인 고가용성 익스텐션 모듈 또는 패턴을 설치할 수 있습니다.

문서 전체에서 동일한 명령을 각 VM에서 실행해야 하므로 각 VM(노드)에서 동시에 SSH 세션을 여는 것이 더 쉽습니다.

여러 sudo 명령을 복사하여 붙여넣을 때 암호를 입력하라는 메시지가 표시되면 추가 명령이 실행되지 않습니다. 이 경우 각 명령을 개별적으로 실행하세요.

각 VM 노드에 연결하여 다음 단계를 실행합니다.

SUSEConnect에 VM 등록

SUSEConnect에 VM 노드를 등록하려면 모든 노드에서 다음 명령에서 해당 값을 바꿉니다.

  • <subscriptionEmailAddress>
  • <registrationCode>
sudo SUSEConnect
    --url=https://scc.suse.com
    -e <subscriptionEmailAddress> \
    -r <registrationCode>

고가용성 익스텐션 설치

고가용성 익스텐션을 설치하려면 모든 노드에서 다음 명령을 실행합니다.

sudo SUSEConnect -p sle-ha/15.3/x86_64 -r <registration code for Partner Subscription for High Availability Extension>

노드 간에 암호 없는 SSH 액세스 구성

암호 없는 SSH 액세스를 사용하면 VM이 SSH 공개 키를 사용하여 서로 통신할 수 있습니다. 각 노드에서 SSH 키를 구성하고 각 노드에 해당 키를 복사해야 합니다.

새 SSH 키 생성

필요한 SSH 키 크기는 4,096비트입니다. 각 VM에서 /root/.ssh 폴더로 변경하고 다음 명령을 실행합니다.

ssh-keygen -t rsa -b 4096

이 단계에서는 기존 SSH 파일을 덮어쓰라는 메시지가 나타날 수 있습니다. 이 메시지에 동의해야 합니다. 암호를 입력할 필요가 없습니다.

공개 SSH 키 복사

각 VM에서 ssh-copy-id 명령을 사용하여, 방금 생성된 노드에서 공개 키를 복사해야 합니다. 대상 VM에서 대상 디렉터리를 지정하려면 -i 매개 변수를 사용하면 됩니다.

다음 명령에서 <username> 계정은 VM을 만들 때 각 노드에 대해 구성한 것과 동일한 계정일 수 있습니다. root 계정을 사용할 수도 있지만 프로덕션 환경에서는 권장되지 않습니다.

sudo ssh-copy-id <username>@sles1
sudo ssh-copy-id <username>@sles2
sudo ssh-copy-id <username>@sles3

각 노드에서 암호 없는 액세스 확인

SSH 공개 키가 각 노드에 복사되었는지 확인하려면 각 노드에서 ssh 명령을 사용합니다. 키를 올바르게 복사했다면 암호를 묻는 메시지가 표시되지 않으며 연결이 성공합니다.

이 예제에서는 첫 번째 VM(sles1)에서 두 번째 및 세 번째 노드에 연결합니다. 다시 한 번 <username> 계정은 VM을 만들 때 각 노드에 대해 구성한 것과 동일한 계정일 수 있습니다.

ssh <username>@sles2
ssh <username>@sles3

각 노드가 암호를 요구하지 않고 다른 노드와 통신할 수 있도록 세 노드 모두에서 이 프로세스를 반복합니다.

이름 해석 구성

DNS를 사용하거나 각 노드에서 etc/hosts 파일을 수동으로 편집하여 이름 해석을 설정할 수 있습니다.

DNS와 Active Directory에 대한 자세한 내용은 Linux 호스트의 SQL Server를 Active Directory 도메인에 조인을 참조하세요.

중요한

이전 예의 개인 IP 주소를 사용하는 것이 좋습니다. 이 구성에서 공용 IP 주소를 사용하면 설정이 실패하여 외부 네트워크에 VM이 노출됩니다.

이 예제에 사용된 VM과 해당 IP 주소는 다음과 같이 나열됩니다.

  • sles1: 10.0.0.85
  • sles2: 10.0.0.86
  • sles3: 10.0.0.87

클러스터 구성

이 자습서에서는 첫 번째 VM(sles1)은 노드 1이고, 두 번째 VM(sles2)은 노드 2이며, 세 번째 VM(sles3)은 노드 3입니다. 클러스터 설치에 대한 자세한 내용은 Azure의 SUSE Linux Enterprise Server에서 Pacemaker 설정을 참조하세요.

클러스터 설치

  1. 다음 명령을 실행하여 노드 1에 ha-cluster-bootstrap 패키지를 설치한 다음 노드를 다시 시작합니다. 이 예에서는 sles1 VM입니다.

    sudo zypper install ha-cluster-bootstrap
    

    노드가 다시 시작되면 다음 명령을 실행하여 클러스터를 배포합니다.

    sudo crm cluster init --name sqlcluster
    

    다음 예제와 비슷한 출력이 표시됩니다.

    Do you want to continue anyway (y/n)? y
      Generating SSH key for root
      The user 'hacluster' will have the login shell configuration changed to /bin/bash
    Continue (y/n)? y
      Generating SSH key for hacluster
      Configuring csync2
      Generating csync2 shared key (this may take a while)...done
      csync2 checking files...done
      Detected cloud platform: microsoft-azure
    
    Configure Corosync (unicast):
      This will configure the cluster messaging layer.  You will need
      to specify a network address over which to communicate (default
      is eth0's network, but you can use the network address of any
      active interface).
    
      Address for ring0 [10.0.0.85]
      Port for ring0 [5405]
    
    Configure SBD:
      If you have shared storage, for example a SAN or iSCSI target,
      you can use it avoid split-brain scenarios by configuring SBD.
      This requires a 1 MB partition, accessible to all nodes in the
      cluster.  The device path must be persistent and consistent
      across all nodes in the cluster, so /dev/disk/by-id/* devices
      are a good choice.  Note that all data on the partition you
      specify here will be destroyed.
    
    Do you wish to use SBD (y/n)? n
    WARNING: Not configuring SBD - STONITH will be disabled.
      Hawk cluster interface is now running. To see cluster status, open:
        https://10.0.0.85:7630/
      Log in with username 'hacluster', password 'linux'
    WARNING: You should change the hacluster password to something more secure!
      Waiting for cluster..............done
      Loading initial cluster configuration
    
    Configure Administration IP Address:
      Optionally configure an administration virtual IP
      address. The purpose of this IP address is to
      provide a single IP that can be used to interact
      with the cluster, rather than using the IP address
      of any specific cluster node.
    
    Do you wish to configure a virtual IP address (y/n)? y
      Virtual IP []10.0.0.89
      Configuring virtual IP (10.0.0.89)....done
    
    Configure Qdevice/Qnetd:
      QDevice participates in quorum decisions. With the assistance of
      a third-party arbitrator Qnetd, it provides votes so that a cluster
      is able to sustain more node failures than standard quorum rules
      allow. It is recommended for clusters with an even number of nodes
      and highly recommended for 2 node clusters.
    
    Do you want to configure QDevice (y/n)? n
    Done (log saved to /var/log/crmsh/ha-cluster-bootstrap.log)
    
  2. 다음 명령을 사용하여 노드 1의 클러스터 상태를 확인합니다.

    sudo crm status
    

    성공하면 출력에 다음 텍스트가 포함되어야 합니다.

    1 node configured
    1 resource instance configured
    
  3. 모든 노드에서 다음 명령을 사용하여 hacluster의 암호를 보다 안전한 암호로 변경합니다. root 사용자 암호도 변경해야 합니다.

    sudo passwd hacluster
    
    sudo passwd root
    
  4. 노드 2노드 3에서 다음 명령을 실행하여 crmsh 패키지를 먼저 설치합니다.

    sudo zypper install crmsh
    

    이제 명령을 실행하여 클러스터에 조인합니다.

    sudo crm cluster join
    

    다음과 같은 상호 작용이 예상됩니다.

    Join This Node to Cluster:
    You will be asked for the IP address of an existing node, from which
    configuration will be copied.  If you have not already configured
    passwordless ssh between nodes, you will be prompted for the root
    password of the existing node.
    
      IP address or hostname of existing node (e.g.: 192.168.1.1) []10.0.0.85
      Configuring SSH passwordless with root@10.0.0.85
      root@10.0.0.85's password:
      Configuring SSH passwordless with hacluster@10.0.0.85
      Configuring csync2...done
    Merging known_hosts
    WARNING: scp to sles2 failed (Exited with error code 1, Error output: The authenticity of host 'sles2 (10.1.1.5)' can't be established.
    ECDSA key fingerprint is SHA256:UI0iyfL5N6X1ZahxntrScxyiamtzsDZ9Ftmeg8rSBFI.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    lost connection
    ), known_hosts update may be incomplete
    Probing for new partitions...done
      Address for ring0 [10.0.0.86]
    
    Hawk cluster interface is now running. To see cluster status, open:
        https://10.0.0.86:7630/
      Log in with username 'hacluster', password 'linux'
    WARNING: You should change the hacluster password to something more secure!
    Waiting for cluster.....done
    Reloading cluster configuration...done
      Done (log saved to /var/log/crmsh/ha-cluster-bootstrap.log)
    
  5. 모든 컴퓨터를 클러스터에 조인한 후에는 리소스를 검사하여 모든 VM이 온라인 상태인지 확인합니다.

    sudo crm status
    

    다음과 같은 출력이 표시됩니다.

    Stack: corosync
     Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
     Last updated: Mon Mar  6 18:01:17 2023
     Last change:  Mon Mar  6 17:10:09 2023 by root via cibadmin on sles1
    
    3 nodes configured
    1 resource instance configured
    
    Online: [ sles1 sles2 sles3 ]
    
    Full list of resources:
    
     admin-ip       (ocf::heartbeat:IPaddr2):       Started sles1
    
  6. 클러스터 리소스 구성 요소를 설치합니다. 모든 노드에서 다음 명령을 실행합니다.

    sudo zypper in socat
    
  7. azure-lb 구성 요소를 설치합니다. 모든 노드에서 다음 명령을 실행합니다.

    sudo zypper in resource-agents
    
  8. 운영 체제 구성. 모든 노드에서 다음 단계를 수행합니다.

    1. 구성 파일을 편집합니다.

      sudo vi /etc/systemd/system.conf
      
    2. DefaultTasksMax 값을 4096로 변경합니다.

      #DefaultTasksMax=512
      DefaultTasksMax=4096
      
    3. 저장하고 vi 편집기를 종료합니다.

    4. 이 설정을 활성화하려면 다음 명령을 실행합니다.

      sudo systemctl daemon-reload
      
    5. 변경이 성공했는지 테스트합니다.

      sudo systemctl --no-pager show | grep DefaultTasksMax
      
  9. 더티 캐시의 크기를 줄입니다. 모든 노드에서 다음 단계를 수행합니다.

    1. 시스템 제어 구성 파일을 편집합니다.

      sudo vi /etc/sysctl.conf
      
    2. 파일에 다음 두 줄을 추가합니다.

      vm.dirty_bytes = 629145600
      vm.dirty_background_bytes = 314572800
      
    3. 저장하고 vi 편집기를 종료합니다.

  10. 다음 명령을 사용하여 모든 노드에 Azure Python SDK를 설치합니다.

    sudo zypper install fence-agents
    # Install the Azure Python SDK on SLES 15 or later:
    # You might need to activate the public cloud extension first. In this example, the SUSEConnect command is for SLES 15 SP1
    SUSEConnect -p sle-module-public-cloud/15.1/x86_64
    sudo zypper install python3-azure-mgmt-compute
    sudo zypper install python3-azure-identity
    

펜싱 에이전트 설정

STONITH 디바이스는 펜싱 에이전트를 제공합니다. 아래 지침은 이 자습서에서 수정되었습니다. 자세한 내용은 Azure 펜스 에이전트 STONITH 디바이스 만들기를 참조하세요.

Azure 펜스 에이전트의 버전을 확인하여 업데이트되었는지 확인합니다. 다음 명령을 사용합니다.

sudo zypper info resource-agents

아래 예제와 비슷한 출력이 표시됩니다.

Information for package resource-agents:
----------------------------------------
Repository     : SLE-Product-HA15-SP3-Updates
Name           : resource-agents
Version        : 4.8.0+git30.d0077df0-150300.8.37.1
Arch           : x86_64
Vendor         : SUSE LLC <https://www.suse.com/>
Support Level  : Level 3
Installed Size : 2.5 MiB
Installed      : Yes (automatically)
Status         : up-to-date
Source package : resource-agents-4.8.0+git30.d0077df0-150300.8.37.1.src
Upstream URL   : http://linux-ha.org/
Summary        : HA Reusable Cluster Resource Scripts
Description    : A set of scripts to interface with several services
                 to operate in a High Availability environment for both
                 Pacemaker and rgmanager service managers.

Microsoft Entra ID에 새 애플리케이션 등록

Microsoft Entra ID(이전의 Azure Active Directory)에 새 애플리케이션을 등록하려면 다음 단계를 따르세요.

  1. https://portal.azure.com(으)로 이동합니다.
  2. Microsoft Entra ID 속성 창을 열고 Tenant ID를 기록해 둡니다.
  3. 앱 등록을 선택합니다.
  4. 새 등록을 선택합니다.
  5. 이름을 입력합니다(예: <resourceGroupName>-app). 지원되는 계정 유형에서 이 조직 디렉터리의 계정만(Microsoft만 - 단일 테넌트)을 선택합니다.
  6. 리디렉션 URI에서 을 선택하고 URL(예: http://localhost))을 입력한 후 추가를 선택합니다. 로그온 URL은 유효한 URL이면 무엇이든 가능합니다. 완료되면 등록을 선택합니다.
  7. 새 등록에 대해 인증서 및 비밀을 선택한 다음, 새 클라이언트 암호를 선택합니다.
  8. 새 키(클라이언트 암호)에 대한 설명을 입력하고 추가를 선택합니다.
  9. 비밀의 값을 적어 둡니다. 서비스 주체의 암호로 사용됩니다.
  10. 개요를 선택합니다. 애플리케이션 ID를 적어둡니다. 서비스 주체의 사용자 이름(아래 단계의 로그인 ID)으로 사용됩니다.

펜스 에이전트에 대한 사용자 지정 역할 만들기

자습서를 따라 Azure CLI를 사용하여 Azure 사용자 지정 역할을 만듭니다.

JSON 파일은 다음과 비슷해야 합니다.

  • <username>은 원하는 이름으로 바꿉니다. 이는 이 역할 정의를 만들 때 중복되지 않도록 하기 위한 것입니다.
  • <subscriptionId>를 Azure 구독 ID로 바꿉니다.
{
  "Name": "Linux Fence Agent Role-<username>",
  "Id": null,
  "IsCustom": true,
  "Description": "Allows to power-off and start virtual machines",
  "Actions": [
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/powerOff/action",
    "Microsoft.Compute/virtualMachines/start/action"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscriptionId>"
  ]
}

역할을 추가하려면 다음 명령을 실행합니다.

  • <filename>을 파일 이름으로 바꿉니다.
  • 파일이 저장된 폴더 이외의 다른 경로에서 명령을 실행하는 경우 명령에 파일의 해당 폴더 경로를 포함합니다.
az role definition create --role-definition "<filename>.json"

다음과 같은 출력이 표시됩니다.

{
  "assignableScopes": [
    "/subscriptions/<subscriptionId>"
  ],
  "description": "Allows to power-off and start virtual machines",
  "id": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/roleDefinitions/<roleNameId>",
  "name": "<roleNameId>",
  "permissions": [
    {
      "actions": [
        "Microsoft.Compute/*/read",
        "Microsoft.Compute/virtualMachines/powerOff/action",
        "Microsoft.Compute/virtualMachines/start/action"
      ],
      "dataActions": [],
      "notActions": [],
      "notDataActions": []
    }
  ],
  "roleName": "Linux Fence Agent Role-<username>",
  "roleType": "CustomRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}

서비스 주체에 사용자 지정 역할 할당

마지막 단계에서 만든 Linux Fence Agent Role-<username> 사용자 지정 역할을 서비스 주체에 할당합니다. 모든 노드에 대해 이들 단계를 반복합니다.

경고

이제부터 소유자 역할을 사용하지 마십시오.

  1. https://portal.azure.com으로 이동
  2. 모든 리소스 창을 엽니다.
  3. 첫 번째 클러스터 노드의 가상 머신 선택
  4. 액세스 제어(IAM) 를 선택합니다.
  5. 역할 할당 추가를 선택합니다.
  6. Linux Fence Agent Role-<username> 목록에서 역할을 선택합니다.
  7. 다음에 대한 액세스 할당을 기본값인 Users, group, or service principal로 둡니다.
  8. 선택 목록에서 이전에 만든 애플리케이션의 이름(예: <resourceGroupName>-app)을 입력합니다.
  9. 저장을 선택합니다.

STONITH 디바이스 만들기

  1. 노드 1에서 다음 명령을 실행합니다.

    • <ApplicationID>를 애플리케이션 등록의 ID 값으로 바꿉니다.
    • <servicePrincipalPassword>를 클라이언트 암호의 값으로 바꿉니다.
    • <resourceGroupName>을 이 자습서에 사용된 구독의 리소스 그룹으로 바꿉니다.
    • Azure 구독에서 <tenantID><subscriptionId>를 바꿉니다.
  2. crm configure를 실행하여 crm 프롬프트를 엽니다.

    sudo crm configure
    
  3. crm 프롬프트에서 다음 명령을 실행하여 다음 예제와 같이 rsc_st_azure라는 리소스를 만드는 리소스 속성을 구성합니다.

    primitive rsc_st_azure stonith:fence_azure_arm params subscriptionId="subscriptionID" resourceGroup="ResourceGroup_Name" tenantId="TenantID" login="ApplicationID" passwd="servicePrincipalPassword" pcmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_host_map="sles1:sles1;sles2:sles2;sles3:sles3" op monitor interval=3600 timeout=120
    commit
    quit
    
  4. 다음 명령을 실행하여 펜싱 에이전트를 구성합니다.

    sudo crm configure property stonith-timeout=900
    sudo crm configure property stonith-enabled=true
    sudo crm configure property concurrent-fencing=true
    
  5. STONITH가 사용하도록 설정되었는지 확인하려면 클러스터의 상태를 확인합니다.

    sudo crm status
    

    다음 텍스트와 유사한 출력이 표시됩니다.

    Stack: corosync
     Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
     Last updated: Mon Mar  6 18:20:17 2023
     Last change:  Mon Mar  6 18:10:09 2023 by root via cibadmin on sles1
    
    3 nodes configured
    2 resource instances configured
    
    Online: [ sles1 sles2 sles3 ]
    
    Full list of resources:
    
    admin-ip       (ocf::heartbeat:IPaddr2):       Started sles1
    rsc_st_azure   (stonith:fence_azure_arm):      Started sles2
    

SQL Server 및 mssql-tools 설치

아래 섹션을 사용하여 SQL Server와 mssql-tools를 설치합니다. 자세한 내용은 SUSE Linux Enterprise Server에 SQL Server 설치를 참조하세요.

이 섹션의 모든 노드에서 다음 단계를 수행합니다.

VM에 SQL Server 설치

다음 명령을 사용하여 SQL Server를 설치합니다.

  1. Microsoft SQL Server 2019 SLES 리포지토리 구성 파일을 다운로드합니다.

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/15/mssql-server-2022.repo
    
  2. 리포지토리를 새로 고칩니다.

    sudo zypper --gpg-auto-import-keys refresh
    

    Microsoft 패키지 서명 키가 시스템에 설치되어 있는지 확인하려면 다음 명령을 사용하여 키를 가져옵니다.

    sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
    
  3. 다음 명령을 실행하여 SQL Server를 설치합니다.

    sudo zypper install -y mssql-server
    
  4. 패키지 설치가 완료되면 mssql-conf setup을 실행하고, 프롬프트에 따라 SA 암호를 설정하고, 버전을 선택합니다.

    sudo /opt/mssql/bin/mssql-conf setup
    

    참고

    SA 계정의 강력한 암호를 지정해야 합니다(대문자 및 소문자, 기본 10자리 숫자 및/또는 영숫자가 아닌 기호를 포함 하여 최소 길이 8자).

  5. 구성이 완료되면 서비스가 실행 중인지 확인합니다.

    systemctl status mssql-server
    

SQL Server 명령줄 도구 설치

다음 단계에서는 SQL Server 명령줄 도구인sqlcmdbcp를 설치합니다.

  1. Zypper에 Microsoft SQL Server 리포지토리를 추가합니다.

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/15/prod.repo
    
  2. 리포지토리를 새로 고칩니다.

    sudo zypper --gpg-auto-import-keys refresh
    
  3. 개발자 패키지와 함께 unixODBC를 설치합니다. 자세한 내용은 Microsoft ODBC Driver for SQL Server(Linux) 설치를 참조하세요.

    sudo zypper install -y mssql-tools unixODBC-devel
    

편의상, /opt/mssql-tools/bin/ 환경 변수에 PATH을 추가할 수 있습니다. 이렇게 하면 전체 경로를 지정하지 않고 도구를 실행할 수 있습니다. 다음 명령을 실행하여 로그인 세션 및 대화형/비로그인 세션 모두에 대한 PATH를 수정합니다.

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

SQL Server 고가용성 에이전트 설치

SQL Server용 고가용성 에이전트 패키지를 설치하려면 모든 노드에서 다음 명령을 실행합니다.

sudo zypper install mssql-server-ha

고가용성 서비스에 대한 포트 열기

  1. SQL Server 및 HA 서비스의 모든 노드에서 1433, 2224, 3121, 5022, 5405, 21064의 방화벽 포트를 열 수 있습니다.

    sudo firewall-cmd --zone=public --add-port=1433/tcp --add-port=2224/tcp --add-port=3121/tcp --add-port=5022/tcp --add-port=5405/tcp --add-port=21064 --permanent
    sudo firewall-cmd --reload
    

가용성 그룹 구성

다음 단계에 따라 VM에 대해 SQL Server Always On 가용성 그룹을 구성합니다. 자세한 내용은 Linux에서 고가용성을 위한 SQL Server Always On 가용성 그룹 구성을 참조하세요.

가용성 그룹 사용 설정 및 SQL Server 다시 시작

SQL Server 인스턴스를 호스트하는 각 노드에서 가용성 그룹을 사용하도록 설정합니다. 그런 다음, mssql-server 서비스를 다시 시작합니다. 각 노드에서 다음 명령을 실행합니다.

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server

인증서 만들기

Microsoft는 AG 엔드포인트에 대한 Active Directory 인증을 지원하지 않습니다. 따라서 인증서는 AG 엔드포인트 암호화에 사용해야 합니다.

  1. SQL Server Management Studio(SSMS) 또는 sqlcmd를 사용하여 모든 노드에 연결합니다. 다음 명령을 실행하여 AlwaysOn_health 세션을 사용하도록 설정하고 마스터 키를 만듭니다.

    중요

    SQL Server 인스턴스에 원격으로 연결하는 경우 방화벽에서 1433 포트가 열려 있어야 합니다. 또한 각 VM의 NSG에서 1433 포트에 대한 인바운드 연결을 허용해야 합니다. 자세한 내용은 인바운드 보안 규칙을 만드는 보안 규칙 만들기를 참조하세요.

    • <MasterKeyPassword>를 사용자 고유의 암호로 바꿉니다.
    ALTER EVENT SESSION AlwaysOn_health ON SERVER
        WITH (STARTUP_STATE = ON);
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPassword>';
    GO
    
  2. SSMS 또는 sqlcmd를 사용하여 주 복제본에 연결합니다. 다음 명령은 주 SQL Server 복제본에서 인증서를 /var/opt/mssql/data/dbm_certificate.cer에 만들고, 프라이빗 키를 var/opt/mssql/data/dbm_certificate.pvk에 만듭니다.

    • <PrivateKeyPassword>를 사용자 고유의 암호로 바꿉니다.
    CREATE CERTIFICATE dbm_certificate
        WITH SUBJECT = 'dbm';
    GO
    
    BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
    WITH PRIVATE KEY (
            FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
            ENCRYPTION BY PASSWORD = '<PrivateKeyPassword>'
            );
    GO
    

명령을 실행하여 exit 세션을 종료하고 SSH 세션으로 돌아갑니다.

보조 복제본에 인증서 복사 및 서버에 인증서 만들기

  1. 가용성 복제본을 호스팅할 모든 서버의 동일한 위치에 만든 두 파일을 복사합니다.

    주 서버에서 다음 scp 명령을 실행하여 인증서를 대상 서버에 복사합니다.

    • <username>sles2를 사용하는 사용자 이름 및 대상 VM 이름으로 바꿉니다.
    • 모든 보조 복제본에 대해 이 명령을 실행합니다.

    참고

    루트 환경을 제공하는 sudo -i를 실행할 필요가 없습니다. 대신 각 명령 앞에 sudo 명령을 실행할 수 있습니다.

    # The below command allows you to run commands in the root environment
    sudo -i
    
    scp /var/opt/mssql/data/dbm_certificate.* <username>@sles2:/home/<username>
    
  2. 대상 서버에서 다음 명령을 실행합니다.

    • <username>을 사용자 이름으로 바꿉니다.
    • mv 명령은 파일 또는 디렉터리를 한 위치에서 다른 위치로 이동합니다.
    • chown 명령은 파일, 디렉터리 또는 링크의 소유자와 그룹을 변경하는 데 사용됩니다.
    • 모든 보조 복제본에 대해 이러한 명령을 실행합니다.
    sudo -i
    mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/
    cd /var/opt/mssql/data
    chown mssql:mssql dbm_certificate.*
    
  3. 다음 Transact-SQL 스크립트는 주 SQL Server 복제본에서 만든 백업에서 인증서를 만듭니다. 강력한 암호로 스크립트를 업데이트합니다. 해독 암호는 이전 단계에서 .pvk 파일을 만들 때 사용한 암호와 동일합니다. 인증서를 만들려면 모든 보조 서버에서 sqlcmd 또는 SSMS를 사용하여 다음 스크립트를 실행합니다.

    CREATE CERTIFICATE dbm_certificate
        FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
        WITH PRIVATE KEY (
        FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
        DECRYPTION BY PASSWORD = '<PrivateKeyPassword>'
    );
    GO
    

모든 복제본에서 데이터베이스 미러링 엔드포인트 만들기

sqlcmd 또는 SSMS를 사용하여 모든 SQL Server 인스턴스에서 다음 스크립트를 실행합니다.

CREATE ENDPOINT [Hadr_endpoint]
   AS TCP (LISTENER_PORT = 5022)
   FOR DATABASE_MIRRORING (
   ROLE = ALL,
   AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
GO

ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GO

가용성 그룹 만들기

sqlcmd 또는 SSMS를 사용하여 주 복제본을 호스팅하는 SQL Server 인스턴스에 연결합니다. 다음 명령을 실행하여 가용성 그룹을 만듭니다.

  • ag1을 원하는 AG 이름으로 바꿉니다.
  • sles1, sles2sles3 값을 복제본을 호스팅하는 SQL Server 인스턴스의 이름으로 바꿉니다.
CREATE AVAILABILITY
GROUP [ag1]
WITH (
        DB_FAILOVER = ON,
        CLUSTER_TYPE = EXTERNAL
        )
FOR REPLICA
    ON N'sles1'
WITH (
        ENDPOINT_URL = N'tcp://sles1:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    N'sles2'
WITH (
        ENDPOINT_URL = N'tcp://sles2:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    N'sles3'
WITH (
        ENDPOINT_URL = N'tcp://sles3:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        );
GO

ALTER AVAILABILITY GROUP [ag1]
GRANT CREATE ANY DATABASE;
GO

Pacemaker용 SQL Server 로그인 만들기

모든 SQL Server 인스턴스에서 Pacemaker를 위한 SQL Server 로그인을 만듭니다. 다음 Transact-SQL은 로그인을 만듭니다.

  • <password>를 사용자 고유의 복합 암호로 바꿉니다.
USE [master]
GO

CREATE LOGIN [pacemakerLogin]
    WITH PASSWORD = N'<password>';
GO

ALTER SERVER ROLE [sysadmin]
    ADD MEMBER [pacemakerLogin];
GO

모든 SQL Server 인스턴스에서 SQL Server 로그인에 사용되는 자격 증명을 저장합니다.

  1. 파일을 만듭니다.

    sudo vi /var/opt/mssql/secrets/passwd
    
  2. 파일에 다음 두 줄을 추가합니다.

    pacemakerLogin
    <password>
    

    vi 편집기를 종료하려면 먼저 Esc 키를 누른 다음, :wq 명령을 입력하여 파일을 작성하고 종료합니다.

  3. 파일을 루트에서만 읽을 수 있도록 설정합니다.

    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

가용성 그룹에 보조 복제본 조인

  1. 보조 복제본에서 다음 명령을 실행하여 AG에 추가합니다.

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  2. 주 복제본과 각 보조 복제본에서 다음 Transact-SQL 스크립트를 실행합니다.

    GRANT ALTER, CONTROL, VIEW DEFINITION
        ON AVAILABILITY GROUP::ag1 TO pacemakerLogin;
    GO
    
    GRANT VIEW SERVER STATE TO pacemakerLogin;
    GO
    
  3. 보조 복제본이 조인되면 Always On 고가용성 노드를 펼쳐서 SSMS 개체 탐색기에서 해당 복제본을 볼 수 있습니다.

    스크린샷은 기본 및 보조 가용성 복제본을 보여줍니다.

가용성 그룹에 데이터베이스 추가

이 섹션에서는 가용성 그룹에 데이터베이스를 추가하는 방법에 대한 문서를 따릅니다.

이 단계에서는 다음 Transact-SQL 명령이 사용됩니다. 주 복제본에서 다음 명령을 실행합니다.

CREATE DATABASE [db1]; -- creates a database named db1
GO

ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery model
GO

BACKUP DATABASE [db1] -- backs up the database to disk
    TO DISK = N'/var/opt/mssql/data/db1.bak';
GO

ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1]; -- adds the database db1 to the AG
GO

데이터베이스가 보조 서버에 생성되었는지 확인

각 보조 SQL Server 복제본에서 다음 쿼리를 실행하여 db1 데이터베이스가 만들어졌고 SYNCHRONIZED 상태인지 확인합니다.

SELECT * FROM sys.databases
WHERE name = 'db1';
GO

SELECT DB_NAME(database_id) AS 'database',
    synchronization_state_desc
FROM sys.dm_hadr_database_replica_states;
GO

synchronization_state_desc 목록에서 db1에 대해 SYNCHRONIZED이면 해당 복제본이 동기화된 것입니다. 보조 복제본에서 기본 복제본의 db1이 표시됩니다.

Pacemaker 클러스터에서 가용성 그룹 리소스 만들기

참고

바이어스 없는 통신

이 문서에는 이 컨텍스트에서 사용될 때 Microsoft가 불쾌한 표현으로 간주하는 용어인 슬레이브 용어에 대한 참조가 포함되어 있습니다. 이 용어가 이 문서에 나타나는 이유는 현재 소프트웨어에 나타나기 때문입니다. 소프트웨어에서 이 용어가 제거되면 문서에서 제거할 것입니다.

이 문서에서는 Pacemaker 클러스터에서 가용성 그룹 리소스를 만드는 방법에 대한 가이드를 참조합니다.

Pacemaker 활성화

Pacemaker를 사용하도록 설정하여 자동으로 시작합니다.

클러스터의 모든 노드에서 다음 명령을 실행합니다.

sudo systemctl enable pacemaker

AG 클러스터 리소스 만들기

  1. crm configure를 실행하여 crm 프롬프트를 엽니다.

    sudo crm configure
    
  2. crm 프롬프트에서 다음 명령을 실행하여 리소스 속성을 구성합니다. 다음 명령은 가용성 그룹 ag_clusterag1 리소스를 만듭니다.

    primitive ag_cluster ocf:mssql:ag params ag_name="ag1" meta failure-timeout=60s op start timeout=60s op stop timeout=60s op promote timeout=60s op demote timeout=10s op monitor timeout=60s interval=10s op monitor timeout=60s interval=11s role="Master" op monitor timeout=60s interval=12s role="Slave" op notify timeout=60s ms ms-ag_cluster ag_cluster meta master-max="1" master-node-max="1" clone-max="3" clone-node-max="1" notify="true"
    commit
    quit
    

    quit 프롬프트를 종료하려면 를 입력하세요.

  3. 주 노드와 동일한 노드에서 실행되도록 가상 IP에 대한 공동 배치 제약 조건을 설정합니다.

    sudo crm configure
    colocation vip_on_master inf: admin-ip ms-ag_cluster: Master
    commit
    quit
    
  4. 순서 제약 조건을 추가하여 IP 주소가 일시적으로 장애 조치(failover) 이전 보조 노드가 있는 노드를 가리키지 않도록 합니다. 다음 명령을 실행하여 순서 제약 조건을 만듭니다.

    sudo crm configure
    order ag_first inf: ms-ag_cluster:promote admin-ip:start
    commit
    quit
    
  5. 명령을 사용하여 클러스터의 상태를 확인합니다.

    sudo crm status
    

    출력은 다음 예와 유사해야 합니다.

    Cluster Summary:
      * Stack: corosync
      * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
      * Last updated: Mon Mar  6 18:38:17 2023
      * Last change:  Mon Mar  6 18:38:09 2023 by root via cibadmin on sles1
      * 3 nodes configured
      * 5 resource instances configured
    
    Node List:
      * Online: [ sles1 sles2 sles3 ]
    
    Full List of Resources:
      * admin-ip    (ocf::heartbeat:IPaddr2):                Started sles1
      * rsc_st_azure        (stonith:fence_azure_arm):       Started sles2
      * Clone Set: ms-ag_cluster [ag_cluster] (promotable):
        * Masters: [ sles1 ]
        * Slaves: [ sles2 sles3 ]
    
  6. 다음 명령을 실행하여 제약 조건을 검토합니다.

    sudo crm configure show
    

    출력은 다음 예와 유사해야 합니다.

    node 1: sles1
    node 2: sles2
    node 3: sles3
    primitive admin-ip IPaddr2 \
            params ip=10.0.0.93 \
            op monitor interval=10 timeout=20
    primitive ag_cluster ocf:mssql:ag \
            params ag_name=ag1 \
            meta failure-timeout=60s \
            op start timeout=60s interval=0 \
            op stop timeout=60s interval=0 \
            op promote timeout=60s interval=0 \
            op demote timeout=10s interval=0 \
            op monitor timeout=60s interval=10s \
            op monitor timeout=60s interval=11s role=Master \
            op monitor timeout=60s interval=12s role=Slave \
            op notify timeout=60s interval=0
    primitive rsc_st_azure stonith:fence_azure_arm \
            params subscriptionId=xxxxxxx resourceGroup=amvindomain tenantId=xxxxxxx login=xxxxxxx passwd="******" cmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_host_map="sles1:sles1;les2:sles2;sles3:sles3" \
            op monitor interval=3600 timeout=120
    ms ms-ag_cluster ag_cluster \
            meta master-max=1 master-node-max=1 clone-max=3 clone-node-max=1 notify=true
    order ag_first Mandatory: ms-ag_cluster:promote admin-ip:start
    colocation vip_on_master inf: admin-ip ms-ag_cluster:Master
    property cib-bootstrap-options: \
            have-watchdog=false \
            dc-version="2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712" \
            cluster-infrastructure=corosync \
            cluster-name=sqlcluster \
            stonith-enabled=true \
            concurrent-fencing=true \
            stonith-timeout=900
    rsc_defaults rsc-options: \
            resource-stickiness=1 \
            migration-threshold=3
    op_defaults op-options: \
            timeout=600 \
            record-pending=true
    

테스트 장애 조치

이제까지의 구성이 성공했는지 확인하기 위해 장애 조치 테스트를 수행합니다. 자세한 내용은 Linux의 Always On 가용성 그룹 장애 조치를 참조하세요.

  1. 수동으로 주 복제본을 sles2로 장애 조치하기 위해 다음 명령을 실행하십시오. sles2를 서버 이름의 값으로 바꿉니다.

    sudo crm resource move ag_cluster sles2
    

    출력은 다음 예와 유사해야 합니다.

    INFO: Move constraint created for ms-ag_cluster to sles2
    INFO: Use `crm resource clear ms-ag_cluster` to remove this constraint
    
  2. 클러스터의 상태를 확인합니다.

    sudo crm status
    

    출력은 다음 예와 유사해야 합니다.

    Cluster Summary:
      * Stack: corosync
      * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
      * Last updated: Mon Mar  6 18:40:02 2023
      * Last change:  Mon Mar  6 18:39:53 2023 by root via crm_resource on sles1
      * 3 nodes configured
      * 5 resource instances configured
    
    Node List:
      * Online: [ sles1 sles2 sles3 ]
    
    Full List of Resources:
      * admin-ip    (ocf::heartbeat:IPaddr2):                Stopped
      * rsc_st_azure        (stonith:fence_azure_arm):       Started sles2
      * Clone Set: ms-ag_cluster [ag_cluster] (promotable):
        * Slaves: [ sles1 sles2 sles3 ]
    
  3. 일정 시간이 지나면 이제 sles2 VM이 주가 되고 다른 두 VM은 보조가 됩니다. sudo crm status를 다시 한 번 실행하고 다음 예와 유사한 출력을 검토합니다.

    Cluster Summary:
      * Stack: corosync
      * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
      * Last updated: Tue Mar  6 22:00:44 2023
      * Last change:  Mon Mar  6 18:42:59 2023 by root via cibadmin on sles1
      * 3 nodes configured
      * 5 resource instances configured
    
    Node List:
      * Online: [ sles1 sles2 sles3 ]
    
    Full List of Resources:
      * admin-ip    (ocf::heartbeat:IPaddr2):                Started sles2
      * rsc_st_azure        (stonith:fence_azure_arm):       Started sles2
      * Clone Set: ms-ag_cluster [ag_cluster] (promotable):
        * Masters: [ sles2 ]
        * Slaves: [ sles1 sles3 ]
    
  4. crm config show를 사용하여 제약 조건을 다시 확인합니다. 다른 제약 조건이 수동 장애 조치로 인해 추가된 것을 관찰합니다.

  5. 다음 명령을 사용하여 ID가 cli-prefer-ag_cluster인 제약 조건을 제거합니다.

    crm configure
    delete cli-prefer-ms-ag_cluster
    commit
    

펜싱 테스트

다음 명령을 실행하여 STONITH를 테스트할 수 있습니다. sles1에서 sles3에 대해 다음 명령을 실행해 보세요.

sudo crm node fence sles3

다음 단계