영업: 1-800-867-1380

자습서: Azure의 AlwaysOn 가용성 그룹(PowerShell)

업데이트 날짜: 2013년 10월

note참고
동일한 시나리오의 GUI 기반 자습서는 테스트 랩: Azure에서 종단 간에 AlwaysOn 가용성 그룹 만들기를 참조하십시오.

Azure VM(가상 컴퓨터)은 데이터베이스 관리자가 비용이 저렴한 고가용성 SQL Server 시스템을 구현하는 데 도움이 될 수 있습니다. 이 자습서에서는 Azure 환경 내에서 종단 간 SQL Server AlwaysOn을 사용하여 가용성 그룹을 구현하는 방법을 보여 줍니다. 자습서의 마지막에서는 Azure의 SQL Server AlwaysOn 솔루션이 다음 요소로 구성됩니다.

  • 프런트 엔드 및 백 엔드 서브넷을 비롯한 여러 서브넷을 포함하는 가상 네트워크

  • AD(Active Directory) 도메인이 포함된 도메인 컨트롤러

  • 백 엔드 서브넷에 배포되고 AD 도메인에 가입된 두 SQL Server VM

  • 노드 과반수 쿼럼 모델이 포함된 3 노드 WSFC 클러스터

  • 가용성 데이터베이스의 두 동기 커밋 복제본이 포함된 가용성 그룹

이 시나리오는 비용 효율성이나 Azure에 다른 요소를 고려하지 않고 단순성을 고려하여 선택되었습니다. 예를 들어 2 노드 WSFC 클러스터에서 도메인 컨트롤러를 쿼럼 파일 공유 감시로 사용하여 Azure에서 계산 시간을 절약하기 위해 2 복제본 가용성 그룹에 대한 VM 수를 최소화할 수 있습니다. 이 방법은 위의 구성에서 VM 수를 하나 줄입니다.

이 자습서는 각 단계의 세부 사항까지 설명하지 않고 위에 설명된 솔루션을 설정하는 데 필요한 단계를 보여 주기 위한 것입니다. 따라서 이 자습서는 GUI 구성 단계를 보여주지 않고 PowerShell 스크립팅을 사용하여 각 단계를 신속하게 안내합니다. 자습서에서는 다음과 같이 가정합니다.

  1. 로컬 컴퓨터의 PowerShell 창에서 Azure 모듈을 가져오고 게시 설정 파일을 컴퓨터에 다운로드하고 다운로드한 게시 설정을 가져와서 PowerShell 세션을 Azure 구독에 연결합니다.

    Import-Module "C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\Azure\Azure.psd1"
    Get-AzurePublishSettingsFile
    Import-AzurePublishSettingsFile <publishsettingsfilepath> 
    

    Get-AzurePublishgSettingsFile 명령은 Azure를 통해 관리 인증서를 자동으로 생성하고 컴퓨터에 다운로드합니다. 브라우저가 자동으로 열리고 Azure 구독에 대한 Microsoft 계정 자격 증명을 입력하라는 메시지가 표시됩니다. 다운로드한 .publishsettings 파일에는 Azure 구독을 관리하는 데 필요한 모든 정보가 포함되어 있습니다. 이 파일을 로컬 디렉터리에 저장한 후 Import-AzurePublishSettingsFile 명령을 사용하여 가져옵니다.

    security보안 참고
    publishsettings 파일에는 Azure 구독 및 서비스를 관리하는 데 사용되는 자격 증명(인코딩되지 않음)이 포함되어 있습니다. 이 파일에 대한 최상의 보안 방법은 이 파일을 원본 디렉터리 외부(예: Libraries\Documents 폴더)에 임시로 저장한 다음 가져오기가 완료되면 삭제하는 것입니다. publishsettings 파일에 액세스할 수 있는 악의적인 사용자는 Azure 서비스를 편집하고 만들고 삭제할 수 있습니다.

  2. 클라우드 IT 인프라를 만드는 데 사용할 일련의 변수를 정의합니다.

    $location = "West US"
    $affinityGroupName = "ContosoAG"
    $affinityGroupDescription = "Contoso SQL HADR Affinity Group"
    $affinityGroupLabel = "IaaS BI Affinity Group"
    $networkConfigPath = "C:\scripts\Network.netcfg"
    $virtualNetworkName = "ContosoNET"
    $storageAccountName = "<uniquestorageaccountname>"
    $storageAccountLabel = "Contoso SQL HADR Storage Account"
    $storageAccountContainer = "https://" + $storageAccountName + ".blob.core.windows.net/vhds/"
    $winImageName = (Get-AzureVMImage | where {$_.Label -like "Windows Server 2008 R2 SP1*"} | sort PublishedDate -Descending)[0].ImageName
    $sqlImageName = (Get-AzureVMImage | where {$_.Label -like "SQL Server 2012 SP1 Enterprise*"} | sort PublishedDate -Descending)[0].ImageName
    $dcServerName = "ContosoDC"
    $dcServiceName = "<uniqueservicename>" 
    $availabilitySetName = "SQLHADR"
    $vmAdminUser = "AzureAdmin" 
    $vmAdminPassword = "Contoso!000" 
    $workingDir = "c:\scripts\" 
    

    다음 사항에 유의하여 명령이 나중에 성공적으로 수행되도록 합니다.

    • $storageAccountName$dcServiceName 변수는 각각 인터넷에서 클라우드 저장소 계정과 클라우드 서버를 식별하는 데 사용되므로 고유해야 합니다.

    • $affinityGroupName$virtualNetworkName 변수에 지정된 이름은 나중에 사용할 가상 네트워크 구성 문서에 구성되어 있습니다.

    • $sqlImageName은 SQL Server 2012 서비스 팩 1 엔터프라이즈 버전이 포함된 VM 이미지의 업데이트된 이름을 지정합니다.

    • 간단하게 하기 위해 자습서 전체에서 사용되는 동일 암호는 Contoso!000입니다.

  3. 선호도 그룹을 만듭니다.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. 구성 파일을 가져와서 가상 네트워크를 만듭니다.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    구성 파일에는 다음과 같은 XML 문서가 들어 있습니다. 간단히 말해서 이 문서는 ContosoAG라는 선호도 그룹에 ContosoNET이라는 가상 네트워크를 지정하고 주소 공간 10.10.0.0/16을 가지고 있으며 각각 프런트 서브넷과 백 서브넷인 두 서브넷 10.10.1.0/2410.10.2.0/24를 가지고 있습니다. 프런트 서브넷은 Microsoft SharePoint와 같은 클라이언트 응용 프로그램을 배치할 수 있는 곳이며 백 서브넷은 SQL Server VM을 배치할 곳입니다. $affinityGroupName$virtualNetworkName 변수를 이전에 변경한 경우 아래의 해당 이름도 변경해야 합니다.

    <NetworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
      <VirtualNetworkConfiguration>
        <Dns />
        <VirtualNetworkSites>
          <VirtualNetworkSite name="ContosoNET" AffinityGroup="ContosoAG">
            <AddressSpace>
              <AddressPrefix>10.10.0.0/16</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name="Front">
                <AddressPrefix>10.10.1.0/24</AddressPrefix>
              </Subnet>
              <Subnet name="Back">
                <AddressPrefix>10.10.2.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>
        </VirtualNetworkSites>
      </VirtualNetworkConfiguration>
    </NetworkConfiguration>
    
  5. 만든 선호도 그룹과 연결된 저장소 계정을 만든 다음 해당 계정을 구독의 현재 저장소 계정으로 설정합니다.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName 
    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName
    
  6. 새 클라우드 서비스 및 가용성 집합에서 DC 서버를 만듭니다.

    New-AzureVMConfig `
        -Name $dcServerName `
        -InstanceSize Medium `
        -ImageName $winImageName `
        -MediaLocation "$storageAccountContainer$dcServerName.vhd" `
        -DiskLabel "OS" | 
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            New-AzureVM `
                -ServiceName $dcServiceName `
                –AffinityGroup $affinityGroupName `
                -VNetName $virtualNetworkName
    

    이러한 일련의 파이프된 명령은 다음 작업을 수행합니다.

    • New-AzureVMConfig는 VM 구성을 만듭니다.

    • Add-AzureProvisioningConfig는 독립 실행형 Windows 서버의 구성 매개 변수를 제공합니다.

    • Add-AzureDataDisk는 캐싱 옵션을 None으로 설정하여 Active Directory 데이터 저장에 사용할 데이터 디스크를 추가합니다.

    • New-AzureVM은 새 클라우드 서비스를 만들고 새 클라우드 서비스에 새 Azure VM을 만듭니다.

  7. 새 VM이 완전히 프로비전될 때까지 기다린 다음 원격 데스크톱 파일을 작업 디렉터리에 다운로드하십시오. 새 Azure VM을 프로비전하는 데 시간이 오래 걸리므로 while 루프는 새 VM을 사용할 준비가 될 때까지 계속해서 폴링합니다.

    $VMStatus = Get-AzureVM -ServiceName $dcServiceName -Name $dcServerName
    
    While ($VMStatus.InstanceStatus -ne "ReadyRole")
    {
        write-host "Waiting for " $VMStatus.Name "... Current Status = " $VMStatus.InstanceStatus
        Start-Sleep -Seconds 15
        $VMStatus = Get-AzureVM -ServiceName $dcServiceName -Name $dcServerName
    }
    
    Get-AzureRemoteDesktopFile `
        -ServiceName $dcServiceName `
        -Name $dcServerName `
        -LocalPath "$workingDir$dcServerName.rdp" 
    

DC 서버가 이제 성공적으로 프로비전되었습니다. 다음 작업으로, 이 DC 서버에서 Active Directory 도메인을 구성합니다. 로컬 컴퓨터에서 PowerShell 창을 열어 두십시오. 나중에 이 창을 다시 사용하여 두 SQL Server VM을 만들 것입니다.

  1. 원격 데스크톱 파일을 시작하여 DC 서버에 연결합니다. 새 VM을 만들 때 지정한 컴퓨터 관리자의 사용자 이름 AzureAdmin과 암호 Contoso!000을 사용합니다.

  2. 관리자 모드에서 PowerShell 창을 엽니다.

  3. 다음 DCPROMO.EXE 명령을 실행하여 드라이브 M의 데이터 디렉터리와 함께 corp.contoso.com 도메인을 설치합니다.

    dcpromo.exe `
        /unattend `
        /ReplicaOrNewDomain:Domain `
        /NewDomain:Forest `
        /NewDomainDNSName:corp.contoso.com `
        /ForestLevel:4 `
        /DomainNetbiosName:CORP `
        /DomainLevel:4 `
        /InstallDNS:Yes `
        /ConfirmGc:Yes `
        /CreateDNSDelegation:No `
        /DatabasePath:"C:\Windows\NTDS" `
        /LogPath:"C:\Windows\NTDS" `
        /SYSVOLPath:"C:\Windows\SYSVOL" `
        /SafeModeAdminPassword:"Contoso!000"
    

    명령이 완료되면 VM이 자동으로 다시 시작됩니다.

  4. 원격 데스크톱 파일을 시작하여 DC 서버에 다시 연결합니다. 이번에는 CORP\Administrator로 로그인합니다.

  5. 관리자 모드에서 PowerShell 창을 열고 다음 명령을 사용하여 Active Directory PowerShell 모듈을 가져옵니다.

    Import-Module ActiveDirectory
    
  6. 다음 명령을 실행하여 세 사용자를 도메인에 추가합니다.

    $pwd = ConvertTo-SecureString "Contoso!000" -AsPlainText -Force
    New-ADUser `
        -Name 'Install' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    New-ADUser `
        -Name 'SQLSvc1' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    New-ADUser `
        -Name 'SQLSvc2' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    

    CORP\Install은 SQL Server 서비스 인스턴스, WSFC 클러스터 및 가용성 그룹과 관련된 모든 것을 구성하는 데 사용됩니다. CORP\SQLSvc1CORP\SQLSvc2는 두 SQL Server VM에 대한 SQL Server 서비스 계정으로 사용됩니다.

  7. 다음 명령을 실행하여 도메인에서 컴퓨터 개체를 만들 수 있는 권한을 CORP\Install에 부여합니다.

    Cd ad:
    $sid = new-object System.Security.Principal.SecurityIdentifier (Get-ADUser "Install").SID
    $guid = new-object Guid bf967a86-0de6-11d0-a285-00aa003049e2
    $ace1 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"CreateChild","Allow",$guid,"All"
    $corp = Get-ADObject -Identity "DC=corp,DC=contoso,DC=com"
    $acl = Get-Acl $corp
    $acl.AddAccessRule($ace1)
    Set-Acl -Path "DC=corp,DC=contoso,DC=com" -AclObject $acl 
    

    위에서 지정한 GUID는 컴퓨터 개체 유형에 대한 GUID입니다. WSFC 클러스터를 위한 Active Directory 개체를 만들기 위해서는 CORP\Install 계정에 Read All PropertiesCreate Computer Objects 권한이 필요합니다. 기본적으로 CORP\Install에는 Read All Properties 권한이 부여되어 있으므로 명시적으로 권한을 부여할 필요가 없습니다. WSFC 클러스터를 만드는 데 필요한 권한에 대한 자세한 내용은 장애 조치(Failover) 클러스터 단계별 가이드: Active Directory에서 계정 구성을 참조하십시오.

이제 Active Directory와 사용자 개체의 구성을 마쳤으므로 두 SQL Server VM을 만들어 이 도메인에 가입시킬 것입니다.

  1. 로컬 컴퓨터에서 열려 있는 PowerShell 창을 계속 사용합니다. 다음 추가 변수를 정의하십시오.

    $domainName= "corp"
    $FQDN = "corp.contoso.com"
    $subnetName = "Back"
    $sqlServiceName = "<uniqueservicename>"
    $quorumServerName = "ContosoQuorum"
    $sql1ServerName = "ContosoSQL1"
    $sql2ServerName = "ContosoSQL2"
    $availabilitySetName = "SQLHADR"
    $dataDiskSize = 100
    $dnsSettings = New-AzureDns -Name "ContosoBackDNS" -IPAddress "10.10.0.4"
    

    일반적으로 IP 주소 10.10.0.4는 Azure 가상 네트워크의 10.10.0.0/16 서브넷에서 만드는 첫 번째 VM에 할당됩니다. IPCONFIG를 실행하여 이 주소가 DC 서버의 주소인지 확인해야 합니다.

  2. 다음 파이프된 명령을 실행하여 WSFC 클러스터에서 ContosoQuorum이라는 첫 번째 VM을 만듭니다.

    New-AzureVMConfig `
        -Name $quorumServerName `
        -InstanceSize Medium `
        -ImageName $winImageName `
        -MediaLocation "$storageAccountContainer$quorumServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -DiskLabel "OS" | 
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                New-AzureVM `
                    -ServiceName $sqlServiceName `
                    –AffinityGroup $affinityGroupName `
                    -VNetName $virtualNetworkName `
                    -DnsSettings $dnsSettings
    

    위의 명령과 관련하여 다음 사항에 유의하십시오.

    • New-AzureVMConfig는 원하는 가용성 집합 이름을 사용하여 VM 구성을 만듭니다. 다음 VM은 동일한 가용성 집합 이름을 사용하여 만들어지므로 동일한 가용성 집합에 가입됩니다.

    • Add-AzureProvisioningConfig는 만든 Active Directory 도메인에 VM을 가입시킵니다.

    • Set-AzureSubnet 서브넷에 VM을 배치합니다.

    • New-AzureVM은 새 클라우드 서비스를 만들고 새 클라우드 서비스에 새 Azure VM을 만듭니다. DnsSettings 매개 변수는 새 클라우드 서비스의 서버에 대한 DNS 서버가 DC 서버의 IP 주소인 10.10.0.4를 갖도록 지정합니다. 이 매개 변수는 클라우드 서비스의 새 VM이 Active Directory 도메인에 성공적으로 가입할 수 있도록 하는 데 필요합니다. 이 매개 변수가 없으면 VM이 프로비전된 후 DC 서버를 주 DNS 서버로 사용하도록 VM에서 IPv4 설정을 수동으로 지정한 다음 VM을 Active Directory 도메인에 가입시켜야 합니다.

  3. 다음 파이프된 명령을 실행하여 ContosoSQL1ContosoSQL2라는 SQL Server VM을 만듭니다.

    # Create ContosoSQL1...
    New-AzureVMConfig `
        -Name $sql1ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql1ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" | 
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1 `
                    -LocalPort 1433 | 
                    New-AzureVM `
                        -ServiceName $sqlServiceName
    
    # Create ContosoSQL2...
    New-AzureVMConfig `
        -Name $sql2ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql2ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" | 
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 2 `
                    -LocalPort 1433 | 
                    New-AzureVM `
                        -ServiceName $sqlServiceName
    

    위의 명령과 관련하여 다음 사항에 유의하십시오.

    • New-AzureVMConfig는 DC 서버 동일한 가용성 집합 이름을 사용하고 가상 컴퓨터 갤러리의 SQL Server 2012 서비스 팩 1 엔터프라이즈 버전 이미지를 사용합니다. 또한 운영 체제 디스크를 쓰기 캐싱이 아닌 읽기 캐싱 전용으로 설정합니다. 데이터베이스 파일을 VM에 연결하여 읽기 또는 쓰기 캐싱이 없도록 구성하는 별도의 데이터 디스크로 마이그레이션하는 것이 좋습니다. 그러나 다음으로 가장 좋은 방법은 운영 체제 디스크에 대한 읽기 캐싱을 제거할 수 없으므로 운영 체제 디스크에 대한 쓰기 캐싱을 제거하는 것입니다.

    • Add-AzureProvisioningConfig는 만든 Active Directory 도메인에 VM을 가입시킵니다.

    • Set-AzureSubnet 서브넷에 VM을 배치합니다.

    • Add-AzureEndpoint는 클라이언트 응용 프로그램이 인터넷에서 이러한 SQL Server 서비스 인스턴스에 액세스할 수 있도록 액세스 끝점을 추가합니다. ContosoSQL1ContosoSQL2에는 서로 다른 포트가 제공됩니다.

    • New-AzureVMContosoQuorum과 동일한 클라우드 서비스에서 새로운 SQL Server VM을 만듭니다. VM이 동일한 가용성 집합에 있기를 원하는 경우 VM을 같은 클라우드 서비스에 배치해야 합니다.

  4. 각 VM이 완전히 프로비전될 때까지 기다린 다음 해당 VM의 원격 데스크톱 파일을 작업 디렉터리에 다운로드하십시오. for 루프는 세 개의 새로운 VM을 순환하고 각 VM에 대한 최상위 중괄호 안의 명령을 실행합니다.

    Foreach ($VM in $VMs = Get-AzureVM -ServiceName $sqlServiceName)
    {
        write-host "Waiting for " $VM.Name "..."
    
        # Loop until the VM status is "ReadyRole"
        While ($VM.InstanceStatus -ne "ReadyRole")
        {
            write-host "  Current Status = " $VM.InstanceStatus
            Start-Sleep -Seconds 15
            $VM = Get-AzureVM -ServiceName $VM.ServiceName -Name $VM.InstanceName
        }
    
        write-host "  Current Status = " $VM.InstanceStatus
    
        # Download remote desktop file
        Get-AzureRemoteDesktopFile -ServiceName $VM.ServiceName -Name $VM.InstanceName -LocalPath "$workingDir$($VM.InstanceName).rdp"
    }
    

SQL Server VM이 이제 프로비전되어 실행되고 있지만 기본 옵션을 사용하여 SQL Server와 함께 설치되었습니다.

이 섹션에서는 WSFC 클러스터와 SQL Server 설치에서 사용할 세 서버를 수정해야 합니다. 특히 다음에 대해 주의하십시오.

  • (모든 서버) Failover Clustering 기능을 설치해야 합니다.

  • (모든 서버) CORP\Install을 컴퓨터 관리자로 추가해야 합니다.

  • (ContosoSQL1 및 ContosoSQL2만 해당) CORP\Install을 기본 데이터베이스의 sysadmin 역할로 추가해야 합니다.

  • (ContosoSQL1 및 ContosoSQL2만 해당) NT AUTHORITY\System을 다음 사용 권한을 가진 로그인으로 추가해야 합니다.

    • 가용성 그룹 변경

    • SQL 연결

    • 서버 상태 보기

  • (ContosoSQL1 및 ContosoSQL2만 해당) TCP 프로토콜은 SQL Server VM에서 이미 사용할 수 있도록 설정되어 있습니다. 그러나 SQL Server의 원격 액세스를 위해서는 방화벽을 열어야 합니다.

이제 시작할 준비가 되었습니다. ContosoQuorum부터 시작하여 다음 단계를 따르십시오.

  1. 원격 데스크톱 파일을 시작하여 ContosoQuorum에 연결합니다. VM을 만들 때 지정한 컴퓨터 관리자의 사용자 이름 AzureAdmin과 암호 Contoso!000을 사용합니다.

  2. 컴퓨터가 corp.contoso.com에 성공적으로 연결되었는지 확인합니다.

  3. SQL Server 설치가 자동화된 초기화 태스크 실행을 완료할 때까지 기다렸다가 계속 진행합니다.

  4. 관리자 모드에서 PowerShell 창을 엽니다.

  5. Windows 장애 조치(Failover) 클러스터링 기능을 설치합니다.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering 
    
  6. 로컬 관리자로 CORP\Install을 추가합니다.

    net localgroup administrators "CORP\Install" /Add
    
  7. ContosoQuorum에서 로그아웃합니다. 이제 이 서버에서 작업을 완료했습니다.

    logoff.exe 
    

다음 작업으로, ContosoSQL1ContosoSQL2를 초기화합니다. 다음 단계를 따르십시오. 다음 단계는 두 SQL Server VM에 동일하게 적용됩니다.

  1. 원격 데스크톱 파일을 시작하여 두 SQL Server VM에 연결합니다. VM을 만들 때 지정한 컴퓨터 관리자의 사용자 이름 AzureAdmin과 암호 Contoso!000을 사용합니다.

  2. 컴퓨터가 corp.contoso.com에 성공적으로 연결되었는지 확인합니다.

  3. SQL Server 설치가 자동화된 초기화 태스크 실행을 완료할 때까지 기다렸다가 계속 진행합니다.

  4. 관리자 모드에서 PowerShell 창을 엽니다.

  5. Windows 장애 조치(Failover) 클러스터링 기능을 설치합니다.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering 
    
  6. 로컬 관리자로 CORP\Install을 추가합니다.

    net localgroup administrators "CORP\Install" /Add
    
  7. SQL Server PowerShell 공급자를 가져옵니다.

    Set-ExecutionPolicy -Execution RemoteSigned -Force
    Import-Module -Name "sqlps" -DisableNameChecking
    
  8. 기본 SQL Server 인스턴스에 대한 sysadmin 역할로 CORP\Install을 추가합니다.

    net localgroup administrators "CORP\Install" /Add
    Invoke-SqlCmd -Query "EXEC sp_addsrvrolemember 'CORP\Install', 'sysadmin'" -ServerInstance "."
    
  9. NT AUTHORITY\System을 위에서 설명한 세 가지 사용 권한을 가진 로그인으로 추가합니다.

    Invoke-SqlCmd -Query "CREATE LOGIN [NT AUTHORITY\SYSTEM] FROM WINDOWS" -ServerInstance "."
    Invoke-SqlCmd -Query "GRANT ALTER ANY AVAILABILITY GROUP TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "." 
    Invoke-SqlCmd -Query "GRANT CONNECT SQL TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "."
    Invoke-SqlCmd -Query "GRANT VIEW SERVER STATE TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "."
    
  10. SQL Server의 원격 액세스를 위해 방화벽을 엽니다.

    netsh advfirewall firewall add rule name='SQL Server (TCP-In)' program='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe' dir=in action=allow protocol=TCP
    
  11. 두 VM에서 로그아웃합니다.

    logoff.exe
    

이제 가용성 그룹을 구성할 준비가 되었습니다. SQL Server PowerShell 공급자를 사용하여 ContosoSQL1의 모든 작업을 수행할 수 있습니다.

  1. 원격 데스크톱 파일을 시작하여 ContosoSQL1에 다시 연결합니다. 컴퓨터 계정을 사용하여 로그인하는 대신 CORP\Install을 사용하여 로그인합니다.

  2. 관리자 모드에서 PowerShell 창을 엽니다.

  3. 다음 변수를 정의합니다.

    $server1 = "ContosoSQL1"
    $server2 = "ContosoSQL2"
    $serverQuorum = "ContosoQuorum"
    $acct1 = "CORP\SQLSvc1"
    $acct2 = "CORP\SQLSvc2"
    $password = "Contoso!000"
    $clusterName = "Cluster1"
    $timeout = New-Object System.TimeSpan -ArgumentList 0, 0, 30
    $db = "MyDB1"
    $backupShare = "\\$server1\backup"
    $quorumShare = "\\$server1\quorum"
    $ag = "AG1" 
    
  4. SQL Server PowerShell 공급자를 가져옵니다.

    Set-ExecutionPolicy RemoteSigned -Force
    Import-Module "sqlps" -DisableNameChecking
    
  5. ContosoSQL1의 SQL Server 서비스 계정을 CORP\SQLSvc1로 변경합니다.

    $wmi1 = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $server1
    $wmi1.services | where {$_.Type -eq 'SqlServer'} | foreach{$_.SetServiceAccount($acct1,$password)}
    $svc1 = Get-Service -ComputerName $server1 -Name 'MSSQLSERVER'
    $svc1.Stop()
    $svc1.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc1.Start(); 
    $svc1.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  6. ContosoSQL2의 SQL Server 서비스 계정을 CORP\SQLSvc2로 변경합니다.

    $wmi2 = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $server2
    $wmi2.services | where {$_.Type -eq 'SqlServer'} | foreach{$_.SetServiceAccount($acct2,$password)}
    $svc2 = Get-Service -ComputerName $server2 -Name 'MSSQLSERVER'
    $svc2.Stop()
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc2.Start(); 
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  7. Azure VM의 AlwaysOn 가용성 그룹을 위한 WSFC 클러스터 만들기에서 CreateAzureFailoverCluster.ps1을 로컬 작업 디렉터리로 다운로드합니다. 이 스크립트를 사용하면 기능 WSFC 클러스터를 만드는 데 도움이 됩니다. WSFC가 Azure 네트워크와 상호 작용하는 방법에 중요한 내용은 Azure 가상 컴퓨터의 SQL Server에 대한 고가용성 및 재해 복구를 참조하십시오.

  8. 작업 디렉터리로 변경하고 다운로드한 스크립트를 사용하여 WSFC 클러스터를 만듭니다.

    Set-ExecutionPolicy Unrestricted -Force
    .\CreateAzureFailoverCluster.ps1 -ClusterName "$clusterName" -ClusterNode "$server1","$server2","$serverQuorum"
    
  9. ContosoSQL1ContosoSQL2에서 기본 SQL Server 인스턴스의 AlwaysOn 가용성 그룹을 사용하도록 설정합니다.

    Enable-SqlAlwaysOn `
        -Path SQLSERVER:\SQL\$server1\Default `
        -Force
    Enable-SqlAlwaysOn `
        -Path SQLSERVER:\SQL\$server2\Default `
        -NoServiceRestart
    $svc2.Stop()
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc2.Start(); 
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  10. 백업 디렉터리를 만들고 SQL Server 서비스 계정에 대한 사용 권한을 부여합니다. 이 디렉터리를 사용하여 보조 복제본에서 가용성 데이터베이스를 준비할 것입니다.

    $backup = "C:\backup"
    New-Item $backup -ItemType directory
    net share backup=$backup "/grant:$acct1,FULL" "/grant:$acct2,FULL"
    icacls.exe "$backup" /grant:r ("$acct1" + ":(OI)(CI)F") ("$acct2" + ":(OI)(CI)F") 
    
  11. ContosoSQL1에서 MyDB1이라는 데이터베이스를 만들고, 전체 백업과 로그 백업 둘 다를 가져와서, WITH NORECOVERY 옵션을 사용하여 ContosoSQL2에서 백업을 복원합니다.

    Invoke-SqlCmd -Query "CREATE database $db"
    Backup-SqlDatabase -Database $db -BackupFile "$backupShare\db.bak" -ServerInstance $server1
    Backup-SqlDatabase -Database $db -BackupFile "$backupShare\db.log" -ServerInstance $server1 -BackupAction Log
    Restore-SqlDatabase -Database $db -BackupFile "$backupShare\db.bak" -ServerInstance $server2 -NoRecovery
    Restore-SqlDatabase -Database $db -BackupFile "$backupShare\db.log" -ServerInstance $server2 -RestoreAction Log -NoRecovery 
    
  12. SQL Server VM에서 가용성 그룹 끝점을 만들고 끝점에 대한 적절한 권한을 설정합니다.

    $endpoint = 
        New-SqlHadrEndpoint MyMirroringEndpoint `
        -Port 5022 `
        -Path "SQLSERVER:\SQL\$server1\Default"
    Set-SqlHadrEndpoint `
        -InputObject $endpoint `
        -State "Started"
    $endpoint = 
        New-SqlHadrEndpoint MyMirroringEndpoint `
        -Port 5022 `
        -Path "SQLSERVER:\SQL\$server2\Default"
    Set-SqlHadrEndpoint `
        -InputObject $endpoint `
        -State "Started"
    
    Invoke-SqlCmd -Query "CREATE LOGIN [$acct2] FROM WINDOWS" -ServerInstance $server1
    Invoke-SqlCmd -Query "GRANT CONNECT ON ENDPOINT::[MyMirroringEndpoint] TO [$acct2]" -ServerInstance $server1
    Invoke-SqlCmd -Query "CREATE LOGIN [$acct1] FROM WINDOWS" -ServerInstance $server2
    Invoke-SqlCmd -Query "GRANT CONNECT ON ENDPOINT::[MyMirroringEndpoint] TO [$acct1]" -ServerInstance $server2 
    
  13. 가용성 복제본을 만듭니다.

    $primaryReplica = 
        New-SqlAvailabilityReplica `
        -Name $server1 `
        -EndpointURL "TCP://$server1.corp.contoso.com:5022" `
        -AvailabilityMode "SynchronousCommit" `
        -FailoverMode "Automatic" `
        -Version 11 `
        -AsTemplate
    $secondaryReplica = 
        New-SqlAvailabilityReplica `
        -Name $server2 `
        -EndpointURL "TCP://$server2.corp.contoso.com:5022" `
        -AvailabilityMode "SynchronousCommit" `
        -FailoverMode "Automatic" `
        -Version 11 `
        -AsTemplate 
    
  14. 마지막으로 가용성 그룹을 만들고 보조 복제본을 가용성 그룹에 조인합니다.

    New-SqlAvailabilityGroup `
        -Name $ag `
        -Path "SQLSERVER:\SQL\$server1\Default" `
        -AvailabilityReplica @($primaryReplica,$secondaryReplica) `
        -Database $db
    Join-SqlAvailabilityGroup `
        -Path "SQLSERVER:\SQL\$server2\Default" `
        -Name $ag
    Add-SqlAvailabilityDatabase `
        -Path "SQLSERVER:\SQL\$server2\Default\AvailabilityGroups\$ag" `
        -Database $db
    

이제 Azure에서 가용성 그룹을 만들어 SQL Server AlwaysOn을 성공적으로 구현했습니다. 이 가용성 그룹의 수신기를 구성하려면 Tutorial: Listener Configuration for AlwaysOn Availability Groups in Azure을 참조하십시오.

이 정보가 도움이 되었습니까?
(1500자 남음)
의견을 주셔서 감사합니다.
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft