Storage Spaces Direct를 사용하는 SQL Server 장애 조치 클러스터 인스턴스 구성


Microsoft SQL Server Always On Failover Cluster Instances(FCI)를 사용하면 여러 Windows Server 장애 조치 클러스터(WSFC) 노드에서 단일 SQL Server 인스턴스를 실행할 수 있습니다. 언제든지 클러스터 노드 중 하나가 SQL 인스턴스를 적극적으로 호스팅합니다. 실패할 경우 WSFC가 인스턴스 리소스의 소유권을 다른 노드로 자동 전송합니다.

SQL Server FCI는 모든 WSFC 노드에서 액세스할 수 있도록 데이터를 공유 스토리지에 저장해야 합니다. 이 가이드에서는 공유 스토리지에 Storage Spaces Direct(S2D)를 사용하는 SQL Server 2019 장애 조치 클러스터 인스턴스를 배포하는 방법을 설명합니다. S2D는 Compute Engine VM의 데이터 디스크를 사용하여 SQL Database를 저장할 수 있는 소프트웨어 기반 가상 SAN을 제공합니다.

다음 다이어그램은 배포를 보여줍니다.

아키텍처

하이퍼컨버지드 아키텍처를 구현하면 VM 인스턴스 node-1node-2가 WSFC 노드 역할을 하고 공유 스토리지를 호스팅합니다. 세 번째 VM 인스턴스인 witness는 장애 조치 시나리오에서 쿼럼 확보를 위해 사용됩니다. 3개의 VM 인스턴스가 3개 영역에 배포되고 공통 서브넷을 공유합니다.

클라이언트는 내부 TCP 부하 분산기를 통해 SQL Server 인스턴스와 통신합니다. 이 부하 분산기는 커스텀 상태 점검을 사용하여 현재 SQL 인스턴스를 호스팅하는 WSFC 노드를 확인하고 해당 인스턴스로 트래픽을 라우팅합니다.

이 문서에서는 Active Directory를 Google Cloud에 이미 배포했으며 SQL Server, Active Directory, Compute Engine에 대한 기본 지식이 있다고 가정합니다.

목표

  • SQL Server VM 인스턴스 두 개와 파일 공유 감시 역할을 하는 세 번째 VM 인스턴스로 구성된 WSFC를 배포합니다.
  • WSFC에 SQL Server FCI를 배포합니다.
  • 장애 조치를 시뮬레이션하여 클러스터가 작동하는지 확인합니다.

비용

이 튜토리얼에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

가격 계산기를 사용하면 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.

시작하기 전에

이 튜토리얼을 완료하려면 다음이 필요합니다.

  • 도메인 컨트롤러가 최소 하나 이상 있는 Active Directory 도메인 관리형 Microsoft AD를 사용하여 Active Directory 도메인을 만들 수 있습니다. 또는 Compute Engine에 커스텀 Active Directory 환경을 배포하고 DNS 쿼리를 도메인 컨트롤러에 전달하는 비공개 DNS 전달 영역을 설정할 수 있습니다.
  • 컴퓨터를 도메인에 조인할 수 있는 권한이 있고 RDP를 사용하여 로그인할 수 있는 Active Directory 사용자입니다. 관리형 Microsoft AD를 사용하는 경우 setupadmin 사용자를 사용할 수 있습니다.
  • Active Directory 도메인 컨트롤러에 연결된 Google Cloud 프로젝트 및 VPC
  • WSFC VM 인스턴스에 사용할 서브넷.

튜토리얼을 완료하려면 Google Cloud 프로젝트도 필요합니다.

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

이 튜토리얼을 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않도록 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

프로젝트 및 네트워크 준비

SQL Server FCI를 배포할 수 있도록 Google Cloud 프로젝트와 VPC를 준비하려면 다음을 수행합니다.

  1. Google Cloud Console에서 Cloud Shell 활성화 Cloud Shell 활성화 버튼을 클릭하여 Cloud Shell을 엽니다.

    Google Cloud Console로 이동

  2. 다음 변수를 초기화합니다.

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    각 항목의 의미는 다음과 같습니다.

    • VPC_NAME: VPC 이름
    • SUBNET_NAME: 서브넷 이름
  3. 기본 프로젝트 ID를 설정합니다.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

  4. 기본 리전을 설정합니다.

    gcloud config set compute/region REGION
    

    REGION을 배포하려는 리전의 ID로 바꿉니다.

방화벽 규칙 만들기

클라이언트가 SQL Server에 연결할 수 있게 하고 WSFC 노드 간 통신을 허용하고 부하 분산기가 상태 확인을 수행하도록 사용 설정하려면 방화벽 규칙을 여러 개 만들어야 합니다. 이러한 방화벽 규칙을 간단하게 만들려면 네트워크 태그를 사용합니다.

  • WSFC 노드 2개는 wsfc-node 태그로 주석을 답니다.
  • 모든 서버(감시 포함)는 wsfc 태그로 주석을 답니다.

다음 네트워크 태그를 사용하는 방화벽 규칙을 만듭니다.

  1. 기존 Cloud Shell 세션으로 돌아갑니다.
  2. WSFC 노드의 방화벽 규칙을 만듭니다.

    SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\))
    
    gcloud compute firewall-rules create allow-all-between-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp,udp,icmp \
      --enable-logging \
      --source-tags=wsfc \
      --target-tags=wsfc \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:1433 \
      --enable-logging \
      --source-ranges=$SUBNET_CIDR \
      --target-tags=wsfc-node \
      --network=$VPC_NAME \
      --priority 10000
    
  3. Google Cloud 프로버의 IP 범위에서 상태 확인을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create allow-health-check-to-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp \
      --source-ranges=130.211.0.0/22,35.191.0.0/16 \
      --target-tags=wsfc-node \
      --network=$VPC_NAME \
      --priority 10000
    

VM 인스턴스 만들기

이제 장애 조치 클러스터에 VM 인스턴스 두 개를 배포합니다. 언제든지 이러한 VM 중 하나만 활성 FCI 노드로 작동하고 다른 노드는 장애 조치 노드로 작동합니다. 두 VM 인스턴스는 다음 요구사항을 충족해야 합니다.

  • 내부 TCP 부하 분산기에서 액세스할 수 있도록 동일한 리전에 있습니다.
  • 게스트 에이전트는 WSFC 모드를 사용하도록 구성됩니다. 이 모드에서 게스트 에이전트는 로컬 네트워크 인터페이스를 구성할 때 내부 부하 분산기의 IP 주소를 무시합니다. 이 동작은 WSFC 장애 조치 이벤트 중에 IP 주소 충돌을 방지하기 위해 필요합니다.

SQL Server 2019가 사전 설치된 SQL Server 프리미엄 이미지를 사용합니다.

동률 처리 기능을 제공하고 장애 조치 시나리오에 사용되는 쿼럼을 확보하려면 파일 공유 감시 역할을 하는 세 번째 VM을 배포합니다.

  1. 기존 Cloud Shell 세션으로 돌아갑니다.
  2. WSFC 노드의 특수 스크립트를 만듭니다. 이 스크립트는 필요한 Windows 기능을 설치하고 WSFC 및 SQL Server의 방화벽 규칙을 만듭니다.

    cat << "EOF" > specialize-node.ps1
    
    $ErrorActionPreference = "stop"
    
    # Install required Windows features
    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
    Install-WindowsFeature RSAT-AD-PowerShell
    
    # Open firewall for WSFC
    netsh advfirewall firewall add rule name="Allow SQL Server health check" dir=in action=allow protocol=TCP localport=59997
    
    # Open firewall for SQL Server
    netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433
    
    EOF
    
  3. VM 인스턴스를 만듭니다. S2D 및 WSFC 노드로 작동하는 두 VM에서 추가 데이터 디스크를 연결하고 메타데이터 키 enable-wsfctrue로 설정하여 WSFC 모드를 사용 설정합니다.

    REGION=$(gcloud config get-value compute/region)
    PD_SIZE=50
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $REGION-a \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2019-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-1" \
      --create-disk=name=node-1-datadisk-1,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-1-datadisk-2,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-1-datadisk-3,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-1-datadisk-4,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create node-2 \
      --zone $REGION-b \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2019-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-2" \
      --create-disk=name=node-2-datadisk-1,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-2-datadisk-2,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-2-datadisk-3,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-2-datadisk-4,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create "witness" \
      --zone $REGION-c \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family=windows-2022 \
      --image-project=windows-cloud \
      --tags wsfc \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer"
    
  4. VM 인스턴스 3개를 Active Directory에 조인하려면 VM 인스턴스 3개마다 다음을 수행합니다.

    1. 직렬 포트 출력을 확인하여 VM의 초기화 프로세스를 모니터링합니다.

      gcloud compute instances tail-serial-port-output NAME
      

      NAME을 VM 인스턴스의 이름으로 바꿉니다.

      출력으로 Instance setup finished가 표시될 때까지 몇 분 정도 기다린 다음 Ctrl+C를 누릅니다. 이제 VM 인스턴스를 사용할 수 있습니다.

    2. VM 인스턴스에 대해 사용자 이름과 비밀번호를 만듭니다.

    3. 원격 데스크톱을 사용하여 VM에 연결하고 이전 단계에서 만든 사용자 이름과 비밀번호를 사용하여 로그인합니다.

    4. Start(시작) 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell(관리자)을 클릭합니다.

    5. 를 클릭하여 권한 승격 프롬프트를 확인합니다.

    6. 컴퓨터를 Active Directory 도메인에 연결하고 다시 시작합니다.

      Add-Computer -Domain DOMAIN -Restart
      

      DOMAIN을 Active Directory 도메인의 DNS 이름으로 바꿉니다.

      다시 시작이 완료될 때까지 1분 정도 기다립니다.

클러스터 IP 주소 예약

이제 VPC 네트워크에서 고정 IP 주소 두 개를 예약합니다. 두 주소는 각기 다른 용도로 사용됩니다.

  • 부하 분산기 IP: 이 IP 주소는 클라이언트가 SQL Server에 연결하는 데 사용됩니다.
  • 클러스터 IP: 이 IP 주소는 WSFC에서 내부용으로만 사용됩니다.

고정 IP 주소를 예약하려면 다음을 수행하세요.

  1. 내부 부하 분산기에 고정 IP를 예약하고 LOADBALANCER_ADDRESS라는 새 환경 변수에 주소를 캡처합니다.

    gcloud compute addresses create wsfc \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region)
    
    LOADBALANCER_ADDRESS=$(gcloud compute addresses describe wsfc \
      --region $(gcloud config get-value compute/region) \
      --format=value\(address\)) && \
    echo "Load Balancer IP: $LOADBALANCER_ADDRESS"
    

    IP 주소가 나중에 필요하므로 기록해 둡니다.

  2. 클러스터 IP로 사용할 다른 고정 IP 주소를 예약합니다.

    gcloud compute addresses create wsfc-cluster \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region) && \
    CLUSTER_ADDRESS=$(gcloud compute addresses describe wsfc-cluster \
        --region $(gcloud config get-value compute/region) \
        --format=value\(address\)) && \
    echo "Cluster IP: $CLUSTER_ADDRESS"
    

    IP 주소가 나중에 필요하므로 기록해 둡니다.

이제 프로젝트와 VPC에서 WSFC 및 SQL Server를 배포할 수 있습니다.

감시 파일 공유 만들기

파일 공유 감시로 작동하도록 witness를 준비하려면 파일 공유를 만들고 자신과 WSFC 노드 두 개에 파일 공유에 대한 액세스 권한을 부여합니다.

  1. 원격 데스크톱을 사용하여 witness에 연결합니다. 도메인 사용자 계정으로 로그인합니다.
  2. Start(시작) 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell(관리자)을 클릭합니다.
  3. 를 클릭하여 권한 승격 프롬프트를 확인합니다.
  4. 감시 폴더를 만들고 폴더를 공유합니다.

    New-Item "C:\QWitness" -Type directory
    
    icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)'
    icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)'
    
    New-SmbShare `
      -Name QWitness `
      -Path "C:\QWitness" `
      -Description "SQL File Share Witness" `
      -FullAccess  $env:username,node-1$,node-2$
    

장애 조치 클러스터 배포

이제 VM 인스턴스를 사용하여 WSFC 및 SQL Server를 배포합니다.

WSFC 배포

이제 장애 조치 클러스터를 만들 수 있습니다.

  1. 원격 데스크톱을 사용하여 node-1에 연결합니다. 도메인 사용자 계정으로 로그인합니다.
  2. Start(시작) 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell(관리자)을 클릭합니다.
  3. 를 클릭하여 권한 승격 프롬프트를 확인합니다.
  4. 새 클러스터를 만듭니다.

    New-Cluster `
      -Name windows-fci `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_ADDRESS
    

    CLUSTER_ADDRESS를 이전에 만든 클러스터 IP 주소로 바꿉니다.

    이 명령어는 Active Directory 도메인에 컴퓨터 계정 windows-fci를 만듭니다.

  5. witness의 PowerShell 세션으로 돌아가 파일 공유에 액세스할 수 있도록 컴퓨터 계정에 windows-fci 권한을 부여합니다:

    icacls C:\QWitness\ /grant 'windows-fci$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'windows-fci$' `
      -AccessRight Full `
      -Force
    
  6. node-1의 PowerShell 세션으로 돌아가 witness의 파일 공유를 클러스터 쿼럼으로 사용하도록 구성합니다.

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. 클러스터가 성공적으로 생성되었는지 확인합니다.

    Test-Cluster
    

    다음과 같이 무시할 수 있는 경고가 표시될 수 있습니다.

    WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings..
    WARNING: Network - Validate Network Communication: The test reported some warnings..
    WARNING:
    Test Result:
    HadUnselectedTests, ClusterConditionallyApproved
    Testing has completed for the tests you selected. You should review the warnings in the Report.  A cluster solution is
    supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings).
    

    cluadmin.msc를 실행하여 장애 조치 클러스터 관리자 MMC 스냅인을 실행하여 클러스터 상태를 검토할 수도 있습니다.

  8. 관리형 AD를 사용할 경우 컴퓨터를 도메인에 조인할 수 있도록 WSFC에서 사용하는 컴퓨터 계정을 Cloud 서비스 도메인 조인 계정 그룹에 추가합니다.

    Install-WindowsFeature RSAT-ADDS
    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members windows-fci$
    

Storage Spaces Direct 사용 설정

이제 S2D를 사용 설정하고 앞에서 만든 영구 디스크 3개를 결합하여 클러스터 공유 볼륨을 만듭니다.

  1. node-1의 PowerShell 세션으로 돌아갑니다.
  2. S2D를 사용 설정합니다.

    Enable-ClusterStorageSpacesDirect
    

    필요한 경우 디스크 성능을 높이기 위해 표준 SSD 영구 디스크 외에도 SCSI 로컬 SSD를 S2D 노드에 추가할 수 있습니다. 로컬 SSD는 S2D 캐싱 계층으로 사용할 수 있습니다. 용량 드라이브(이 경우에는 SSD 영구 디스크)의 수는 로컬 SSD 수의 배수여야 합니다. 캐싱과 함께 S2D를 사용 설정하는 대신 다음 명령어를 실행합니다.

    Enable-ClusterStorageSpacesDirect -CacheDeviceModel "EphemeralDisk"
    

    확인 메시지가 나타나면 기본값을 승인합니다. 다음과 같이 무시할 수 있는 경고가 표시될 수 있습니다.

    WARNING: 2021/04/08-13:12:26.159 Node node-1: No disks found to be used for cache
    WARNING: 2021/04/08-13:12:26.159 Node node-2: No disks found to be used for cache
    
  3. 필요한 경우 읽기 처리량을 높이려면 클러스터 공유 볼륨(CSV)의 인메모리 캐시를 2048MB로 설정합니다.

    (Get-Cluster).BlockCacheSize = 2048
    
  4. ReFS의 클러스터 공유 볼륨 버전과 64KB 클러스터 크기를 사용하는 새 볼륨을 만듭니다.

    New-Volume `
      -StoragePoolFriendlyName S2D* `
      -FriendlyName FciVolume `
      -FileSystem CSVFS_ReFS `
      -UseMaximumSize `
      -AllocationUnitSize 65536
    

스토리지 풀 장애 조치 테스트

필요한 경우 이제 스토리지 풀 장애 조치가 올바르게 작동하는지 테스트할 수 있습니다.

  1. 원격 데스크톱을 사용하여 node-2에 연결합니다. 도메인 사용자 계정으로 로그인합니다.
  2. 시작 버튼을 마우스 오른쪽 버튼으로 클릭하거나 Win+X를 누르고 실행을 선택합니다.
  3. cluadmin.msc를 입력하고 확인을 선택합니다.
  4. 왼쪽 창에서 장애 조치 클러스터 관리자 > windows-fci > 스토리지 > 풀로 이동합니다.

    소유자 노드node-1로 설정하면 클러스터 풀 1이라는 풀이 표시됩니다.

  5. Cloud Shell로 돌아가 node-1 VM을 재설정하여 장애 조치를 시뮬레이션합니다.

    gcloud compute instances reset node-1 --zone $REGION-a
    
  6. node-2장애 조치 클러스터 관리자로 돌아갑니다.

  7. F5를 반복해서 눌러 뷰를 새로 고쳐 스토리지 풀 상태를 관찰합니다.

    약 30초 후에 소유자 노드가 자동으로 node-2로 전환됩니다.

기본 SQL Server 설치 제거

이제 두 노드에서 기본 SQL Server 설치를 삭제하고 새 FCI 구성으로 바꿉니다.

WSFC 노드 두 개(node-1node-2) 각각에 다음 단계를 수행합니다.

  1. Start(시작) 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell(관리자)을 클릭합니다.
  2. 를 클릭하여 권한 승격 프롬프트를 확인합니다.
  3. 기본 SQL Server 인스턴스를 삭제합니다.

    C:\sql_server_install\Setup.exe /Action=Uninstall /FEATURES=SQL,AS,IS,RS /INSTANCENAME=MSSQLSERVER /Q
    
  4. Microsoft OLE 드라이버를 삭제합니다.

    Get-Package -Name "Microsoft OLE*" | Uninstall-Package -Force
    
  5. Microsoft ODBC 드라이버를 삭제합니다.

    Get-Package -Name "Microsoft ODBC*" | Uninstall-Package -Force
    
  6. 컴퓨터를 다시 시작합니다.

    Restart-Computer
    
  7. 다시 시작이 완료될 때까지 1분 정도 기다립니다.

SQL Server FCI 설치

새 FCI 구성을 설치하기 전에 node-1이 클러스터의 활성 노드인지 확인합니다.

  1. 원격 데스크톱을 사용하여 node-1에 다시 연결하고 도메인 사용자를 사용하여 로그인합니다.
  2. 시작 버튼을 마우스 오른쪽 버튼으로 클릭하거나 Win+X를 누르고 실행을 선택합니다.
  3. cluadmin.msc를 입력하고 확인을 선택합니다.
  4. 왼쪽 창에서 장애 조치 클러스터 관리자 > windows-fci로 이동합니다.

    현재 호스트 서버node-1로 설정되어 있는지 확인합니다.

    현재 호스트 서버node-2로 설정되어 있으면 왼쪽 창 창에서 windows-fci를 마우스 오른쪽 버튼으로 클릭하고 추가 작업 > 코어 클러스터 리소스 이동 > 노드 선택… > node-1을 선택하고 확인을 클릭합니다.

  5. 왼쪽 창에서 장애 조치 클러스터 관리자 > windows-fci > 스토리지 > 풀로 이동합니다.

    클러스터 풀 1소유자 노드node-1로 설정되어 있는지 확인합니다.

    소유자 노드node-2로 설정되어 있으면 풀을 마우스 오른쪽 버튼으로 클릭하고 이동 > 노드 선택 > node-1을 선택한 후 확인을 클릭합니다.

이제 node-1에 새 SQL Server 장애 조치 클러스터 설치를 만듭니다.

  1. Start(시작) 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell(관리자)을 클릭합니다.
  2. 를 클릭하여 권한 승격 프롬프트를 확인합니다.
  3. SQL 서버와 SQL 에이전트의 도메인 사용자 계정을 만들고 비밀번호를 할당합니다.

    Active Directory

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Agent and SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true
    

    관리형 Microsoft AD

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Agent and SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true `
      -Path "OU=Cloud,DOMAIN"
    

    DOMAIN을 도메인의 고유 이름(예: DC=example,DC=org)으로 바꿉니다.

  4. SQL Server 설정을 시작합니다.

    & c:\sql_server_install\setup.exe
    
  5. 왼쪽 메뉴에서 설치를 선택합니다.

  6. 새 SQL Server 장애 조치 클러스터 설치를 선택합니다.

  7. Microsoft 업데이트 페이지에서 다음을 선택하여 설치를 시작합니다.

  8. 장애 조치 클러스터 규칙 설치 페이지에 MSCS 클러스터 확인 경고Windows 방화벽 경고가 표시됩니다. 이 경고를 무시하고 다음을 선택할 수 있습니다.

  9. 프로덕션 키 페이지에서 기본값을 그대로 두고 다음을 선택합니다.

  10. 라이선스 약관 페이지에서 약관을 검토하고 동의할 경우 다음을 선택합니다.

  11. 기능 선택 페이지에서 데이터베이스 엔진 서비스를 선택하고 다음을 선택합니다.

  12. 인스턴스 구성 페이지에서 네트워크 이름 및 이름이 지정된 인스턴스에 sql을 입력하고 다음을 선택합니다.

  13. 클러스터 리소스 그룹 페이지에서 기본값을 그대로 두고 다음을 선택합니다.

  14. 클러스터 디스크 선택 페이지에서 클러스터 가상 디스크(FciVolume)를 사용 설정하고 다른 모든 디스크를 사용 중지합니다. 다음을 선택합니다.

  15. 클러스터 네트워크 구성 페이지에서 다음 설정을 구성한 후 다음을 선택합니다.

    • DHCP: 지웁니다.
    • IP 주소: 내부 부하 분산기 IP 주소를 입력합니다.
  16. 서버 구성 페이지에서 SQL Server 에이전트SQL Server 데이터베이스 엔진 모두에 다음 설정을 구성합니다.

    • 계정 이름: DOMAIN\sql_server. 여기서 DOMAIN은 Active Directory 도메인의 NetBIOS 이름입니다.
    • 비밀번호: 이전에 만든 비밀번호를 입력합니다.
  17. 콜레이션 탭을 선택하고 사용할 콜레이션을 선택합니다. 다음을 클릭합니다.

  18. 데이터베이스 엔진 구성 페이지에서 현재 사용자 추가를 선택하여 현재 사용자를 SQL Server 관리자로 지정합니다. 다음을 선택합니다.

  19. 설치 준비 페이지에서 설정을 검토한 후 설치를 선택합니다.

  20. 설치가 완료되면 닫기를 선택합니다.

이제 Active Directory 도메인에 SQL Server 인스턴스를 나타내는 컴퓨터 계정 sql과 내부 부하 분산기의 IP 주소를 가리키는 해당 DNS 항목이 포함됩니다.

이제 node-2를 SQL Server 장애 조치 클러스터에 추가합니다.

  1. 원격 데스크톱을 사용하여 node-2에 연결하고 도메인 사용자를 사용하여 로그인합니다.
  2. Start(시작) 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell(관리자)을 클릭합니다.
  3. 를 클릭하여 권한 승격 프롬프트를 확인합니다.
  4. SQL Server 설정을 시작합니다.

    & c:\sql_server_install\setup.exe
    
  5. 왼쪽 메뉴에서 설치를 선택합니다.

  6. SQL Server 장애 조치 클러스터에 노드 추가를 선택합니다.

  7. 설치 마법사 안내를 따라 서비스 계정 페이지에 도달할 때까지 기본 설정을 수락합니다.

  8. 서비스 계정 페이지에서 SQL Server 에이전트SQL Server 데이터베이스 엔진 모두에 이전에 만든 비밀번호를 입력합니다. 다음을 선택합니다.

  9. 설치 준비 페이지에서 설정을 검토한 후 설치를 선택합니다.

  10. 설치가 완료되면 닫기를 선택합니다.

상태 확인 구성

마지막 단계로 내부 부하 분산기에서 사용할 수 있는 상태 확인 엔드포인트를 노출하도록 클러스터를 구성합니다.

  1. node-2의 PowerShell 세션으로 돌아갑니다.
  2. 부하 분산기의 IP 주소로 변수를 초기화합니다.

    $LoadBalancerIP = 'IP_ADDRESS'
    

    IP_ADDRESS를 이전에 예약한 wsfc 주소의 IP 주소로 바꿉니다.

  3. 장애 조치 클러스터가 상태 확인 서비스에 응답하도록 구성합니다.

    $SqlGroup = Get-ClusterGroup |
      Where-Object {$_.Name.StartsWith("SQL Server")}
    $SqlIpAddress = Get-ClusterResource |
      Where-Object {$_.Name.StartsWith("SQL IP Address")}
    
    $SqlIpAddress | Set-ClusterParameter -Multiple @{
     'Address'=$LoadBalancerIP;
     'ProbePort'= 59997;
     'SubnetMask'='255.255.255.255';
     'Network'= (Get-ClusterNetwork).Name;
     'EnableDhcp'=0; }
    
  4. 클러스터 리소스를 다시 시작합니다.

    $SqlIpAddress | Stop-ClusterResource
    $SqlIpAddress | Start-ClusterResource
    
  5. 클러스터 그룹을 다시 시작합니다.

    $SqlGroup | Stop-ClusterGroup
    $SqlGroup | Start-ClusterGroup
    

내부 부하 분산기 만들기

SQL Server 클라이언트에 단일 엔드포인트를 제공하려면 이제 내부 부하 분산기를 배포합니다. 이 부하 분산기는 트래픽을 WSFC의 활성 노드로 전달하는지 확인하는 상태 확인을 사용합니다.

  1. 기존 Cloud Shell 세션으로 돌아갑니다.
  2. 비관리형 인스턴스 그룹을 영역당 하나씩 두 개를 만들고 노드 두 개를 그룹에 추가합니다.

    gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $REGION-a
    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $REGION-a \
      --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $REGION-b
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $REGION-b \
      --instances node-2
    
  3. 부하 분산기가 활성 노드를 확인하는 데 사용할 수 있는 상태 확인을 만듭니다.

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59997 \
      --timeout="1s"
    

    상태 점검 시 이전에 SQL Server IP 주소 리소스에 대해 ProbePort로 구성한 포트인 59997을 검색합니다.

  4. 백엔드 서비스를 만들고 인스턴스 그룹 두 개를 추가합니다.

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $(gcloud config get-value compute/region) \
      --health-checks wsfc-healthcheck \
      --protocol tcp
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $REGION-a \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $REGION-b \
      --region $REGION
    
  5. 내부 부하 분산기를 만듭니다.

    gcloud compute forwarding-rules create wsfc-sql \
      --load-balancing-scheme internal \
      --address $LOADBALANCER_ADDRESS \
      --ports 1433 \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --backend-service wsfc-backend
    

장애 조치 클러스터 테스트

장애 조치 클러스터 설치를 완료했습니다. 하지만 클러스터가 올바르게 작동하는지 테스트해야 합니다.

클라이언트 준비

장애 조치 클러스터에 연결하는 데 사용할 수 있는 새 VM 인스턴스를 만듭니다.

  1. 기존 Cloud Shell 세션으로 돌아갑니다.
  2. 새 VM 인스턴스를 만듭니다.

    gcloud compute instances create sqlclient \
      --zone $REGION-a \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2019-win-2022 \
      --image-project windows-sql-cloud \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd
    
  3. 직렬 포트 출력을 확인하여 VM의 초기화 프로세스를 모니터링합니다.

    gcloud compute instances tail-serial-port-output sqlclient
    

    Instance setup finished 출력이 표시될 때까지 몇 분 정도 기다린 다음 Ctrl+C를 누릅니다. 이제 VM 인스턴스를 사용할 수 있습니다.

  4. VM 인스턴스에 대해 사용자 이름과 비밀번호를 만듭니다.

  5. 원격 데스크톱을 사용하여 VM에 연결하고 이전 단계에서 만든 사용자 이름과 비밀번호를 사용하여 로그인합니다.

  6. Start(시작) 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell(관리자)을 클릭합니다.

  7. 를 클릭하여 권한 승격 프롬프트를 확인합니다.

  8. 컴퓨터를 Active Directory 도메인에 연결합니다.

    Add-Computer -Domain DOMAIN
    

    DOMAIN을 Active Directory 도메인의 DNS 이름으로 바꿉니다.

  9. 컴퓨터를 다시 시작합니다.

    Restart-Computer
    

    다시 시작이 완료될 때까지 1분 정도 기다립니다.

테스트 실행

sqlclient VM을 사용하여 장애 조치 클러스터에 연결할 수 있는지 테스트하고 장애 조치가 올바르게 작동하는지 확인합니다.

  1. 원격 데스크톱을 사용하여 sqlclient에 연결하고 도메인 사용자를 사용하여 로그인합니다.
  2. Start(시작) 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell을 클릭합니다.
  3. TCP/IP 및 DNS 이름 sql을 사용하여 SQL Server 클러스터에 연결하고 dm_os_cluster_nodes 테이블을 쿼리합니다.

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S tcp:sql -E -Q "SELECT * FROM sys.dm_os_cluster_nodes"
    

    출력은 다음과 같습니다.

    NodeName                       status      status_description is_current_owner
    ------------------------------ ----------- ------------------ ----------------
    NODE-1                                   0 up                                1
    NODE-2                                   0 up                                0
    
    (2 rows affected)
    

    node-1은 SQL Server 장애 조치 클러스터 리소스의 현재 소유자입니다.

  4. Cloud Shell로 돌아가 node-1 VM을 삭제하여 장애 조치 시나리오를 테스트합니다.

    gcloud compute instances stop node-1 --zone $REGION-a
    
  5. 다음 쿼리를 반복합니다.

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S tcp:sql -E -Q "SELECT * FROM sys.dm_os_cluster_nodes"
    

    다음과 비슷한 결과가 출력됩니다.

    NodeName                       status      status_description is_current_owner
    ------------------------------ ----------- ------------------ ----------------
    NODE-1                                   1 down                              0
    NODE-2                                   0 up                                1
    
    (2 rows affected)
    

    node-1이 손실되었음에도 쿼리가 성공했으므로 node-2가 장애 조치 클러스터의 현재 소유자임을 알 수 있습니다.

제한사항

  • S2D는 Windows Server 2016 이상에서만 지원됩니다.
  • S2D를 사용하면 각 디스크에 전체 데이터의 일부 뷰만 포함됩니다. 따라서 영구 디스크 스냅샷 생성은 데이터 백업으로 부족합니다. 대신 네이티브 SQL 백업을 사용합니다.

삭제

튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 할당량 사용을 중지하고 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

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

    리소스 관리로 이동

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

다음 단계