멀티 작성자 모드의 영구 디스크를 사용하는 SQL Server 장애 조치 클러스터 인스턴스 구성


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

SQL Server FCI는 모든 WSFC 노드에서 액세스할 수 있도록 데이터를 공유 스토리지에 저장해야 합니다. 이 가이드에서는 SQL Server 2022 장애 조치 클러스터 인스턴스를 배포하고 멀티 작성자 모드의 영구 디스크를 공유 스토리지로 사용하는 방법을 설명합니다.

온프레미스 환경에서는 장애 조치가 발생한 경우 WSFC가 ARP 알림을 수행하여 네트워크 장비에 IP 주소 변경을 알리게 할 수 있습니다. 그러나 Google Cloud는 ARP 알림을 무시합니다. 따라서 다음 두 가지 옵션 중 하나를 구현해야 합니다.

아키텍처

아키텍처

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

목표

  • SQL Server VM 인스턴스 두 개와 파일 공유 감시 역할을 하는 세 번째 VM 인스턴스로 구성된 WSFC를 배포합니다.
  • WSFC에 SQL Server FCI를 배포합니다.
  • SQL Server를 사용하여 트래픽을 가용성 그룹으로 라우팅하도록 부하 분산기 또는 분산 네트워크 이름(DNN)을 구성합니다.
  • 장애 조치를 시뮬레이션하여 클러스터가 작동하는지 확인합니다.

비용

이 튜토리얼에서는 비용이 청구될 수 있는 다음과 같은 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

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

프로젝트 및 네트워크 준비

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

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

    Google Cloud 콘솔로 이동

  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/zone ZONE
    

    ZONE을 배포하려는 영역의 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 범위에서 상태 점검을 허용하는 방화벽 규칙 만들기: (DNN 구성에는 필요하지 않음)

    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 인스턴스는 다음 조건을 충족해야 합니다.

  • 동일한 영구 디스크에 액세스할 수 있도록 같은 영역에 있어야 합니다.
  • Windows Server 장애 조치 클러스터링과 SQL Server가 설치되어 있어야 합니다.
  • Compute Engine WSFC 지원이 사용 설정되어 있어야 합니다.

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

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

  1. 기존 Cloud Shell 세션으로 돌아갑니다.
  2. 동일한 호스트나 전원 시스템을 공유하지 않도록 기본 데이터 센터 인프라에 WSFC 노드를 분산하는 분산 배치 정책을 만듭니다.

    ZONE=$(gcloud config get-value compute/zone)
    gcloud compute resource-policies create group-placement spread-placement \
      --availability-domain-count 2 \
      --region ${ZONE::-2}
    
  3. 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
    
  4. VM 인스턴스를 만들고 메타데이터 키 enable-wsfctrue로 설정하여 WSFC 노드에서 Windows Server 장애 조치 클러스터링 에이전트를 사용 설정합니다.

    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --resource-policies spread-placement \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-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" \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create node-2 \
      --resource-policies spread-placement \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-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" \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create "witness" \
      --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"
    
  5. VM 인스턴스 3개를 Active Directory에 조인하려면 VM 인스턴스 3개마다 다음을 수행합니다.

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

      gcloud compute instances tail-serial-port-output NAME
      

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

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

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

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

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

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

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

      Add-Computer -Domain DOMAIN -Restart
      

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

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

멀티 작성자 모드에서 영구 디스크 만들기

이제 멀티 작성자 모드에서 영구 디스크 3개를 만들고 각 영구 디스크를 WSFC 노드 모두에 연결합니다.

  1. 기존 Cloud Shell 세션으로 돌아갑니다.
  2. 공유 영구 디스크 3개를 만듭니다.

    PD_SIZE=50
    
    gcloud beta compute disks create datadisk-1 \
      --size $PD_SIZE \
      --type pd-ssd \
      --multi-writer \
      --zone $(gcloud config get-value compute/zone)
    gcloud beta compute disks create datadisk-2 \
      --size $PD_SIZE \
      --type pd-ssd \
      --multi-writer \
      --zone $(gcloud config get-value compute/zone)
    gcloud beta compute disks create datadisk-3 \
      --size $PD_SIZE \
      --type pd-ssd \
      --multi-writer \
      --zone $(gcloud config get-value compute/zone)
    
  3. 디스크를 node-1에 연결합니다.

    gcloud compute instances attach-disk node-1 --disk datadisk-1
    gcloud compute instances attach-disk node-1 --disk datadisk-2
    gcloud compute instances attach-disk node-1 --disk datadisk-3
    
  4. 디스크를 node-2에 연결합니다.

    gcloud compute instances attach-disk node-2 --disk datadisk-1
    gcloud compute instances attach-disk node-2 --disk datadisk-2
    gcloud compute instances attach-disk node-2 --disk datadisk-3
    

클러스터 IP 주소 예약

이제 VPC에서 고정 IP 주소 두 개를 예약합니다. IP 주소 하나는 WSFC 클러스터 IP 주소로 사용되고 다른 하나는 내부 부하 분산기에서 사용됩니다.

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

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

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

  2. 클러스터 IP로 사용할 다른 고정 IP 주소 예약: (DNN 구성에는 필요하지 않음)

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

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

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

감시 파일 공유 만들기

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

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

    • 부하 분산기 구성
    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_ADDRESS
    

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

    • DNN 구성
    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -ManagementPointNetworkType Distributed
    
  5. witness의 PowerShell 세션으로 돌아가 클러스터의 가상 컴퓨터 객체에서 파일 공유에 액세스할 수 있는 권한을 부여합니다.

    icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'sql-cluster$' `
      -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 서비스 도메인 조인 계정 그룹에 추가합니다.

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    

스토리지 풀 만들기

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

  1. node-1의 PowerShell 세션으로 돌아갑니다.
  2. 영구 디스크 3개를 사용하는 새 스토리지 풀을 만듭니다.

    $NodeName = [System.Net.Dns]::GetHostName()
    
    $ClusterDisks = Get-PhysicalDisk -CanPool $True |
      Where-Object { ($_ |
        Get-PhysicalDiskStorageNodeView |
        Select-Object -Property StorageNodeObjectId) -like ('*' + $NodeName + '*') }
    
    $Pool = New-StoragePool `
      -StorageSubsystemFriendlyName 'Clustered*' `
      -FriendlyName FciPool `
      -PhysicalDisks $ClusterDisks `
      -ResiliencySettingNameDefault Simple `
      -Verbose
    
  3. 스토리지 풀에서 ReFS의 클러스터 공유 볼륨 버전과 64KB 클러스터 크기를 사용하는 새 볼륨을 만듭니다.

    $Pool | New-Volume `
      -FriendlyName FciVolume `
      -FileSystem CSVFS_ReFS `
      -Size 100GB `
      -AllocationUnitSize 65536
    

    기본 영구 디스크가 두 VM 인스턴스 모두에 연결되어 있으므로 볼륨이 자동으로 node-2에 표시됩니다.

  4. 장애 조치 클러스터 관리자 MMC 스냅인을 엽니다.

    cluadmin.msc
    
  5. 왼쪽 창에서 장애 조치 클러스터 관리자 > sql-cluster > 스토리지 > 디스크로 이동합니다.

  6. 클러스터 가상 디스크(FciVolume)를 마우스 오른쪽 버튼으로 클릭하고 클러스터 공유 볼륨에서 삭제를 선택합니다.

  7. 클러스터 가상 디스크(FciVolume)를 선택합니다.

  8. 하단의 볼륨 탭에서 볼륨을 마우스 오른쪽 버튼으로 클릭하고 드라이브 문자 변경을 선택합니다.

  9. 드라이브 문자 D를 선택하고 확인을 클릭합니다.

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

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

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

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

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

    gcloud compute instances reset node-1
    
  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. 왼쪽 창에서 장애 조치 클러스터 관리자 > sql-cluster로 이동합니다.

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

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

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

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

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

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

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

    $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
    
  4. SQL Server 설정을 시작합니다.

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

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

  7. 버전 페이지에서 SQL Server 라이선스만 있습니다를 선택하고 다음을 선택합니다.

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

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

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

  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. 설치가 완료되면 닫기를 선택합니다.

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

  1. 원격 데스크톱을 사용하여 node-2에 연결하고 도메인 사용자를 사용하여 로그인합니다.
  2. 시작 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 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
    gcloud compute instance-groups unmanaged add-instances wsfc-group --instances node-1,node-2
    
  3. 부하 분산기가 활성 노드를 확인하는 데 사용할 수 있는 상태 확인을 만듭니다.

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

    상태 확인은 이전에 WSFC 클러스터 IP 주소의 ProbePort로 구성한 포트인 59997을 프로브합니다.

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

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

    gcloud compute forwarding-rules create wsfc-sql \
      --load-balancing-scheme internal \
      --address $LOADBALANCER_ADDRESS \
      --ports 1433 \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --backend-service wsfc-backend
    

DNN 리소스 및 DNN DNS 이름 구성

내부 부하 분산기와 마찬가지로 DNN 리소스는 SQL Server 클라이언트의 단일 게이트웨이 역할을 합니다. 장애 조치 동안 클러스터는 트래픽을 활성 SQL Server FCI 노드로 원활하게 라우팅합니다. 클라이언트는 DNS 이름으로 SQL Server FCI에 연결합니다.

  1. node-1의 PowerShell 세션으로 돌아갑니다.
  2. 스크립트를 실행하여 DNN 리소스를 만듭니다.

      $DNNResourceName='fci-dnn'
      $DNN_DNSName='fcidnn'
    
      # create the DNN resource
      Add-ClusterResource -Name $DNNResourceName -ResourceType 'Distributed Network Name' -Group 'SQL Server (MSSQLSERVER)'
    
      # set the DNS name of the DNN resource
      Get-ClusterResource -Name $DNNResourceName | Set-ClusterParameter -Name DnsName -Value $DNN_DNSName
    
      # start the DNN resource
      Start-ClusterResource -Name $DNNResourceName
    
  3. node-1node-2를 다시 시작합니다.

장애 조치 클러스터 테스트

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

클라이언트 준비

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

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

    gcloud compute instances create sqlclient \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-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
    

    출력 인스턴스 설정이 완료될 때까지 3분 정도 기다린 후 Ctrl+C를 누릅니다. 이제 VM 인스턴스를 사용할 수 있습니다.

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

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

  6. 시작 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 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. 시작 버튼을 마우스 오른쪽 버튼으로 클릭하고(또는 Win+X 누름) Windows PowerShell을 클릭합니다.
  3. 네트워크 이름 sql을 사용하여 SQL Server 클러스터에 연결하고 dm_os_cluster_nodes 테이블을 쿼리합니다.

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

    SQL_SERVER_NAME부하 분산기 구성sql 또는 DNN 구성fcidnn으로 바꿉니다.

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

    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
    
  5. 다음 쿼리를 반복합니다.

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

    SQL_SERVER_NAME부하 분산기 구성sql 또는 DNN 구성fcidnn으로 바꿉니다.

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

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

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

삭제

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

프로젝트 삭제

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

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

다음 단계