Azure SQL Server VM에서 가용성 그룹에 대한 외부 수신기 구성
이 항목에서는 외부에서 인터넷에 액세스할 수 있는 Always On 가용성 그룹에 대해 수신기를 구성하는 방법을 보여줍니다. 수신기를 구성하려면 클라우드 서비스의 공용 VIP(가상 IP) 주소를 수신기와 연결해야 합니다.
중요
Azure에는 리소스를 만들고 사용하기 위한 Resource Manager 및 클래식이라는 두 가지 배포 모델이 있습니다. 이 문서에서는 클래식 배포 모델 사용에 대해 설명합니다. 새로운 배포는 대부분 리소스 관리자 모델을 사용하는 것이 좋습니다.
가용성 그룹은 온-프레미스 전용, Azure 전용 또는 하이브리드 구성에 대한 온-프레미스와 Azure 모두에 걸쳐 있는 복제본을 포함할 수 있습니다. Azure 복제본은 동일한 지역 내 또는 여러 Vnet(가상 네트워크)을 사용하 여 여러 지역에 걸쳐 있을 수 있습니다. 다음 단계에서는 가용성 그룹을 구성했지만 수신기는 구성하지 않았다고 가정합니다.
외부 수신기에 대한 지침 및 제한 사항
클라우드 서비스 공용 VIP 주소를 사용하여 배포할 경우 Azure의 가용성 그룹 수신기에 다음과 같은 지침이 적용됩니다.
- 가용성 그룹 수신기는 Windows Server 2008 R2, Windows Server 2012 및 Windows Server 2012 R2에서 지원됩니다.
- 클라이언트 애플리케이션은 가용성 그룹 VM이 포함된 것과는 다른 클라우드 서비스에 있어야 합니다. Azure는 동일한 클라우드 서비스에 있는 클라이언트 및 서버에서의 직접 서버 반환을 지원하지 않습니다.
- 이 문서의 단계는 기본적으로 클라우드 서비스 VIP(가상 IP) 주소를 사용하도록 하나의 수신기를 구성하는 방법을 보여 줍니다. 그러나 클라우드 서비스에 대한 여러 VIP 주소를 예약하고 만들 수 있습니다. 이렇게 하면 이 문서의 단계를 사용하여 각각 다른 VIP와 연결된 여러 수신기를 만들 수 있습니다. 여러 VIP 주소를 만드는 방법에 대한 자세한 내용은 클라우드 서비스당 여러 VIP를 참조하세요.
- 하이브리드 환경에 대한 수신기를 만드는 경우 온-프레미스 네트워크에 Azure 가상 네트워크와 사이트-사이트 VPN뿐 아니라 공용 인터넷에 대한 연결이 있어야 합니다. Azure 서브넷에 있을 때 가용성 그룹 수신기는 해당 클라우드 서비스의 공용 IP 주소를 통해서만 연결할 수 있습니다.
- ILB(내부 부하 분산 장치)를 사용하여 내부 수신기도 있는 동일한 클라우드 서비스에서 외부 수신기를 만들 수는 없습니다.
수신기의 액세스 가능 여부 확인
Azure에서 가용성 그룹 수신기를 구성하는 경우 두 가지 방법을 사용하는 것을 고려해야 합니다. 이러한 방법은 수신기를 만들 때 사용하는 Azure 부하 분산 장치의 유형에 따라 달라집니다. 다음 표에 차이점이 나와 있습니다.
부하 분산 장치 유형 | 구현 | 사용하는 경우: |
---|---|---|
외부 | VM(가상 머신)을 호스팅하는 클라우드 서비스의 공용 가상 IP 주소를 사용합니다. | 인터넷을 포함하여 가상 네트워크의 외부에서 수신기에 액세스해야 합니다. |
내부 | 수신기에 대한 프라이빗 주소가 있는 내부 부하 분산 장치를 사용합니다. | 동일한 가상 네트워크 내에서만 수신기에 액세스할 수 있습니다. 이 액세스에는 하이브리드 시나리오의 사이트 간 VPN이 포함됩니다. |
중요
클라우드 서비스의 공용 VIP(외부 부하 분산 장치)를 사용하는 수신기의 경우 클라이언트, 수신기, 데이터베이스가 동일한 Azure 지역에 있을 때는 송신 비용이 발생하지 않습니다. 그렇지 않은 경우 수신기를 통해 반환된 데이터는 송신으로 간주되며 정상적인 데이터 전송 요금으로 청구됩니다.
ILB는 지역 범위의 가상 네트워크에서만 구성할 수 있습니다. 선호도 그룹에 대해 구성된 기존 가상 네트워크는 ILB를 사용할 수 없습니다. 자세한 내용은 내부 부하 분산 장치 개요를 참조하세요.
이 문서에서는 외부 부하 분산을 사용하는 수신기를 만드는 데 중점을 둡니다. 가상 네트워크에 대한 프라이빗 수신기를 만들려면 ILB를 사용하여 수신기를 설정하는 단계를 제공하는 이 문서의 버전을 참조하세요.
직접 서버 반환이 있는 부하 분산 VM 엔드포인트 만들기
외부 부하 분산에서는 VM을 호스팅하는 클라우드 서비스의 공용 가상 IP 주소를 사용합니다. 따라서 이 경우에는 부하 분산 장치를 만들거나 구성할 필요가 없습니다.
Azure 복제본을 호스트하는 각 VM에 대해 부하가 분산된 엔드포인트를 만들어야 합니다. 여러 지역에 복제본이 있는 경우 해당 지역에 대한 각 복제본은 동일한 VNet의 동일한 클라우드 서비스에 있어야 합니다. 여러 Azure 지역에 걸쳐 있는 가용성 그룹 복제본을 만들려면 여러 VNet을 구성해야 합니다. VNet 간 연결 구성에 대한 자세한 내용은 VNet 간 연결 구성을 참조하세요.
Azure 포털에서 복제본을 호스트하는 각 VM으로 이동하고 세부 정보를 봅니다.
각 VM에 대한 엔드포인트 탭을 클릭합니다.
사용하려는 수신기 엔드포인트의 이름 및 공용 포트가 이미 사용되고 있지 않은지 확인합니다. 아래 예제에서는 이름이 "MyEndpoint"이고 포트는 "1433"입니다.
로컬 클라이언트에서 최신 PowerShell 모듈을 다운로드하여 설치합니다.
Azure PowerShell을 시작합니다. 새 PowerShell 세션이 Azure 관리 모듈이 로드된 상태로 열립니다.
Get-AzurePublishSettingsFile을 실행합니다. 이 cmdlet은 게시 설정 파일을 로컬 디렉터리에 다운로드하도록 브라우저로 안내합니다. Azure 구독에 대한 로그인 자격 증명을 묻는 메시지가 표시될 수 있습니다.
다운로드한 게시 설정 파일의 경로와 함께 Import-AzurePublishSettingsFile 명령을 사용합니다.
Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>
게시 설정 파일을 가져오면 PowerShell 세션에서 Azure 구독을 관리할 수 있습니다.
아래의 PowerShell 스크립트를 텍스트 편집기에 복사하고 사용자 환경에 맞게 변수 값을 설정합니다(일부 매개 변수에 대한 기본값 제공). 가용성 그룹에 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 # Configure a load balanced endpoint for each node in $AGNodes, with direct server return enabled ForEach ($node in $AGNodes) { Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name "ListenerEndpoint" -Protocol "TCP" -PublicPort 1433 -LocalPort 1433 -LBSetName "ListenerEndpointLB" -ProbePort 59999 -ProbeProtocol "TCP" -DirectServerReturn $true | Update-AzureVM }
변수를 설정한 후에는 텍스트 편집기에서 해당 스크립트를 Azure PowerShell 세션에 복사하여 실행합니다. 프롬프트에 여전히 >>가 표시되면 다시 Enter 키를 눌러 스크립트가 실행되기 시작하도록 합니다.
필요한 경우 KB2854082가 설치되었는지 확인합니다.
다음으로, 클러스터에서 Windows Server 2008 R2 또는 Windows Server 2012를 실행하는 서버가 있는 경우 각각의 온-프레미스 서버 또는 해당 클러스터에 속하는 Azure VM에 핫픽스 KB2854082 가 설치되어 있는지 확인해야 합니다. 클러스터에 있지만 가용성 그룹에 없는 서버 또는 VM에도 이 핫픽스를 설치해야 합니다.
각 클러스터 노드에 대한 원격 데스크톱 세션에서 로컬 디렉터리에 KB2854082 를 다운로드합니다. 그런 다음 각 클러스터 노드에 핫픽스를 순차적으로 설치합니다. 클러스터 서비스가 클러스터 노드에서 현재 실행 중인 경우 핫픽스 설치가 끝나면 서버가 다시 시작됩니다.
경고
클러스터 서비스를 중지하거나 서버를 다시 시작하면 클러스터 및 가용성 그룹의 쿼럼 상태에 영향을 미치고 클러스터가 오프라인 상태가 될 수 있습니다. 설치하는 동안 클러스터의 고가용성을 유지하려면 다음을 확인하세요.
- 클러스터가 최적의 쿼럼 상태에 있습니다.
- 노드에 핫픽스를 설치하기 전에 모든 클러스터 노드가 온라인 상태입니다.
- 클러스터의 다른 노드에 핫픽스를 설치하기 전에 서버를 완전히 다시 시작하는 작업을 포함하여 한 노드에서 핫픽스 설치를 완료할 때까지 실행하도록 허용합니다.
가용성 그룹 노드에서 방화벽 포트 열기
이 단계에서는 부하 분산된 엔드포인트에 대한 프로브 포트(이전에 지정한 대로 59999)를 여는 방화벽 규칙과 가용성 그룹 수신기 포트를 여는 다른 규칙을 만듭니다. 가용성 그룹 복제본이 포함된 VM에 부하 분산된 엔드포인트를 만들었으므로 해당 VM에서 수신기 포트와 프로브 포트를 열어야 합니다.
복제본을 호스팅하는 VM에서 고급 보안이 포함된 Windows 방화벽을 시작합니다.
인바운드 규칙을 마우스 오른쪽 단추로 클릭한 다음 새 규칙을 클릭합니다.
규칙 유형 페이지에서 포트를 선택한 후 다음을 클릭합니다.
프로토콜 및 포트 페이지에서 TCP를 선택하고 특정 로컬 포트 상자에서 59999를 입력한 후 다음을 클릭합니다.
작업 페이지에서 연결 허용을 선택한 상태로 유지하고 다음을 클릭합니다.
프로필 페이지에서 기본 설정을 그대로 적용하고 다음을 클릭합니다.
이름 페이지의 이름 텍스트 상자에서 AlwaysOn 수신기 프로브 포트와 같은 규칙 이름을 지정한 다음 마침을 클릭합니다.
가용성 그룹 수신기 포트(이전에 스크립트의 $EndpointPort 매개 변수에서 지정된 대로)에 대해 위의 단계를 반복한 다음 AlwaysOn 수신기 포트와 같은 적절한 규칙 이름을 지정합니다.
가용성 그룹 수신기 만들기
두 단계로 가용성 그룹 수신기를 만듭니다. 먼저 클라이언트 액세스 지점 클러스터 리소스를 만들고 종속성을 구성합니다. 두번째로, PowerShell로 클러스터 리소스를 구성합니다.
클라이언트 액세스 지점을 만들고 클러스터 종속성을 구성합니다.
이 단계에서는 장애 조치(Failover) 클러스터 관리자와 SQL Server Management Studio에서 가용성 그룹 수신기를 수동으로 만듭니다.
주 복제본을 호스팅하는 노드에서 [장애 조치(Failover) 클러스터 관리자]를 엽니다.
네트워크 노드를 선택한 다음 클러스터 네트워크 이름을 적어둡니다. 이 이름은 PowerShell 스크립트에서 $ClusterNetworkName 변수에 사용됩니다.
클러스터 이름을 확장하고 역할을 클릭합니다.
역할 창에서 가용성 그룹 이름을 마우스 오른쪽 단추로 클릭한 다음 리소스 추가>클라이언트 액세스 지점을 차례로 선택합니다.
이름 상자에서 이 새 수신기에 대한 이름을 입력하고, 다음을 두 번 클릭한 다음, 마침을 클릭합니다.
현재 온라인 상태에서 수신기 또는 리소스를 가져오지 마세요.리소스 탭을 클릭한 다음 방금 만든 클라이언트 액세스 지점을 펼칩니다. 클러스터의 각 클러스터 네트워크에 대한 IP 주소 리소스가 표시됩니다. Azure 전용 솔루션인 경우 하나의 IP 주소 리소스만 표시됩니다.
다음 중 하나를 수행합니다.
하이브리드 솔루션 구성:
a. 온-프레미스 서브넷에 해당하는 IP 주소 리소스를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다. IP 주소 이름과 네트워크 이름을 적어둡니다.
b. 고정 IP 주소를 선택하고 사용되지 않은 IP 주소를 할당한 다음 확인을 클릭합니다.
Azure 전용 솔루션 구성:
a. Azure 서브넷에 해당하는 IP 주소 리소스를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다.
참고
나중에 DHCP에서 선택된 IP 주소와 충돌하여 수신기가 온라인 상태가 되지 않을 경우 이 [속성] 창에서 유효한 고정 IP 주소를 구성할 수 있습니다.
b. 같은 IP 주소 속성 창에서 IP 주소 이름을 변경합니다.
이 이름은 PowerShell 스크립트의 $IPResourceName 변수에 사용됩니다. 솔루션이 여러 Azure 가상 네트워크에 걸쳐 있는 경우 각 IP 리소스에 대해 이 단계를 반복합니다.
PowerShell로 클러스터 리소스를 구성합니다.
외부 부하 분산에서는 복제본을 포함하는 클라우드 서비스의 공용 가상 IP 주소를 구해야 합니다. Azure Portal에 로그인합니다. 가용성 그룹 VM이 포함된 클라우드 서비스로 이동합니다. 대시보드 뷰를 엽니다.
공용 VIP(가상 IP) 주소 아래에 표시된 주소를 적어 둡니다. 솔루션이 Vnet에 걸쳐 있으면 복제본을 호스팅하는 VM이 포함된 각 클라우드 서비스에 대해 이 단계를 반복합니다.
VM 중 하나에서 아래의 PowerShell 스크립트를 텍스트 편집기에 복사하 고 앞에서 기록한 값으로 변수를 설정합니다.
# Define variables $ClusterNetworkName = "<ClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name) $IPResourceName = "<IPResourceName>" # the IP Address resource name $CloudServiceIP = "<X.X.X.X>" # Public Virtual IP (VIP) address of your cloud service Import-Module FailoverClusters # If you are using Windows Server 2012 or higher, use the Get-Cluster Resource command. If you are using Windows Server 2008 R2, use the cluster res command. Both commands are commented out. Choose the one applicable to your environment and remove the # at the beginning of the line to convert the comment to an executable line of code. # Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$CloudServiceIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"OverrideAddressMatch"=1;"EnableDhcp"=0} # cluster res $IPResourceName /priv enabledhcp=0 overrideaddressmatch=1 address=$CloudServiceIP probeport=59999 subnetmask=255.255.255.255
변수를 설정한 후에는 앞으로 온 Windows PowerShell 창을 열고 텍스트 편집기의 스크립트를 복사하여 Azure PowerShell 세션에 붙여넣어 실행합니다. 프롬프트에 여전히 >>가 표시되면 다시 Enter 키를 눌러 스크립트가 실행되기 시작하도록 합니다.
각 VM에서 이 작업을 반복합니다. 이 스크립트는 클라우드 서비스의 IP 주소로 IP 주소 리소스를 구성하고 프로프 포트 등의 다른 매개 변수를 설정합니다. IP 주소 리소스를 온라인으로 불러올 때 이 자습서의 앞 부분에서 부하 분산된 엔드포인트로부터 프로브 포트에 대한 폴링에 응답할 수 있습니다.
수신기를 온라인 상태로 만들기
[장애 조치(Failover) 클러스터 관리자]에서 역할을 펼친 다음 가용성 그룹을 강조 표시합니다.
리소스 탭에서 수신기 이름을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
종속성 탭을 클릭합니다. 여러 리소스가 나열된 경우 IP 주소에 AND가 아닌 OR 종속성이 있는지 확인합니다.
확인을 클릭합니다.
수신기 이름을 마우스 오른쪽 단추로 클릭한 다음 온라인 상태로 전환을 클릭합니다.
수신기가 온라인 상태로 전환되면 리소스 탭에서 가용성 그룹을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
수신기 이름 리소스(IP 주소 리소스 이름이 아님)에 대한 종속성을 만든 다음 확인을 클릭합니다.
SQL Server Management Studio를 시작한 다음 주 복제본에 연결합니다.
AlwaysOn 고가용성>가용성 그룹><AvailabilityGroupName>>가용성 그룹 수신기로 이동합니다.
[장애 조치(Failover) 클러스터 관리자]에서 만든 수신기 이름이 표시됩니다.수신기 이름을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
포트 상자에서 이전에 사용한 $EndpointPort를 사용하여 가용성 그룹 수신기에 대한 포트 번호(이 자습서에서는 1433이 기본값임)를 지정한 다음 확인을 클릭합니다.
추가 작업 항목
가용성 그룹 수신기를 만든 후에 수신기 리소스에 대한 RegisterAllProvidersIP 및 HostRecordTTL 클러스터 매개 변수를 조정해야 할 수도 있습니다. 이러한 매개 변수는 장애 조치 후 다시 연결 시간을 줄여 연결 시간 제한을 방지할 수 있습니다. 이러한 매개 변수와 샘플 코드에 대한 자세한 내용은 가용성 그룹 수신기 만들기 또는 구성을 참조하세요.
(동일한 VNet 내)가용성 그룹 수신기 테스트
이 단계에서는 동일한 네트워크에서 실행 중인 클라이언트 애플리케이션을 사용하여 가용성 그룹 수신기를 테스트합니다.
클라이언트 연결에는 다음 요구 사항이 있습니다.
- 수신기에 대한 클라이언트 연결은 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 인증을 사용하여 호출자에게 데이터베이스에 대한 권한이 부여되어 있다고 가정합니다.
수신기를 테스트할 때 클라이언트에서 장애 조치를 통해 수신기에 연결할 수 있는지 확인하려면 가용성 그룹을 장애 조치해야 합니다.
(인터넷을 통해)가용성 그룹 수신기 테스트
가상 네트워크 외부에서 수신기에 액세스하려면 동일한 VNet 내에서만 액세스할 수 있는 ILB 대신 외부/공용 부하 분산(이 항목에서 설명)을 사용해야 합니다. 연결 문자열에서 클라우드 서비스 이름을 지정합니다. 예를 들어 이름이 mycloudservice인 클라우드 서비스가 있는 경우 sqlcmd 문은 다음과 같습니다.
sqlcmd -S "mycloudservice.cloudapp.net,<EndpointPort>" -d "<DatabaseName>" -U "<LoginId>" -P "<Password>" -Q "select @@servername, db_name()" -l 15
앞의 예와 달리 호출자가 인터넷을 통해 windows 인증을 사용할 수 없으므로 SQL 인증을 사용해야 합니다. 자세한 내용은 Azure VM의 Always On 가용성 그룹: 클라이언트 연결 시나리오를 참조하세요. SQL 인증을 사용할 때는 두 복제본에서 동일한 로그인을 만들 수 있는지 확인합니다. 가용성 그룹 로그인 문제 해결에 대한 자세한 내용은 로그인 매핑 또는 포함된 SQL 데이터베이스 사용자를 통해 다른 복제본에 연결하고 가용성 데이터베이스에 매핑하는 방법을 참조하세요.
Always On 복제본이 다른 서브넷에 있는 경우 클라이언트는 연결 문자열에 MultisubnetFailover=True 를 지정해야 합니다. 그러면 다른 서브넷에 있는 복제본에 대한 병렬 연결을 시도합니다. 이 시나리오에는 영역 간 Always On 가용성 그룹 배포가 포함되어 있습니다.
다음 단계
클라이언트를 주 복제본에 자동으로 연결하는 작업 외에도, 수신기를 사용하여 읽기 전용 워크로드를 보조 복제본으로 리디렉션할 수 있습니다. 이렇게 사용하면 전체 솔루션의 성능과 확장성이 향상될 수 있습니다. 자세한 내용은 Azure AlwaysOn 가용성 그룹 수신기에서 ReadIntent 라우팅 사용(영문)을 참조하세요.
참고
Azure 수신기에 대한 문제 해결 팁은 AlwaysOn 지원 팀 블로그의 Azure에서 가용성 그룹 수신기 문제 해결(영문)을 참조하세요.
Azure에서 SQL Server를 사용하는 방법에 대한 자세한 내용은 Azure 가상 머신의 SQL Server를 참조하세요.