자습서: Linux 가상 머신의 가용성 그룹 수신기 구성

적용 대상:Azure VM 기반 SQL Server

이 자습서에서는 Azure에서 Red Hat Enterprise Linux(RHEL), SUSE Linux Enterprise Server(SLES) 및 Ubuntu용 SQL Server on Linux VM(Virtual Machine)에 대한 AG(가용성 그룹) 수신기를 만드는 방법에 대한 단계를 설명합니다.

이 문서에서 배울 내용은 다음과 같습니다.

  • Azure Portal에서 부하 분산 장치 만들기
  • 부하 분산 장치에 대한 백 엔드 풀 구성
  • 부하 분산 장치에 대한 프로브 만들기
  • 부하 분산 규칙 설정
  • 클러스터에 부하 분산 장치 리소스 만들기
  • AG 수신기 만들기
  • 수신기에 대한 연결 테스트
  • 장애 조치(failover) 테스트

참고 항목

바이어스 없는 통신

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

전제 조건

Azure Portal에서 부하 분산 장치 만들기

다음 지침은 부하 분산 장치 및 가용성 그룹 수신기 구성(Azure VM 기반 SQL Server) 문서의 Azure Portal에서 부하 분산 장치 만들기 및 구성의 1~4단계를 안내합니다.

부하 분산 장치 만들기

  1. Azure 포털에서 SQL Server 가상 머신을 포함하는 리소스 그룹을 엽니다.

  2. 리소스 그룹에서 추가를 선택합니다.

  3. 부하 분산 장치를 검색한 후 검색 결과에서 Microsoft에서 게시하는 부하 분산 장치를 선택합니다.

  4. 부하 분산 장치 창에서 만들기를 선택합니다.

  5. 부하 분산 장치 만들기 대화 상자에서 다음과 같이 부하 분산 장치를 구성합니다.

    설정
    이름 부하 분산 장치를 나타내는 텍스트 이름입니다. 예들 들어 sqlLB입니다.
    형식 내부
    가상 네트워크 이전에 만든 기본 가상 머신의 이름은 VM1VNET입니다.
    서브넷 SQL Server 인스턴스가 있는 서브넷을 선택합니다. 기본값은 VM1Subnet이어야 합니다.
    IP 주소 할당 정적
    개인 IP 주소 클러스터에서 만든 virtualip IP 주소를 사용합니다.
    구독 리소스 그룹에 사용된 구독을 사용합니다.
    리소스 그룹 SQL Server 인스턴스가 있는 리소스 그룹을 선택합니다.
    위치 SQL Server 인스턴스가 있는 Azure 위치를 선택합니다.

백 엔드 풀 구성

Azure에서 백 엔드 주소 풀 백 엔드 풀이 호출됩니다. 이 경우 백 엔드 풀은 AG에 있는 세 SQL Server 인스턴스의 주소입니다.

  1. 리소스 그룹에서 만든 부하 분산 장치를 클릭합니다.

  2. 설정에서 백 엔드 풀을 선택합니다.

  3. 백 엔드 풀에서 추가를 선택하여 백 엔드 주소 풀을 만듭니다.

  4. 백 엔드 풀 추가에서 이름에 백 엔드 풀의 이름을 입력합니다.

  5. 다음에 연결됨에서 가상 머신을 선택합니다.

  6. 환경에서 각 가상 머신을 선택하고 각 선택 영역에 적절한 IP 주소를 연결합니다.

    Screenshot showing how to add a backend pool.

  7. 추가를 선택합니다.

프로브 만들기

프로브는 Azure에서 현재 AG 수신기를 소유하는 SQL Server 인스턴스를 확인하는 방법을 정의합니다. Azure는 프로브를 만들 때 정의한 포트의 IP 주소를 기반으로 서비스를 프로브합니다.

  1. 부하 분산 장치 설정 창에서 상태 프로브를 선택합니다.

  2. 상태 프로브 창에서 추가를 선택합니다.

  3. 프로브 추가 창에서 프로브를 구성합니다. 다음 값을 사용하여 프로브를 구성합니다.

    설정
    이름 프로브를 나타내는 텍스트 이름입니다. 예들 들어 SQLAlwaysOnEndPointProbe입니다.
    프로토콜 TCP
    포트 사용 가능한 포트를 사용할 수 있습니다. 예들 들어 59999입니다.
    Interval 5
    비정상 임계값 2
  4. 확인을 선택합니다.

  5. 모든 가상 머신에 로그인하고 다음 명령을 사용하여 프로브 포트를 엽니다.

    sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent
    sudo firewall-cmd --reload
    

Azure는 프로브를 만든 후 AG에 대한 수신기가 있는 SQL Server 인스턴스를 테스트하는 데 프로브를 사용합니다.

부하 분산 규칙 설정

부하 분산 규칙은 부하 분산 장치가 트래픽을 SQL Server 인스턴스로 라우트하는 방법을 구성합니다. 이 부하 분산 장치의 경우 세 개의 SQL Server 인스턴스 중 하나만 한 번에 AG 수신기 리소스를 소유하므로 Direct Server Return(DSR)을 사용하도록 설정합니다.

  1. 부하 분산 장치 설정 창에서 부하 분산 규칙을 선택합니다.

  2. 부하 분산 규칙 창에서 추가를 선택합니다.

  3. 부하 분산 규칙 추가 창에서 부하 분산 규칙을 구성합니다. 다음 설정을 사용합니다.

    설정
    이름 부하 분산 규칙을 나타내는 텍스트 이름입니다. 예들 들어 SQLAlwaysOnEndPointListener입니다.
    프로토콜 TCP
    포트 1433
    백 엔드 포트 1433. 이 규칙은 부동 IP(Direct Server Return(DSR))를 사용하므로 이 값은 무시됩니다.
    프로브 이 부하 분산 장치에 대해 만든 프로브의 이름을 사용합니다.
    세션 지속성 없음
    유휴 제한 시간(분) 4
    부동 IP(Direct Server Return) Enabled

    Screenshot showing how to add a load balancing rule.

  4. 확인을 선택합니다.

  5. Azure에서 부하 분산 규칙이 구성됩니다. 이제 AG에 대한 수신기를 호스트하는 SQL Server 인스턴스로 트래픽을 라우트하도록 부하 분산 장치가 구성되었습니다.

현재 리소스 그룹에는 모든 SQL Server 컴퓨터에 연결되는 부하 분산 장치가 있습니다. 부하 분산 장치에는 SQL Server Always On AG 수신기에 대한 IP 주소도 있으므로 모든 컴퓨터가 AG에 대한 요청에 응답할 수 있습니다.

가용성 그룹 수신기 리소스 만들기

Pacemaker에서 부하 분산 장치 리소스를 만들기 전에 먼저 수신기 리소스를 만듭니다.

sudo crm configure primitive virtualip \
ocf:heartbeat:IPaddr2 \
params ip=x.y.z.a

이전 예에서 x.y.z.a는 부하 분산 장치 프런트 엔드 IP 주소를 나타냅니다.

클러스터에 부하 분산 장치 리소스 만들기

구성 중인 배포에 대한 지침을 따릅니다.

  1. 주 가상 머신에 로그인합니다. Azure 부하 분산 장치 프로브 포트(이 예에서는 가 사용됨)를 활성화하려면 리소스를 만들어야 합니다. 다음 명령을 실행합니다.

    sudo pcs resource create azure_load_balancer azure-lb port=59999
    
  2. virtualipazure_load_balancer 리소스를 포함하는 그룹을 만듭니다.

    sudo pcs resource group add virtualip_group azure_load_balancer virtualip
    

제약 조건 추가

  1. Azure 부하 분산 장치 IP 주소와 AG 리소스가 동일한 노드에서 실행되도록 공동 배치 제약 조건을 구성해야 합니다. 다음 명령을 실행합니다.

    sudo pcs constraint colocation add azure_load_balancer ag_cluster-master INFINITY with-rsc-role=Master
    
  2. AG 리소스가 Azure Load Balancer IP 주소보다 먼저 실행 중 상태가 되도록 하려면 정렬 제약 조건을 만듭니다. 공동 배치 제약 조건은 정렬 제약 조건을 암시하지만 정렬 제약 조건이 적용됩니다.

    sudo pcs constraint order promote ag_cluster-master then start azure_load_balancer
    
  3. 제약 조건을 확인하려면 다음 명령을 실행합니다.

    sudo pcs constraint list --full
    

    다음 출력이 표시됩니다.

    Location Constraints:
    Ordering Constraints:
      promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
      promote ag_cluster-master then start azure_load_balancer (kind:Mandatory) (id:order-ag_cluster-master-azure_load_balancer-mandatory)
    Colocation Constraints:
      virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
      azure_load_balancer with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-azure_load_balancer-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

가용성 그룹 수신기 만들기

  1. 주 노드의 sqlcmd 또는 SSMS에서 다음 명령을 실행합니다. 아래에 사용된 IP 주소를 virtualip IP 주소로 바꿉니다.

    • SQL Server 2022 이상 버전:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '0.0.0.0'
          )),
          PORT = 1433
      );
      GO
      
    • SQL Server 2017 및 SQL Server 2019:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '255.255.255.255'
          )),
          PORT = 1433
      );
      GO
      
  2. 각 VM 노드에 로그인합니다. 다음 명령을 사용하여 호스트 파일을 열고 각 컴퓨터에서 ag1-listener에 대한 호스트 이름 확인을 설정합니다.

    sudo vi /etc/hosts
    

    vi 편집기에서 i를 입력하여 텍스트를 삽입하고, 빈 줄에 ag1-listener의 IP를 추가합니다. 그런 다음, IP 옆의 공백 뒤에 ag1-listener를 추가합니다.

    <IP of ag1-listener> ag1-listener
    

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

수신기 및 장애 조치(failover) 테스트

이 섹션에서는 SQL Server AG 수신기에 로그인하고 장애 조치(failover)를 테스트하는 방법을 설명합니다.

가용성 그룹 수신기를 사용하여 SQL Server에 대한 로그인 테스트

  1. sqlcmd를 사용하여 AG 수신기 이름을 사용하여 SQL Server의 주 노드에 로그인합니다.

    • 이전에 만든 로그인을 사용하고 <YourPassword>를 올바른 암호로 바꿉니다. 다음 예제에서는 SQL Server로 사용하여 만든 sa 로그인을 사용합니다.
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  2. 연결된 서버의 이름을 확인합니다. sqlcmd에서 다음 명령을 실행합니다.

    SELECT @@SERVERNAME;
    

    출력에 현재 주 노드가 표시됩니다. 장애 조치(failover)를 테스트한 적이 없다면 VM1이어야 합니다.

    exit 명령을 입력하여 SQL Server 세션을 종료합니다.

장애 조치(failover) 테스트

  1. 다음 명령을 실행하여 주 복제본을 <VM2> 또는 다른 복제본으로 수동으로 장애 조치(failover)합니다. <VM2>를 서버 이름의 값으로 바꿉니다.

    sudo pcs resource move ag_cluster-master <VM2> --master
    
  2. 제약 조건을 확인하면 수동 장애 조치로 인해 다른 제약 조건이 추가되었음을 알 수 있습니다.

    sudo pcs constraint list --full
    

    ID가 cli-prefer-ag_cluster-master인 제약 조건이 추가되었습니다.

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

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    
  4. sudo pcs resource 명령을 사용하여 클러스터 리소스를 확인합니다. 그러면 이제 주 인스턴스가 <VM2>임을 알 수 있습니다.

    참고 항목

    이 문서에는 Microsoft에서 더 이상 사용하지 않는 용어인 슬레이브라는 용어에 대한 참조가 포함되어 있습니다. 소프트웨어에서 용어가 제거되면 이 문서에서 해당 용어가 제거됩니다.

    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
        Masters: [ <VM2> ]
        Slaves: [ <VM1> <VM3> ]
    Resource Group: virtualip_group
        azure_load_balancer        (ocf::heartbeat:azure-lb):      Started <VM2>
        virtualip  (ocf::heartbeat:IPaddr2):       Started <VM2>
    
  5. sqlcmd를 사용하여 수신기 이름으로 주 복제본에 로그인합니다.

    • 이전에 만든 로그인을 사용하고 <YourPassword>를 올바른 암호로 바꿉니다. 다음 예제에서는 SQL Server로 사용하여 만든 sa 로그인을 사용합니다.
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  6. 연결된 서버를 확인합니다. sqlcmd에서 다음 명령을 실행합니다.

    SELECT @@SERVERNAME;
    

    이제 장애 조치(failover)한 VM에 연결되어 있음을 확인할 수 있습니다.

다음 단계

SQL Server 인스턴스에 가용성 그룹 수신기를 활용하려면 부하 분산 장치를 만들고 구성해야 합니다.