다음을 통해 공유


Azure SQL Server VM에서 가용성 그룹에 대한 ILB 수신기 구성

개요

중요

Azure에는 리소스를 만들고 사용하기 위한 Azure Resource Manager 및 클래식이라는 두 가지 배포 모델이 있다는 것을 이해해야 합니다. 이 문서에서는 클래식 배포 모델의 사용에 대해 설명합니다. 대부분의 새로운 배포에서는 Azure Resource Manager 모델을 사용하는 것이 좋습니다.

Resource Manager 모델에서 Always On 가용성 그룹에 대한 수신기를 구성하려면 Azure에서 Always On 가용성 그룹에 대한 부하 분산 장치 구성을 참조하세요.

가용성 그룹은 온-프레미스 전용, Azure 전용 또는 하이브리드 구성에 대한 온-프레미스와 Azure 모두에 걸쳐 있는 복제본을 포함할 수 있습니다. Azure 복제본은 동일한 지역 내 또는 여러 가상 네트워크를 사용하는 여러 지역에 걸쳐 있을 수 있습니다. 이 문서의 절차에서는 가용성 그룹을 구성했지만 수신기는 아직 구성하지 않았다고 가정합니다.

내부 수신기에 대한 지침 및 제한 사항

Azure에서 가용성 그룹 수신기에 ILB(내부 부하 분산 장치)를 사용하는 경우 다음과 같은 지침이 적용됩니다.

  • 가용성 그룹 수신기는 Windows Server 2008 R2, Windows Server 2012 및 Windows Server 2012 R2에서 지원됩니다.
  • 수신기는 ILB로 구성되고 ILB는 클라우드 서비스당 하나만 있기 때문에 클라우드 서비스마다 하나의 내부 가용성 그룹 수신기만 지원됩니다. 그러나 외부 수신기는 여러 개를 만들 수 있습니다. 자세한 내용은 Azure에서 Always On 가용성 그룹에 대한 외부 수신기 구성을 참조하세요.

수신기의 액세스 가능 여부 확인

Azure에서 가용성 그룹 수신기를 구성하는 경우 두 가지 방법을 사용하는 것을 고려해야 합니다. 이러한 방법은 수신기를 만들 때 사용하는 Azure 부하 분산 장치의 유형에 따라 달라집니다. 다음 표에 차이점이 나와 있습니다.

부하 분산 장치 유형 구현 사용하는 경우:
외부 VM(가상 머신)을 호스팅하는 클라우드 서비스의 공용 가상 IP 주소를 사용합니다. 인터넷을 포함하여 가상 네트워크의 외부에서 수신기에 액세스해야 합니다.
내부 수신기에 대한 프라이빗 주소가 있는 내부 부하 분산 장치를 사용합니다. 동일한 가상 네트워크 내에서만 수신기에 액세스할 수 있습니다. 이 액세스에는 하이브리드 시나리오의 사이트 간 VPN이 포함됩니다.

중요

클라우드 서비스의 공용 VIP(외부 부하 분산 장치)를 사용하는 수신기의 경우 클라이언트, 수신기, 데이터베이스가 동일한 Azure 지역에 있을 때는 송신 비용이 발생하지 않습니다. 그렇지 않은 경우 수신기를 통해 반환된 데이터는 송신으로 간주되며 정상적인 데이터 전송 요금으로 청구됩니다.

ILB는 지역 범위의 가상 네트워크에서만 구성할 수 있습니다. 선호도 그룹에 대해 구성된 기존 가상 네트워크는 ILB를 사용할 수 없습니다. 자세한 내용은 내부 부하 분산 장치 개요를 참조하세요.

이 문서에서는 ILB를 사용하는 수신기를 만드는 데 중점을 둡니다. 공용 또는 외부 수신기가 필요한 경우 외부 수신기 설정에 대해 설명하는 이 문서의 다른 버전을 참조하세요.

직접 서버 반환이 있는 부하 분산 VM 엔드포인트 만들기

이 섹션에서는 스크립트를 실행하여 ILB를 먼저 만듭니다.

Azure 복제본을 호스트하는 각 VM에 대해 부하가 분산된 엔드포인트를 만듭니다. 여러 지역에 복제본이 있는 경우 해당 지역에 대한 각 복제본은 동일한 Azure 가상 네트워크의 동일한 클라우드 서비스에 있어야 합니다. 여러 Azure 지역에 걸쳐 있는 가용성 그룹 복제본을 만들려면 여러 가상 네트워크를 구성해야 합니다. 가상 네트워크 간의 연결을 구성하는 방법에 대한 정보는 가상 네트워크 연결에 가상 네트워크 구성을 참조하세요.

  1. Azure Portal에서 세부 정보를 보려면 복제본을 호스팅하는 각 VM으로 이동합니다.

  2. 각 VM에 대한 엔드포인트 탭을 클릭합니다.

  3. 사용할 수신기 엔드포인트의 이름공용 포트가 사용 중이지 않은지 확인합니다. 이 섹션의 예제에서는 이름이 MyEndpoint이고 포트는 1433입니다.

  4. 로컬 클라이언트에서 최신 PowerShell 모듈을 다운로드하고 설치합니다.

  5. Azure PowerShell을 시작합니다.
    새 PowerShell 세션이 Azure 관리 모듈이 로드된 상태로 열립니다.

  6. Get-AzurePublishSettingsFile을 실행합니다. 이 cmdlet은 게시 설정 파일을 로컬 디렉터리에 다운로드하도록 브라우저로 안내합니다. Azure 구독에 대한 로그인 자격 증명을 묻는 메시지가 표시될 수 있습니다.

  7. 다운로드한 게시 설정 파일의 경로와 함께 다음 Import-AzurePublishSettingsFile 명령을 실행합니다.

    Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>
    

    게시 설정 파일을 가져오면 PowerShell 세션에서 Azure 구독을 관리할 수 있습니다.

  8. ILB에 대해 고정 IP 주소를 할당합니다. 다음 명령을 실행하여 현재 가상 네트워크 구성을 검사합니다.

    (Get-AzureVNetConfig).XMLConfiguration
    
  9. 복제본을 호스트하는 VM이 포함된 서브넷의 서브넷 이름을 적어 둡니다. 이 이름은 스크립트의 $SubnetName 매개 변수에서 사용됩니다.

  10. 복제본을 호스트하는 VM이 포함된 서브넷의 VirtualNetworkSite 이름과 시작 AddressPrefix를 적어 둡니다. 두 값을 Test-AzureStaticVNetIP 명령에 전달하고 AvailableAddresses를 검사하여 사용 가능한 IP 주소를 찾습니다. 예를 들어 가상 네트워크 이름이 MyVNet이고 서브넷 주소 범위가 172.16.0.128에서 시작한다면 다음 명령을 통해 사용 가능한 주소를 나열할 수 있습니다.

    (Test-AzureStaticVNetIP -VNetName "MyVNet"-IPAddress 172.16.0.128).AvailableAddresses
    
  11. 사용 가능한 주소 중 하나를 선택하고 다음 단계에 있는 스크립트의 $ILBStaticIP 매개 변수에 사용합니다.

  12. 다음 PowerShell 스크립트를 텍스트 편집기에 복사하고 사용자 환경에 맞게 변수 값을 설정합니다. 일부 매개 변수에 대해 기본값이 제공되었습니다.

    선호도 그룹을 사용하는 기존 배포는 ILB를 추가할 수 없습니다. ILB 요구 사항에 대한 자세한 내용은 내부 부하 분산 장치 개요를 참조하세요.

    또한 가용성 그룹에 Azure 지역에 걸쳐 있는 경우, 데이터센터에 있는 클라우드 서비스 및 노드에 대해 각각의 데이터센터에서 한 번씩 스크립트를 실행해야 합니다.

    # Define variables
    $ServiceName = "<MyCloudService>" # the name of the cloud service that contains the availability group nodes
    $AGNodes = "<VM1>","<VM2>","<VM3>" # all availability group nodes containing replicas in the same cloud service, separated by commas
    $SubnetName = "<MySubnetName>" # subnet name that the replicas use in the virtual network
    $ILBStaticIP = "<MyILBStaticIPAddress>" # static IP address for the ILB in the subnet
    $ILBName = "AGListenerLB" # customize the ILB name or use this default value
    
    # Create the ILB
    Add-AzureInternalLoadBalancer -InternalLoadBalancerName $ILBName -SubnetName $SubnetName -ServiceName $ServiceName -StaticVNetIPAddress $ILBStaticIP
    
    # Configure a load-balanced endpoint for each node in $AGNodes by using ILB
    ForEach ($node in $AGNodes)
    {
        Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name "ListenerEndpoint" -LBSetName "ListenerEndpointLB" -Protocol tcp -LocalPort 1433 -PublicPort 1433 -ProbePort 59999 -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -InternalLoadBalancerName $ILBName -DirectServerReturn $true | Update-AzureVM
    }
    
  13. 변수를 설정한 후에는 텍스트 편집기에서 해당 스크립트를 PowerShell 세션에 복사하여 실행합니다. 프롬프트에 >> 가 계속 표시되면 Enter를 다시 입력하여 스크립트 실행이 시작되도록 합니다.

필요한 경우 KB2854082가 설치되었는지 확인합니다.

다음으로, 클러스터에서 Windows Server 2008 R2 또는 Windows Server 2012를 실행하는 서버가 있는 경우 각각의 온-프레미스 서버 또는 해당 클러스터에 속하는 Azure VM에 핫픽스 KB2854082 가 설치되어 있는지 확인해야 합니다. 클러스터에 있지만 가용성 그룹에 없는 서버 또는 VM에도 이 핫픽스를 설치해야 합니다.

각 클러스터 노드에 대한 원격 데스크톱 세션에서 로컬 디렉터리에 KB2854082 를 다운로드합니다. 그런 다음 각 클러스터 노드에 핫픽스를 순차적으로 설치합니다. 클러스터 서비스가 클러스터 노드에서 현재 실행 중인 경우 핫픽스 설치가 끝나면 서버가 다시 시작됩니다.

경고

클러스터 서비스를 중지하거나 서버를 다시 시작하면 클러스터 및 가용성 그룹의 쿼럼 상태에 영향을 미치고 클러스터가 오프라인 상태가 될 수 있습니다. 설치하는 동안 클러스터의 고가용성을 유지하려면 다음을 확인하세요.

  • 클러스터가 최적의 쿼럼 상태에 있습니다.
  • 노드에 핫픽스를 설치하기 전에 모든 클러스터 노드가 온라인 상태입니다.
  • 클러스터의 다른 노드에 핫픽스를 설치하기 전에 서버를 완전히 다시 시작하는 작업을 포함하여 한 노드에서 핫픽스 설치를 완료할 때까지 실행하도록 허용합니다.

가용성 그룹 노드에서 방화벽 포트 열기

이 단계에서는 부하 분산된 엔드포인트에 대한 프로브 포트(이전에 지정한 대로 59999)를 여는 방화벽 규칙과 가용성 그룹 수신기 포트를 여는 다른 규칙을 만듭니다. 가용성 그룹 복제본이 포함된 VM에 부하 분산된 엔드포인트를 만들었으므로 해당 VM에서 수신기 포트와 프로브 포트를 열어야 합니다.

  1. 복제본을 호스팅하는 VM에서 고급 보안이 포함된 Windows 방화벽을 시작합니다.

  2. 인바운드 규칙을 마우스 오른쪽 단추로 클릭한 다음 새 규칙을 클릭합니다.

  3. 규칙 유형 페이지에서 포트를 선택한 후 다음을 클릭합니다.

  4. 프로토콜 및 포트 페이지에서 TCP를 선택하고 특정 로컬 포트 상자에서 59999를 입력한 후 다음을 클릭합니다.

  5. 작업 페이지에서 연결 허용을 선택한 상태로 유지하고 다음을 클릭합니다.

  6. 프로필 페이지에서 기본 설정을 그대로 적용하고 다음을 클릭합니다.

  7. 이름 페이지의 이름 텍스트 상자에서 AlwaysOn 수신기 프로브 포트와 같은 규칙 이름을 지정한 다음 마침을 클릭합니다.

  8. 가용성 그룹 수신기 포트(이전에 스크립트의 $EndpointPort 매개 변수에서 지정된 대로)에 대해 위의 단계를 반복한 다음 AlwaysOn 수신기 포트와 같은 적절한 규칙 이름을 지정합니다.

가용성 그룹 수신기 만들기

두 단계로 가용성 그룹 수신기를 만듭니다. 먼저 클라이언트 액세스 지점 클러스터 리소스를 만들고 종속성을 구성합니다. 두 번째로, PowerShell에서 클러스터 리소스를 구성합니다.

클라이언트 액세스 지점을 만들고 클러스터 종속성을 구성합니다.

이 단계에서는 장애 조치(Failover) 클러스터 관리자와 SQL Server Management Studio에서 가용성 그룹 수신기를 수동으로 만듭니다.

  1. 주 복제본을 호스팅하는 노드에서 [장애 조치(Failover) 클러스터 관리자]를 엽니다.

  2. 네트워크 노드를 선택한 다음 클러스터 네트워크 이름을 적어둡니다. 이 이름은 PowerShell 스크립트에서 $ClusterNetworkName 변수에 사용됩니다.

  3. 클러스터 이름을 확장하고 역할을 클릭합니다.

  4. 역할 창에서 가용성 그룹 이름을 마우스 오른쪽 단추로 클릭한 다음 리소스 추가>클라이언트 액세스 지점을 차례로 선택합니다.

    가용성 그룹에 대한 클라이언트 액세스 지점 추가

  5. 이름 상자에서 이 새 수신기에 대한 이름을 입력하고, 다음을 두 번 클릭한 다음, 마침을 클릭합니다.
    현재 온라인 상태에서 수신기 또는 리소스를 가져오지 마세요.

  6. 리소스 탭을 클릭한 다음 방금 만든 클라이언트 액세스 지점을 펼칩니다. 클러스터의 각 클러스터 네트워크에 대한 IP 주소 리소스가 표시됩니다. Azure 전용 솔루션인 경우 하나의 IP 주소 리소스만 표시됩니다.

  7. 다음 중 하나를 수행합니다.

    • 하이브리드 솔루션 구성:

      a. 온-프레미스 서브넷에 해당하는 IP 주소 리소스를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다. IP 주소 이름과 네트워크 이름을 적어둡니다.

      b. 고정 IP 주소를 선택하고 사용되지 않은 IP 주소를 할당한 다음 확인을 클릭합니다.

    • Azure 전용 솔루션 구성:

      a. Azure 서브넷에 해당하는 IP 주소 리소스를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다.

      참고

      나중에 DHCP에서 선택된 IP 주소와 충돌하여 수신기가 온라인 상태가 되지 않을 경우 이 [속성] 창에서 유효한 고정 IP 주소를 구성할 수 있습니다.

      b. 같은 IP 주소 속성 창에서 IP 주소 이름을 변경합니다.
      이 이름은 PowerShell 스크립트의 $IPResourceName 변수에 사용됩니다. 솔루션이 여러 Azure 가상 네트워크에 걸쳐 있는 경우 각 IP 리소스에 대해 이 단계를 반복합니다.

PowerShell로 클러스터 리소스를 구성합니다.

  1. ILB의 경우 앞서 만든 ILB의 IP 주소를 사용해야 합니다. PowerShell에서 이 IP 주소를 가져오려면 다음 스크립트를 사용합니다.

    # Define variables
    $ServiceName="<MyServiceName>" # the name of the cloud service that contains the AG nodes
    (Get-AzureInternalLoadBalancer -ServiceName $ServiceName).IPAddress
    
  2. VM 중 하나에서 사용 중인 운영 체제의 PowerShell 스크립트를 텍스트 편집기에 복사하고 앞에서 기록한 값으로 변수를 설정합니다.

    Windows Server 2012 이상에서는 다음 스크립트를 사용합니다.

    # Define variables
    $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP address resource name
    $ILBIP = "<X.X.X.X>" # the IP address of the ILB
    
    Import-Module FailoverClusters
    
    Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
    

    Windows Server 2008 R2에서는 다음 스크립트를 사용합니다.

    # Define variables
    $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP address resource name
    $ILBIP = "<X.X.X.X>" # the IP address of the ILB
    
    Import-Module FailoverClusters
    
    cluster res $IPResourceName /priv enabledhcp=0 address=$ILBIP probeport=59999  subnetmask=255.255.255.255
    
  3. 변수를 설정한 후에는 앞으로 온 Windows PowerShell 창을 열고 텍스트 편집기의 스크립트를 복사하여 PowerShell 세션에 붙여넣어 실행합니다. 프롬프트에 >> 가 계속 표시되면 Enter를 다시 입력하여 스크립트 실행이 시작되도록 합니다.

  4. 각 VM에 대해 이전 단계를 반복합니다.
    이 스크립트는 클라우드 서비스의 IP 주소로 IP 주소 리소스를 구성하고 프로브 포트 등의 다른 매개 변수를 설정합니다. IP 주소 리소스를 온라인으로 불러올 때 앞 부분에서 부하가 분산된 엔드포인트로부터 프로브 포트에 대한 폴링에 응답할 수 있습니다.

수신기를 온라인 상태로 만들기

  1. [장애 조치(Failover) 클러스터 관리자]에서 역할을 펼친 다음 가용성 그룹을 강조 표시합니다.

  2. 리소스 탭에서 수신기 이름을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  3. 종속성 탭을 클릭합니다. 여러 리소스가 나열된 경우 IP 주소에 AND가 아닌 OR 종속성이 있는지 확인합니다.

  4. 확인을 클릭합니다.

  5. 수신기 이름을 마우스 오른쪽 단추로 클릭한 다음 온라인 상태로 전환을 클릭합니다.

  6. 수신기가 온라인 상태로 전환되면 리소스 탭에서 가용성 그룹을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

    가용성 그룹 리소스 구성

  7. 수신기 이름 리소스(IP 주소 리소스 이름이 아님)에 대한 종속성을 만든 다음 확인을 클릭합니다.

    수신기 이름에 대한 종속성 추가

  8. SQL Server Management Studio를 시작한 다음 주 복제본에 연결합니다.

  9. AlwaysOn 고가용성>가용성 그룹><AvailabilityGroupName>>가용성 그룹 수신기로 이동합니다.
    [장애 조치(Failover) 클러스터 관리자]에서 만든 수신기 이름이 표시됩니다.

  10. 수신기 이름을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  11. 포트 상자에서 이전에 사용한 $EndpointPort를 사용하여 가용성 그룹 수신기에 대한 포트 번호(이 자습서에서는 1433이 기본값임)를 지정한 다음 확인을 클릭합니다.

추가 작업 항목

가용성 그룹 수신기를 만든 후에 수신기 리소스에 대한 RegisterAllProvidersIP 및 HostRecordTTL 클러스터 매개 변수를 조정해야 할 수도 있습니다. 이러한 매개 변수는 장애 조치 후 다시 연결 시간을 줄여 연결 시간 제한을 방지할 수 있습니다. 이러한 매개 변수와 샘플 코드에 대한 자세한 내용은 가용성 그룹 수신기 만들기 또는 구성을 참조하세요.

(동일한 가상 네트워크 내)가용성 그룹 수신기 테스트

이 단계에서는 동일한 네트워크에서 실행 중인 클라이언트 애플리케이션을 사용하여 가용성 그룹 수신기를 테스트합니다.

클라이언트 연결에는 다음 요구 사항이 있습니다.

  • 수신기에 대한 클라이언트 연결은 AlwaysOn 가용성 복제본을 호스팅하는 클라우드 서비스와 다른 클라우드 서비스에 있는 컴퓨터에서 가져와야 합니다.
  • Always On 복제본이 다른 서브넷에 있는 경우 클라이언트는 연결 문자열에 MultisubnetFailover=True 를 지정해야 합니다. 이 조건은 다양한 서브넷에 있는 복제본에 대한 병렬 연결을 시도합니다. 이 시나리오에는 지역 간 AlwaysOn 가용성 그룹 배포가 포함됩니다.

하나의 예로, 동일한 Azure 가상 네트워크의 VM(하지만 복제본을 호스팅하지 않는 VM) 중 하나에서 수신기에 연결합니다. 이 테스트를 완료하는 쉬운 방법은 SQL Server Management Studio를 가용성 그룹 수신기에 연결하는 것입니다. 또 다른 간단한 방법은 다음과 같이 SQLCMD.exe실행하는 것입니다.

sqlcmd -S "<ListenerName>,<EndpointPort>" -d "<DatabaseName>" -Q "select @@servername, db_name()" -l 15

참고

EndpointPort 값이 1433이면 호출에서 이를 지정하지 않아도 됩니다. 또한 이전 호출에서는 클라이언트 컴퓨터가 동일한 도메인에 조인되어 있고 Windows 인증을 사용하여 호출자에게 데이터베이스에 대한 권한이 부여되어 있다고 가정합니다.

수신기를 테스트할 때 클라이언트에서 장애 조치를 통해 수신기에 연결할 수 있는지 확인하려면 가용성 그룹을 장애 조치해야 합니다.

다음 단계

클라이언트를 주 복제본에 자동으로 연결하는 작업 외에도, 수신기를 사용하여 읽기 전용 워크로드를 보조 복제본으로 리디렉션할 수 있습니다. 이렇게 사용하면 전체 솔루션의 성능과 확장성이 향상될 수 있습니다. 자세한 내용은 Azure AlwaysOn 가용성 그룹 수신기에서 ReadIntent 라우팅 사용(영문)을 참조하세요.

참고

Azure 수신기에 대한 문제 해결 팁은 AlwaysOn 지원 팀 블로그Azure에서 가용성 그룹 수신기 문제 해결(영문)을 참조하세요.

Azure에서 SQL Server를 사용하는 방법에 대한 자세한 내용은 Azure 가상 머신의 SQL Server를 참조하세요.