Compute Engine에 멀티 서브넷 SQL Server 2016 Always On 가용성 그룹 배포


이 튜토리얼은 Google Cloud에 Microsoft Active Directory, SQL Server 2016, 인터넷 정보 서비스(IIS)를 포함하는 가용성이 높은 Windows 환경을 배포하는 데 도움이 되는 시리즈 중 2부입니다. 이 튜토리얼에서는 SQL Server 인스턴스 두 개를 같은 리전의 서로 다른 영역에 설정하고 멀티 서브넷 Always On SQL Server 가용성 그룹으로 구성합니다.

이 시리즈는 다음 튜토리얼로 구성됩니다.

각 튜토리얼ㄴ 1부에서 만든 인프라를 기반으로 합니다.

목표

  • 두 영역을 포괄하는 두 개의 네트워크 서브넷을 만듭니다.
  • 각 영역에 Microsoft SQL Server 2016 가상 머신(VM)을 배포합니다.
  • 각 SQL Server 인스턴스가 내 Active Directory 도메인에 참가하도록 구성합니다.
  • Windows Server 장애 조치 클러스터를 만듭니다.
  • SQL Server bookshelf 샘플 데이터베이스를 만들고 구성합니다.
  • SQL Server Always On 가용성 그룹을 설정합니다.

비용

이 튜토리얼에서는 이전 튜토리얼에서 구성한 Google Cloud 리소스를 계속 사용하며, 비용이 청구될 수 있는 다음과 같은 구성요소를 사용합니다.

가격 계산기가 예측하는 이 환경의 비용은 하루에 약 $98입니다. 여기에는 SQL Server 2016 Enterprise 라이선스 및 2개 서버 Active Directory 환경이 포함됩니다.

시작하기 전에

이 튜토리얼에서 사용하는 구성에는 Windows 도메인 컨트롤러 및 작동 중인 Active Directory 도메인에 대한 액세스 권한이 있어야 합니다. 이 환경이 없는 경우 다음 튜토리얼의 단계를 완료하세요.

공통 변수 초기화

인프라의 요소가 배포되는 위치를 제어하는 여러 환경 변수를 정의해야 합니다.

  1. 텍스트 편집기에서 다음 환경 변수를 설정하여 프로젝트 ID 및 사용할 리전과 영역을 지정하는 스크립트를 만듭니다.

    변수는 리전을 us-east1로 설정합니다. 이전 튜토리얼에서 다른 리전을 사용한 경우 해당 리전과 일치하도록 이 스크립트의 리전을 변경합니다.

    region=us-east1
    zone_1=${region}-b
    zone_2=${region}-c
    vpc_name=webappnet
    project_id=your-project-id
    

    your-project-id를 사용 중인 Google Cloud 프로젝트 ID로 바꿉니다.

  2. Cloud Shell을 엽니다.

    Cloud Shell 열기

  3. 스크립트를 Cloud Shell 창에 복사하고 실행합니다.

  4. 모든 후속 명령어에서 이러한 값을 지정할 필요가 없도록 기본 리전 및 프로젝트 ID를 설정합니다.

    gcloud config set compute/region ${region}
    gcloud config set project ${project_id}
    

네트워크 인프라 만들기

인프라 변수를 정의한 후 SQL Server가 사용할 네트워크 서브넷을 만듭니다.

  1. 기존 Virtual Private Cloud(VPC) 네트워크에 새 서브넷을 추가합니다.

    gcloud compute networks subnets create private-sql-1 \
        --network ${vpc_name} \
        --range 10.3.0.0/24
    
    gcloud compute networks subnets create private-sql-2 \
        --network ${vpc_name} \
        --range 10.4.0.0/24
    
  2. 이전에 만든 private-ad* 서브넷과 새로운 private-sql* 서브넷 간 트래픽을 허용하는 내부 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create allow-internal-ports-private-sql \
        --network ${vpc_name} \
        --allow tcp:0-65535,udp:0-65535,icmp \
        --source-ranges 10.4.0.0/24,10.3.0.0/24,10.2.0.0/24,10.1.0.0/24
    

SQL Server 인스턴스 만들기

다음으로, 사전 구성된 Compute Engine 이미지를 사용하여 아래 속성을 갖는 SQL Server 2016 Enterprise Edition VM 두 개를 만듭니다.

  • 이름: bookshelf-sql1bookshelf-sql2
  • 부팅 디스크 크기: 200GB
  • 머신 유형: n1-highmem-4

튜토리얼을 끝낸 후에도 이 환경을 사용하려는 경우 컴퓨팅 리소스가 더 필요하다면 해당 인스턴스의 머신 유형을 나중에 맞춤설정할 수 있습니다. 디스크를 추가하고 기존 영구 디스크의 크기를 조절할 수도 있습니다.

이 튜토리얼에서는 VM의 Windows Server 공개 이미지에 SQL Server를 사용하므로 SQL Server 사용 요금이 청구됩니다. Software Assurance를 통해 라이선스 이동 프로그램을 사용하여 기존 SQL Server 라이선스를 Compute Engine에 배포하고 Windows Server 공개 이미지에 SQL Server를 설치한 후 해당 라이선스를 적용할 수도 있습니다.

  1. SQL Server 2016 Enterprise가 포함된 Windows Server 2016의 Compute Engine 인스턴스를 만듭니다.

    gcloud compute instances create bookshelf-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 ${zone_1} \
        --network-interface=network=${vpc_name},subnet=private-sql-1,private-network-ip=10.3.0.2,aliases=10.3.0.4/31
    
  2. 두 번째 인스턴스를 만듭니다.

    gcloud compute instances create bookshelf-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 ${zone_2} \
        --network-interface=network=${vpc_name},subnet=private-sql-2,private-network-ip=10.4.0.2,aliases=10.4.0.4/31
    

bookshelf-sql2 인스턴스 구성

다음으로 bookshelf-sql2 인스턴스를 구성합니다. bookshelf-sql1의 데이터베이스를 설정하려면 추가 작업이 필요하며 bookshelf-sql2를 구성하려면 먼저 원격 데스크톱 프로토콜(RDP) 세션 수를 줄여야 하기 때문에 두 번째 인스턴스부터 시작합니다.

  1. Windows 인스턴스 bookshelf-sql2의 비밀번호를 만듭니다.

    gcloud compute reset-windows-password bookshelf-sql2 \
        --zone ${zone_2} --quiet
    

    사용자 이름은 Google 계정 사용자 이름입니다. 나중에 사용할 수 있도록 사용자 이름과 비밀번호를 기록해 둡니다.

  2. 이전 단계에서 만든 사용자 인증 정보를 사용하여 RDP로 SQL Server 인스턴스에 연결합니다.

  3. 인스턴스에서 관리자 권한으로 PowerShell 터미널을 엽니다. (시작을 클릭하고 PowerShell을 입력한 다음 Control+Shift+Enter를 누릅니다.)

  4. 다음 변수를 설정합니다.

    $DomainName = "example-gcp.com"
    $DNS1 = "10.1.0.100"
    $DNS2 = "10.2.0.100"
    $LocalStaticIp = "10.4.0.2"
    $DefaultGateway = "10.4.0.1"
    
  5. 기본 DNS 서버를 구성합니다.

    netsh interface ip set dns Ethernet static $DNS1
  6. 보조 DNS 서버를 구성합니다.

    netsh interface ip add dns Ethernet $DNS2 index=2
  7. IP 주소와 기본 게이트웨이를 설정합니다.

    netsh interface ip set address name=Ethernet static $LocalStaticIp 255.255.255.0 $DefaultGateway 1
  8. Windows 도메인에 VM을 추가합니다.

    Add-Computer -DomainName $DomainName `
        -Credential (Get-Credential "example-gcp\Administrator")
    
  9. Administrator 계정의 비밀번호를 입력하라는 메시지가 표시되면 이전 튜토리얼에서 Active Directory 포리스트 설치 시 정의한 관리자 인증 정보를 사용합니다. EXAMPLE-GCP\Administrator와 같이 사용자 이름에 도메인 이름을 프리픽스로 추가합니다.

  10. SQL Server 가용성 그룹에 대한 Windows 방화벽 포트를 개방합니다.

    netsh advfirewall firewall add rule name="5022 for Avail Groups" dir=in action=allow protocol=TCP localport=5022
    netsh advfirewall firewall add rule name="1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
    
  11. 장애 조치 클러스터링 기능을 설치합니다.

    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
  12. 인스턴스를 재부팅합니다.

    Restart-Computer
  13. EXAMPLE-GCP\Administrator 계정에 사용자 인증 정보를 사용하여 RDP를 통해 SQL Server 인스턴스에 연결합니다.

  14. 관리자 권한으로 PowerShell 콘솔 창을 엽니다.

  15. PowerShell 콘솔 창에서 SQL Server 데이터 및 로그 파일에 대한 폴더를 만듭니다.

    New-Item -ItemType directory -Path C:\SQLData
    New-Item -ItemType directory -Path C:\SQLLog
    
  16. 데이터베이스 백업용으로 새 폴더를 만들고 공유합니다.

    New-Item -ItemType directory -Path C:\SQLBackup
    New-SMBShare -Name SQLBackup -Path C:\SQLBackup -FullAccess "Authenticated Users"
    

bookshelf-sql1 인스턴스 구성

다음으로 bookshelf-sql1 인스턴스를 구성합니다.

  1. Cloud Shell에서 Windows 인스턴스 bookshelf-sql1의 비밀번호를 만듭니다.

    gcloud compute reset-windows-password bookshelf-sql1 --zone ${zone_1}  --quiet

    사용자 이름은 Google 계정 사용자 이름입니다. 나중에 사용할 수 있도록 사용자 이름과 비밀번호를 기록해 둡니다.

  2. bookshelf-sql1 인스턴스에 생성한 사용자 인증 정보를 사용하여 RDP를 통해 SQL Server 인스턴스에 연결합니다.

  3. 관리자 권한으로 PowerShell 콘솔 창을 엽니다.

  4. PowerShell 콘솔 창에서 다음 변수를 설정합니다.

    $DomainName = "example-gcp.com"
    $DNS1 = "10.1.0.100"
    $DNS2 = "10.2.0.100"
    $LocalStaticIp = "10.3.0.2"
    $DefaultGateway = "10.3.0.1"
    
  5. 기본 DNS 서버를 구성합니다.

    netsh interface ip set dns Ethernet static $DNS1
  6. 보조 DNS 서버를 구성합니다.

    netsh interface ip add dns Ethernet $DNS2 index=2
  7. IP 주소와 기본 게이트웨이를 설정합니다.

    netsh interface ip set address name=Ethernet static $LocalStaticIp 255.255.255.0 $DefaultGateway 1
  8. 도메인에 VM을 추가합니다.

    Add-Computer -DomainName $DomainName `
        -Credential (Get-Credential "example-gcp\Administrator")
    
  9. 관리자 계정의 비밀번호를 입력하라는 메시지가 표시되면 이전 튜토리얼에서 Active Directory 포리스트를 설치할 때 정의한 관리자 인증 정보를 사용합니다. EXAMPLE-GCP\Administrator와 같이 사용자 이름에 도메인 이름을 프리픽스로 추가합니다.

  10. Windows 방화벽 규칙을 추가합니다.

    netsh advfirewall firewall add rule name="5022 for Avail Groups" dir=in action=allow protocol=TCP localport=5022
    netsh advfirewall firewall add rule name="1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
    
  11. 장애 조치 클러스터링 기능을 설치합니다.

    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
  12. 인스턴스를 재부팅합니다.

    Restart-Computer

Windows Server 장애 조치 클러스터 구성

  1. RDP를 사용하여 bookshelf-sql1 인스턴스에 연결합니다. 관리자 계정의 비밀번호를 입력하라는 메시지가 표시되면 이전 튜토리얼에서 Active Directory 포리스트를 설치할 때 정의한 관리자 인증 정보를 사용합니다. EXAMPLE-GCP\Administrator와 같이 사용자 이름에 도메인 이름을 프리픽스로 추가합니다.

  2. 관리자 권한으로 PowerShell 콘솔 창을 엽니다.

  3. PowerShell 콘솔 창에서 다음 변수를 설정합니다.

    $node1 = "bookshelf-sql1"
    $node2 = "bookshelf-sql2"
    
  4. 클러스터의 이름을 설정합니다.

    $nameWSFC = "bookshelf-dbclus"
  5. 클러스터 및 클러스터 리스너의 IP 주소를 설정합니다.

    $ipWSFC1 = "10.3.0.4"
    $ipWSFC2 = "10.4.0.4"
    $ipWSListener1 = "10.3.0.5"
    $ipWSListener2 = "10.4.0.5"
    
  6. bookshelf-sql1 SQL Server 인스턴스가 클러스터에 조인할 준비가 되었는지 확인합니다. SQL Server 인스턴스로 연결을 시도하는 다음 스크립트를 실행합니다.

    $SQLServer1IsReady=$False
    For ($i=0; $i -le 30; $i++) {
        $SqlCatalog = "master"
        $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
        $SqlConnection.ConnectionString = "Server = $node1;" + `
             "Database = $SqlCatalog; Integrated Security = True"
        try {
            $SqlConnection.Open()
            Write-Host "Connection to the server $node1 was successful"
            $SQLServer1IsReady=$True
            $SqlConnection.Close()
            break
        }
        catch {
            Write-Host "SQL server $node1 is not ready, waiting for 60s"
            Start-Sleep -s 60 #Wait for 60 seconds
        }
    }
    if($SQLServer1IsReady -eq $False) {
        Write-Error "$node1 is not responding. Was it deployed correctly?"
    }
    
  7. bookshelf-sql2 SQL Server 인스턴스가 클러스터에 조인할 준비가 되었는지 확인합니다.

    $SQLServer2IsReady=$False
    For ($i=0; $i -le 30; $i++) {
        $SqlCatalog = "master"
        $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
        $SqlConnection.ConnectionString = "Server = $node2;" + `
            "Database = $SqlCatalog; Integrated Security = True"
        try {
            $SqlConnection.Open()
            Write-Host "Connection to the server $node2 was successful"
            $SQLServer2IsReady=$True
            $SqlConnection.Close()
            break
        }
        catch {
            Write-Host "SQL server $node2 is not ready, waiting for 60s"
            Start-Sleep -s 60 #Wait for 60 seconds
        }
    }
    if($SQLServer2IsReady -eq $False) {
        Write-Error "$node2 is not responding. Was it deployed correctly?"
    }
    
  8. 새 클러스터를 만듭니다.

    New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage `
        -StaticAddress $ipWSFC1, $ipWSFC2
    
  9. 두 노드에서 Always On 가용성 그룹 기능을 사용 설정합니다.

    Enable-SqlAlwaysOn -ServerInstance $node1 -Force
    Enable-SqlAlwaysOn -ServerInstance $node2 -Force
    
  10. 데이터베이스 데이터 및 로그 파일에 대한 폴더를 만듭니다.

    New-Item -ItemType directory -Path C:\SQLData
    New-Item -ItemType directory -Path C:\SQLLog
    

데이터베이스 설정

이 튜토리얼에서는 구성이 제대로 작동하는지 테스트하기 위해 생성하는 bookshelf 예시 데이터베이스를 사용합니다.

  1. 작업 중인 PowerShell 콘솔 창에서 다음 SQL 문을 실행하여 bookshelf 데이터베이스를 만듭니다.

    $CreateDatabaseSQLScript =  @"
    CREATE DATABASE bookshelf ON PRIMARY
        (NAME = 'bookshelf_Data', FILENAME='C:\SQLData\bookshelf_data.mdf', SIZE =
    256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
        LOG ON (NAME = 'bookshelf_log', FILENAME='C:\SQLLog\bookshelf_log.ldf',
    SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    GO
    USE [bookshelf]
    Exec dbo.sp_changedbowner @loginame = 'sa', @map = false;
    ALTER DATABASE [bookshelf] SET RECOVERY FULL;
    GO
    BACKUP DATABASE bookshelf to disk =
    '\\bookshelf-sql2\SQLBackup\bookshelf.bak' WITH INIT
    GO
    "@
    Invoke-Sqlcmd -Query $CreateDatabaseSQLScript -ServerInstance $node1
    
  2. 다음 SQL 문을 실행하여 Books 테이블을 만듭니다.

    $CreateTableSQLScript =  @"
    USE [bookshelf]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[Books] (
                [Id] [bigint] IDENTITY(1,1) NOT NULL,
                [Title] [nvarchar](max) NOT NULL,
                [Author] [nvarchar](max) NULL,
                [PublishedDate] [datetime] NULL,
                [ImageUrl] [nvarchar](max) NULL,
                [Description] [nvarchar](max) NULL,
                [CreatedById] [nvarchar](max) NULL,
    CONSTRAINT [PK_dbo.Books] PRIMARY KEY CLUSTERED
        ([Id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    "@
    Invoke-Sqlcmd -Query $CreateTableSQLScript -ServerInstance $node1
    
  3. 다음 변수를 설정합니다.

    $Domain = "example-gcp.com"
    $ADControllerFQDN = "ad-dc1.$Domain"
    $ServiceAccountName = "sql.service"
    $ServiceAccountPrincipalName = "$ServiceAccountName@$Domain"
    
  4. 다음 PowerShell 명령어를 사용하여 RSAT-AD-PowerShell cmdlet을 활성화합니다.

    Add-WindowsFeature RSAT-AD-PowerShell

    VM에서 서비스 계정을 만들려면 원격 서버 관리 도구가 필요합니다.

  5. 도메인 내에 sql.service라는 데이터베이스 서비스 계정을 추가합니다.

    New-ADUser -Name $ServiceAccountName `
        -Server $ADControllerFQDN `
        -SamAccountName $ServiceAccountName `
        -UserPrincipalName $ServiceAccountPrincipalName `
        -AccountPassword (Read-Host -AsSecureString "AccountPassword") `
        -PassThru | Enable-ADAccount
    
  6. sql.service 계정의 비밀번호를 입력하라는 메시지가 표시되면 안전한 비밀번호를 제공하고, 나중에 사용할 수 있도록 안전한 위치에 저장합니다.

  7. 다음 SQL 문을 실행하여 EXAMPLE-GCP\sql.service 계정을 데이터베이스 관리자로 추가합니다.

    $AddSQLServiceAccountScript =  @"
    USE [master]
    GO
        CREATE LOGIN [EXAMPLE-GCP\sql.service] FROM WINDOWS WITH
    DEFAULT_DATABASE=[bookshelf], DEFAULT_LANGUAGE=[us_english]
    GO
    USE [bookshelf]
    GO
    CREATE USER [EXAMPLE-GCP\sql.service] FOR LOGIN [EXAMPLE-GCP\sql.service]
    GO
    USE [bookshelf]
    GO
    ALTER ROLE [db_accessadmin] ADD MEMBER [EXAMPLE-GCP\sql.service]
    GO
    USE [bookshelf]
    GO
    ALTER ROLE [db_backupoperator] ADD MEMBER [EXAMPLE-GCP\sql.service]
    GO
    USE [bookshelf]
    GO
    ALTER ROLE [db_datareader] ADD MEMBER [EXAMPLE-GCP\sql.service]
    GO
    USE [bookshelf]
    GO
    ALTER ROLE [db_datawriter] ADD MEMBER [EXAMPLE-GCP\sql.service]
    GO
    USE [bookshelf]
    GO
    ALTER ROLE [db_ddladmin] ADD MEMBER [EXAMPLE-GCP\sql.service]
    GO
    USE [bookshelf]
    GO
    ALTER ROLE [db_owner] ADD MEMBER [EXAMPLE-GCP\sql.service]
    GO
    USE [bookshelf]
    GO
    ALTER ROLE [db_securityadmin] ADD MEMBER [EXAMPLE-GCP\sql.service]
    GO
    "@
    Invoke-Sqlcmd -Query $AddSQLServiceAccountScript -ServerInstance $node1
    

SQL Server 가용성 그룹 설정

  1. 작업 중인 인스턴스에서 다음 변수를 설정합니다.

    $Database="bookshelf"
    $BackupFolder="SQLBackup"
    $SharedLocation="\\$node2\$BackupFolder"
    $ListenerName="sql-listener"
    $AGName="MainAG"
    $PrimaryServer = "$node1.$Domain\MSSQLSERVER"
    $SecondaryServer = "$node2.$Domain\MSSQLSERVER"
    
  2. 기본 서버의 데이터베이스를 백업합니다.

    Backup-SqlDatabase `
        -Database $Database -Initialize `
        -BackupFile "$SharedLocation\$Database.bak" `
        -ServerInstance $node1
    
  3. 데이터베이스를 보조 서버에 복원합니다.

    Restore-SqlDatabase `
        -Database $Database `
        -BackupFile "$SharedLocation\$Database.bak" `
        -ServerInstance $node2 `
        -NORECOVERY
    
  4. 기본 서버의 데이터베이스 로그를 백업합니다.

    Backup-SqlDatabase `
        -Database $Database -Initialize `
        -BackupFile "$SharedLocation\$Database.log" `
        -ServerInstance $node1 `
        -BackupAction Log
    
  5. 데이터베이스 로그를 보조 서버에 복원합니다.

    Restore-SqlDatabase `
        -Database $Database `
        -BackupFile "$SharedLocation\$Database.log" `
        -ServerInstance $node2 `
        -RestoreAction Log `
        -NORECOVERY
    
  6. 엔드포인트를 만들고 시작합니다.

    $endpoint1=New-SqlHADREndpoint -Port 5022 -Owner sa `
        -Encryption Supported -EncryptionAlgorithm Aes `
        -Name AlwaysonEndpoint1 `
        -Path "SQLSERVER:\SQL\$node1.$Domain\Default"
    Set-SqlHADREndpoint -InputObject $endpoint1 -State Started
    $endpoint2=New-SqlHADREndpoint -Port 5022 -Owner sa `
        -Encryption Supported -EncryptionAlgorithm Aes `
        -Name AlwaysonEndpoint2 `
        -Path "SQLSERVER:\SQL\$node2.$Domain\Default"
    Set-SqlHADREndpoint -InputObject $endpoint2 -State Started
    

    출력은 다음과 같습니다.

    AlwaysonEndpoint1       STARTED            5022 - for node1
    AlwaysonEndpoint2       STARTED            5022 - for node2
    
  7. PowerShell에서 다음 명령어를 실행하여 구성을 확인합니다.

    $node1 = "bookshelf-sql1"
    $node2 = "bookshelf-sql2"
    Invoke-Sqlcmd -Query "select name, state_desc, port FROM sys.tcp_endpoints" -ServerInstance $node1
    Invoke-Sqlcmd -Query "select name, state_desc, port FROM sys.tcp_endpoints" -ServerInstance $node2
    

    구성이 올바르면 출력이 다음과 같이 표시됩니다.

    name                       state_desc port
    ----                       ---------- ----
    Dedicated Admin Connection STARTED       0
    TSQL Default TCP           STARTED       0
    AlwaysonEndpoint1          STARTED    5022
    Dedicated Admin Connection STARTED       0
    TSQL Default TCP           STARTED       0
    AlwaysonEndpoint2          STARTED    5022
    
  8. 엔드포인트 URL을 설정합니다.

    $EndpointUrlSQLServer1="TCP://" + $node1 + "." + $Domain + ":5022"
    $EndpointUrlSQLServer2="TCP://" + $node2 + "." + $Domain + ":5022"
    
  9. 복제본의 메모리 내 표현을 만듭니다.

    $PrimaryReplica = New-SqlAvailabilityReplica -Name $node1 `
        -EndpointUrl $EndpointUrlSQLServer1 `
        -FailoverMode "Automatic" `
        -AvailabilityMode "SynchronousCommit" `
        -AsTemplate -Version 13
    $SecondaryReplica = New-SqlAvailabilityReplica -Name $node2 `
        -EndpointUrl $EndpointUrlSQLServer2 `
        -FailoverMode "Automatic" `
        -AvailabilityMode "SynchronousCommit" `
        -AsTemplate -Version 13
    
  10. 가용성 그룹을 만듭니다.

    New-SqlAvailabilityGroup -Name $AGName `
        -AvailabilityReplica @($PrimaryReplica, $SecondaryReplica) `
        -Path "SQLSERVER:\SQL\$node1.$Domain\Default" `
        -Database $Database
    
  11. 보조 인스턴스를 가용성 그룹에 참가시킵니다.

    Join-SqlAvailabilityGroup -Path "SQLSERVER:\SQL\$node2\Default" -Name $AGName
  12. 보조 데이터베이스를 가용성 그룹에 참가시킵니다.

    Add-SqlAvailabilityDatabase `
        -Path "SQLSERVER:\SQL\$node2\Default\AvailabilityGroups\$AGName" `
        -Database $Database
    
  13. 리스너를 만듭니다.

    New-SqlAvailabilityGroupListener -Name $ListenerName `
        -Port 1433 `
        -StaticIp @("$ipWSListener1/255.255.255.0","$ipWSListener2/255.255.255.0") `
        -Path SQLSERVER:\Sql\$node1\Default\AvailabilityGroups\$AGName
    
  14. 더 이상 필요하지 않은 공유 폴더를 삭제합니다.

    For ($i=0; $i -le 30; $i++) {
        try {
            Remove-Item \\$node2\c$\$BackupFolder -Force -Recurse -ErrorAction Stop
            Write-Host "Shared folder $SharedLocation was removed"
            break
        }
        catch {
            Write-Host "\\$node2\c$\$BackupFolder is in use waiting 1m to retry"
            Start-Sleep -s 60
        }
    }
    

정리

이 시리즈의 다음 튜토리얼(부하 분산 IIS 웹 서버 배포)을 계속 진행하려면 이 튜토리얼에서 만든 리소스를 유지하세요. 하지만 이 튜토리얼에서 만든 환경을 사용하지 않으려는 경우 요금이 청구되지 않도록 Google Cloud에서 만든 리소스를 삭제하세요. 다음 섹션에서는 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

  • Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  • 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  • 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.
  • 인스턴스 삭제

    프로젝트 전체를 삭제하려는 경우가 아니라면 생성한 특정 리소스만 삭제할 수 있습니다.

    Compute Engine 인스턴스를 삭제하는 방법은 다음과 같습니다.

    1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

      VM 인스턴스 페이지로 이동

    2. 삭제할 인스턴스를 선택합니다.

    3. 페이지 상단에서 삭제를 클릭하여 인스턴스를 삭제합니다.

    VPC 네트워크 삭제

    VPC 네트워크, 서브넷, 방화벽 규칙을 삭제하는 방법은 다음과 같습니다.

    1. Google Cloud console에서 VPC 네트워크 페이지로 이동합니다.

      VPC 네트워크 페이지로 이동

    2. 만든 VPC 네트워크를 선택합니다.

    3. 페이지 상단에서 삭제를 클릭하여 네트워크를 삭제합니다.

    다음 단계