SQL Server AlwaysOn 가용성 그룹 구성

Compute Engine에서 여러 SQL Server Enterprise 인스턴스를 실행하는 경우 Windows Server 장애 조치(Failover) 클러스터링 및 SQL Server AlwaysOn 가용성 그룹을 사용하여 고가용성과 재해 복구를 지원하도록 인스턴스를 구성할 수 있습니다.

이 가이드에서는 필요한 네트워크 설정과 함께 SQL Server Enterprise를 사용하여 인스턴스의 클러스터를 만드는 방법과 Windows Server 장애 조치(Failover) 클러스터링 및 SQL Server AlwaysOn 가용성 그룹을 사용하도록 인스턴스를 구성하는 방법을 보여줍니다. SQL Server 공개 이미지 또는 Microsoft License Mobility에서 만든 SQL Server Enterprise 인스턴스를 사용할 수 있습니다.

선행 조건

이 가이드에서는 다음 항목을 이해하고 있다고 가정합니다.

VPC 네트워크 설정

세 개의 서브넷이 있는 커스텀 모드 VPC 네트워크를 만듭니다. 그런 다음 내부 가상 머신 간 트래픽을 허용하도록 방화벽 규칙을 설정합니다. 필요한 경우 이 작업에 기존 네트워크를 사용할 수 있지만, 다른 네트워크와 서브넷으로 시스템을 분리하는 것이 좋습니다. 이 가이드에서는 다음 VPC 네트워크 및 서브넷 구성을 만든다고 예상합니다.

  1. 커스텀 모드 VPC 네트워크를 만듭니다.

    gcloud compute networks create wsfcnet --subnet-mode custom
    
  2. 세 개의 서브넷을 VPC 네트워크에 추가합니다.

    gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \
    --region us-central1 --range 10.0.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \
    --region us-central1 --range 10.1.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \
    --region us-central1 --range 10.2.0.0/24
    
  3. 새 VPC 네트워크의 내부 IP 주소에 있는 인스턴스 간 트래픽을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create allow-internal-ports \
    --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \
    --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
    
  4. VPC 네트워크의 3389 포트에서 RDP를 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create allow-rdp --network wsfcnet \
    --allow tcp:3389 --source-ranges 0.0.0.0/0
    

Windows 도메인 컨트롤러 만들기

Windows 도메인 컨트롤러를 만듭니다. 이 가이드에서 도메인은 dbeng.com이며, 도메인 컨트롤러의 이름은 IP 주소 10.2.0.100에 있는 dc-windows입니다. 도메인 컨트롤러는 wsfcsubnet3 서브넷을 사용합니다.

  1. 도메인 컨트롤러로 사용할 인스턴스를 만듭니다. 이 가이드의 경우 소형 n1-standard-2 머신 유형과 windows-2016 이미지 계열의 최신 이미지를 지정합니다.

    gcloud compute instances create dc-windows --machine-type n1-standard-2 \
    --boot-disk-type pd-ssd --image-project windows-cloud \
    --image-family windows-2016 --boot-disk-size 200GB \
    --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
    
  2. 로컬 계정을 사용하여 도메인 컨트롤러 VM에 연결할 수 있도록 비밀번호를 생성합니다. 나중에 사용할 수 있도록 사용자 이름과 비밀번호를 기록해 둡니다.

  3. RDP를 사용하여 로컬 계정 사용자 이름과 비밀번호로 도메인 컨트롤러 VM에 연결합니다.

  4. 인스턴스에서 관리자 권한으로 PowerShell을 실행하여 PowerShell 터미널을 엽니다.

  5. 관리자 사용자를 설정합니다.

    1. 다음 명령어를 실행한 다음 관리자 계정에 사용할 비밀번호를 입력합니다.

      PS C:\> $Password = Read-Host -AsSecureString
      

      입력한 비밀번호를 기록해 둡니다. 관리자 계정에 이 비밀번호를 사용합니다.

    2. 관리자 계정 비밀번호를 설정합니다.

      PS C:\> Set-LocalUser -Name Administrator -Password $Password
      
    3. 관리자 계정을 사용 설정합니다.

      PS C:\> Enable-LocalUser -Name Administrator
      
  6. 다음 변수를 설정합니다.

    PS C:\> $DomainName = "dbeng.com";
    
    PS C:\> $DomainMode = "Win2012R2";
    
    PS C:\> $ForestMode = "Win2012R2";
    
    PS C:\> $DatabasePath = "C:\Windows\NTDS";
    
    PS C:\> $LogPath = "C:\Windows\NTDS";
    
    PS C:\> $SysvolPath = "C:\Windows\SYSVOL";
    
  7. 다음 Active Directory 도구를 설치합니다.

    PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
    PS C:\> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
    
  8. 도메인을 만든 후 인스턴스가 자동으로 다시 시작되지 않으면 인스턴스를 수동으로 다시 시작합니다.

  9. 인스턴스가 다시 시작되면 새로 만든 도메인 이름(이 가이드의 dbeng.com)이 포함된 Administrator 계정을 사용하여 다시 연결합니다.

  10. sql_service라는 도메인 계정을 만듭니다. 이 계정은 SQL Server를 실행하는 데 사용됩니다.

    1. SQL Server 서비스 계정에 사용할 안전한 비밀번호를 입력합니다.

      PS C:\> $Password = Read-Host -AsSecureString
      

      입력한 비밀번호를 기록해 둡니다. SQL Server 서비스 계정에 이 비밀번호를 사용합니다.

    2. SQL Server 서비스 계정을 만들고 비밀번호를 설정합니다.

      PS C:\> New-LocalUser -Name "sql_service" -Description "SQL Agent and SQL Admin account."  -Password $Password
      

도메인 컨트롤러가 구성되었으며 dc-windows 인스턴스에서 연결을 해제할 수 있습니다. 다음으로, 가용성 그룹의 인스턴스를 만듭니다.

가용성 그룹의 인스턴스 만들기

가용성 그룹의 SQL Server 인스턴스를 만듭니다. 이 인스턴스는 다음과 같은 IP 주소 구성과 별칭 IP를 사용합니다.

  • 인스턴스 이름: cluster-sql1
    • 내부 IP 주소: 10.0.0.4
    • Windows 장애 조치(Failover) 클러스터 이름: cluster-ag
    • 장애 조치 클러스터 IP 주소: 10.0.0.5(별칭 IP)
    • 가용성 그룹 이름: cluster-listener
    • 가용성 그룹 수신기 주소: 10.0.0.6(별칭 IP)
  • 인스턴스 이름: cluster-sql2
    • 내부 IP 주소: 10.1.0.4
    • Windows 장애 조치(Failover) 클러스터 이름: cluster-ag
    • 장애 조치 클러스터 IP 주소: 10.1.0.5(별칭 IP)
    • 가용성 그룹 이름: cluster-listener
    • 가용성 그룹 수신기 주소: 10.1.0.6(별칭 IP)

다음 방법 중 하나를 사용하여 SQL Server 인스턴스를 만듭니다.

SQL Server 공개 이미지

공개 SQL Server 이미지에서 두 개의 인스턴스를 만듭니다. 이 예에서는 인스턴스의 이름을 cluster-sql1cluster-sql2로 지정합니다. 200GB 부팅 디스크 크기와 n1-highmem-4 머신 유형을 지정합니다. SQL Server 인스턴스에는 일반적으로 도메인 컨트롤러 인스턴스보다 더 많은 컴퓨팅 리소스가 필요합니다. 나중에 추가 컴퓨팅 리소스가 필요할 경우 이 인스턴스의 머신 유형을 변경할 수 있습니다. 추가 저장소 공간이 필요한 경우 디스크를 추가하거나 영구 부팅 디스크의 크기를 조절하세요. 대규모 가용성 그룹에서는 여러 인스턴스를 만들 수 있습니다.

또한, --metadata sysprep-specialize-script-ps1 플래그를 포함하여 인스턴스를 만드는 동안 Failover-Clustering 기능을 설치하는 PowerShell 명령어를 실행합니다.

이 예에서는 다음 명령어를 사용하여 두 개의 인스턴스를 만듭니다.

gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"

대규모 가용성 그룹에서는 적절한 IP 주소를 사용하여 추가 인스턴스를 만들 수 있습니다.

기존 라이선스

Software Assurance를 통해 Microsoft License Mobility를 기반으로 SQL Server Enterprise의 자체 라이선스를 가져오려는 경우 --guestOSFeatures를 사용 설정하여 Windows 이미지를 만듭니다. 그런 다음, 나중에 SQL Server Enterprise를 수동으로 설치합니다.

  1. Windows Server 인스턴스를 만듭니다.
  2. 이 인스턴스에서 모든 구성요소를 최신 버전으로 업데이트합니다.
  3. 이 인스턴스의 부팅 디스크에 대해 auto-delete 상태false로 설정합니다.
  4. 인스턴스를 삭제합니다.
  5. 표준 Windows Server 이미지가 있는 임시 디스크를 만듭니다.

    gcloud compute disks create windows-2012-disk-new --size 200 \
    --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \
    --image-project windows-cloud
    
  6. 새 디스크로부터 guestOSFeatures 매개변수에서 사용 설정된 MULTI_IP_SUBNET으로 커스텀 Windows Server 이미지를 만듭니다.

    gcloud beta compute images create windows-server-2012-r2-dc-new \
    --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \
    --guest-os-features MULTI_IP_SUBNET
    
  7. 이미지를 만든 후 임시 디스크를 삭제합니다.

    gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
    
  8. 커스텀 이미지를 사용하여 가용성 그룹의 새 SQL Server 인스턴스를 만듭니다. SQL Server 인스턴스에는 일반적으로 도메인 컨트롤러 인스턴스보다 더 많은 컴퓨팅 리소스가 필요하므로, 최소한 n1-highmem-4 머신 유형을 지정합니다. 나중에 추가 컴퓨팅 리소스가 필요할 경우 이 인스턴스의 머신 유형을 변경할 수 있습니다. 추가 저장소 공간이 필요한 경우 디스크를 추가하거나 영구 부팅 디스크의 크기를 조절하세요. 대규모 가용성 그룹에서는 여러 인스턴스를 만들 수 있습니다. 이 예에서는 두 개의 인스턴스를 만듭니다.

    gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
    gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
  9. 각 인스턴스에 SQL Server Enterprise를 수동으로 설치합니다.

인스턴스를 만든 후 가용성 그룹으로 작동할 수 있도록 인스턴스를 구성합니다.

  1. RDP 연결을 사용하여 두 인스턴스에 연결합니다.
  2. 고정 IP 주소를 사용하도록 두 인스턴스를 변경하고 넷마스크를 255.255.0.0으로 설정합니다. 관리자 권한으로 PowerShell 터미널을 열고 고정 IP 주소를 고정으로 설정합니다. 명령어를 실행하면 원격 데스크톱 연결이 종료될 수 있습니다.

    • 인스턴스 1:

      PS C:\> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
    • 인스턴스 2:

      PS C:\> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
  3. 두 인스턴스를 Windows 도메인에 추가합니다. 관리자 권한으로 PowerShell을 열고 두 인스턴스에서 다음 Add-Computer 명령어를 실행합니다.

    PS C:\> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
    

    이 명령어를 실행하면 사용자 인증 정보를 묻는 메시지가 표시됩니다. 명령어 실행이 완료되면 인스턴스가 다시 시작됩니다.

  4. RDP를 사용하여 인스턴스를 다시 연결하고 SQL Server 서비스 계정을 설정합니다.

    1. SQL Server 구성 관리자를 엽니다.
    2. SQL Server 서비스 탭을 선택하고 'SQL Server'를 마우스 오른쪽 버튼으로 클릭한 다음 속성을 클릭합니다.
    3. sql_service의 계정과 비밀번호를 설정합니다.

이제 가용성 그룹의 인스턴스가 생성되었습니다. 다음으로, 장애 조치 클러스터 관리자를 구성합니다.

장애 조치 클러스터 관리자 구성

가용성 그룹의 인스턴스에서 장애 조치 클러스터링을 사용 설정하고 장애 조치 클러스터 관리자로 작동하도록 인스턴스 하나를 구성합니다. 그룹의 모든 인스턴스에서 AlwaysOn 고가용성을 사용 설정합니다.

  1. RDP를 사용하여 인스턴스를 다시 연결하되, 도메인 관리자 사용자 인증 정보를 사용합니다. 이 예에서 도메인은 dbeng이며 관리자 계정은 Administrator입니다. Google Cloud Platform용 Chrome RDP를 사용하는 경우, 옵션 메뉴의 인증서 목록에서 해당 주소의 기존 RDP 인증서를 삭제합니다.

  2. 인스턴스 중 하나를 선택하고 장애 조치 클러스터 관리자로 실행되도록 구성합니다.

    1. 관리자 권한으로 PowerShell을 열고 클러스터 환경을 반영하는 변수를 설정합니다. 이 예에서는 다음 변수를 설정합니다.

      PS C:\> $node1 = "cluster-sql1"
      
      PS C:\> $node2 = "cluster-sql2"
      
      PS C:\> $nameWSFC = "cluster-dbclus" #Name of cluster
      
      PS C:\> $ipWSFC1 = "10.0.0.5" #IP address of cluster in subnet 1
      
      PS C:\> $ipWSFC2 = "10.1.0.5" #IP address of cluster in subnet 2
      
    2. 장애 조치 클러스터를 만듭니다.

      PS C:\> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
      
    3. 클러스터의 두 노드에 AlwaysOn 고가용성을 사용 설정합니다.

      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
      
      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
      
  3. 클러스터 관리자가 없는 보조 인스턴스에서 C:\SQLBackup에 백업 폴더를 만들고 읽기 및 쓰기를 위해 이 폴더를 \\cluster-sql2\SQLBackup으로 sql_service 계정에 공유합니다.

  4. 두 인스턴스에서 C:\SQLDataC:\SQLLog에 두 개의 폴더를 만듭니다. 이 폴더를 데이터베이스 데이터 및 로그 파일에 사용합니다.

장애 조치 클러스터 관리자가 준비되었습니다. 다음으로, 가용성 그룹을 만듭니다.

가용성 그룹 만들기

테스트 데이터베이스를 만들고 새 가용성 그룹에서 작동하도록 구성합니다. 또는, 가용성 그룹에 기존 데이터베이스를 대신 지정할 수 있습니다.

  1. 아직 데이터베이스를 구성하지 않은 경우 테스트 데이터베이스를 만듭니다. 클러스터 관리자 인스턴스에서 SQL Server Management Studio를 실행하고 다음 SQL 명령어로 테스트 데이터베이스를 만듭니다.

    CREATE DATABASE TestDB
    ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    GO
    USE [TestDB]
    Exec dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [TestDB] SET RECOVERY FULL;
      GO
      BACKUP DATABASE TestDB to disk = '\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT
    GO
    
  2. 클러스터 관리자 인스턴스에서 SQL Server Management Studio를 실행합니다.

  3. AlwaysOn 고가용성을 마우스 오른쪽 버튼으로 클릭하고 새 가용성 그룹 마법사를 선택합니다.

  4. 이름 지정 페이지에서 가용성 그룹 이름을 설정합니다. 이 예에서는 cluster-ag를 지정합니다.

  5. 데이터베이스 선택 페이지에서 복제할 데이터베이스를 지정합니다. 이 예에서는 TestDB 데이터베이스를 지정합니다.

  6. 복제본 지정 페이지에서 두 인스턴스를 자동 장애 조치 및 동기 커밋이 있는 복제본으로 설정합니다.

  7. 데이터 동기화 선택 페이지에서 초기 동기화 중 데이터베이스의 백업을 유지할 네트워크 공유를 지정합니다. 이 예에서는 \\cluster-sql2\SQLBackup을 지정합니다.

  8. 수신기가 없으므로 유효성 검사 페이지에 경고가 나타나지만, 이 경고를 무시해도 괜찮습니다.

  9. 마법사가 완료되면 새 가용성 그룹을 마우스 오른쪽 버튼으로 클릭하고 수신기 추가를 선택합니다.

  10. 이 수신기의 매개변수를 지정합니다.

    • 수신기 DNS 이름: cluster-listener
    • 네트워크 포트: 1433
    • 네트워크 모드: Static IP
  11. 두 개의 서브넷과 IP 주소 필드를 추가합니다. 이 예에서는 다음 서브넷 및 IP 주소 쌍을 사용합니다.

    • 10.0.0.0/1610.0.0.6
    • 10.1.0.0/1610.1.0.6

이제 인스턴스 이름 대신 cluster-listener를 SQL Server 데이터베이스의 이름으로 사용하여 SQL Server에 연결할 수 있습니다. 이 연결은 현재 활성 상태인 인스턴스를 가리킵니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서