Cloud Volumes Service를 사용하여 Google Cloud Platform에서 SQL Server 구성


이 튜토리얼에서는 Google Cloud용 NetApp Cloud Volumes Service(CVS)를 사용하여 서버 메시지 블록(SMB) 파일 공유 스토리지에 설치된 SQL Server에 대해 복원력이 우수한 Google Cloud 환경을 구성하는 방법을 간략하게 설명합니다.

Microsoft SQL Server Always On 가용성 그룹(AG)을 사용하면 여러 SQL Server Enterprise 인스턴스에서 데이터베이스를 복제할 수 있습니다. 기존의 SQL Server Always On 인스턴스에서는 일반적으로 각 노드가 데이터 사본을 유지해야 하므로 데이터베이스가 커짐에 따라 빠르게 비용이 많이 들 수 있습니다. 예를 들어 기존 SQL Server Always On 배포에서 데이터베이스 크기가 10TB인 경우 각 복제본에 최소 10TB의 스토리지가 프로비저닝되어야 합니다. SQL Server에 Windows Server 장애 조치 클러스터(WSFC)를 배포하면 클러스터 노드 간에 공유되는 데이터 복사본이 하나만 있으면 됩니다. 따라서 WSFC의 장애 조치 클러스터 인스턴스(FCI)에서 SQL Server Always On을 실행하면 필요한 스토리지 양을 줄여 비용을 즉시 절약할 수 있습니다.

NetApp Cloud Volumes Service는 Compute Engine 인스턴스와 함께 고성능 SQL Server 워크로드를 실행할 수 있는 클라우드 스토리지 솔루션입니다. Cloud Volumes Service에서 SMB를 통한 SQL Server 데이터베이스는 Google Cloud 인스턴스와 스토리지 서비스 간에 매우 높은 수준의 복원력을 제공합니다. SMB 투명성 장애 조치는 SMB 볼륨의 데이터를 저장하고 액세스하는 서버 애플리케이션에 대한 연결을 중단하지 않고도 Cloud Volumes Service에서 유지보수 작업을 사용 설정합니다. SMB 투명성 장애 조치를 지원하기 위해 Cloud Volumes Service에서는 SQL Server 워크로드에 사용할 SMB 지속적 가용성(CA) 공유 옵션을 지원합니다. 이를 통해 단일 인스턴스, Always On 장애 조치 클러스터(AOFC) 인스턴스, Always On 가용성 그룹 배포에 대한 성능 개선, 확장성, 비용 이점을 얻을 수 있습니다.

이 페이지는 Google Cloud에서 Microsoft SQL Server를 배포해야 하는 NetApp Cloud Volumes Service 및 SQL Server 데이터베이스 관리자를 대상으로 합니다. 이 문서에서는 다음과 같이 가정합니다.

  • 사용자가 솔루션의 다양한 구성요소에 익숙합니다.
  • Google Cloud에 이미 Active Directory가 배포되었습니다.

목표

이 튜토리얼의 목표는 다음과 같습니다.

  • SQL Server용 Cloud Volumes Service 볼륨 만들기
  • Cloud Volumes Service에서 SMB를 통한 Always On 장애 조치 클러스터 배포

비용

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

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

시작하기 전에

이 가이드에는 Google Cloud 프로젝트가 필요합니다. 새 프로젝트를 만들거나 기존에 만든 프로젝트를 선택할 수 있습니다.

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

    Go to project selector

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

  3. 도메인 컨트롤러가 최소 하나 이상 있는 Active Directory 도메인 관리형 Microsoft AD를 사용하여 Active Directory 도메인을 만들 수 있습니다. 또는 Compute Engine에 커스텀 Active Directory 환경을 배포하고 DNS 쿼리를 도메인 컨트롤러에 전달하는 비공개 DNS 전달 영역을 설정할 수 있습니다.
  4. 컴퓨터를 도메인에 조인할 수 있는 권한이 있고 RDP를 사용하여 로그인할 수 있는 Active Directory 사용자입니다. 관리형 Microsoft AD를 사용하는 경우 setupadmin 사용자를 사용할 수 있습니다.
  5. Active Directory 도메인 컨트롤러에 연결된 Google Cloud 프로젝트 및 VPC
  6. Google Cloud 프로젝트에 NetApp Cloud Volumes API가 사용 설정되어 있는지 확인합니다.
  7. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

프로젝트 및 네트워크 준비

SQL Server Always On 가용성 그룹을 배포할 수 있도록 Google Cloud 프로젝트와 가상 프라이빗 클라우드(VPC)를 준비하려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서 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로 바꿉니다.

  5. 기본 영역을 설정합니다.

    gcloud config set compute/zone ZONE
    

    ZONE을 배포하려는 영역의 ID로 바꿉니다.

SQL Server용 Cloud Volumes Service에 SMB 만들기

Cloud Volumes Service 볼륨을 만들려면 Active Directory 정책, 비공개 서비스 액세스, 스토리지 풀, 스토리지 볼륨을 만들어야 합니다.

  1. 비공개 서비스 액세스를 만들려면 다음 안내를 따르세요.

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

      VPC 네트워크로 이동

    2. 사용할 VPC 네트워크 이름을 클릭합니다.

    3. 비공개 서비스 액세스 탭을 클릭한 후 IP 범위 할당을 클릭합니다.

      1. 내부 IP 범위의 이름을 입력합니다.
      2. 자동을 선택하고 프리픽스 길이에 값 24를 입력합니다.
      3. 할당 버튼을 클릭합니다.
    4. 서비스에 대한 비공개 연결 탭을 클릭하고 다음을 수행합니다.

      1. 연결 만들기 버튼을 클릭합니다.
      2. 지정된 할당 드롭다운에서 이전에 할당된 IP 범위를 선택합니다.
      3. 연결 버튼을 클릭합니다.
  2. Active Directory 정책을 만들려면 다음 안내를 따르세요.

    1. Google Cloud 콘솔에서 NetApp Volumes 페이지로 이동합니다.

      NetApp Volumes로 이동

    2. 탐색창의 정책 섹션에서 Active Directory 정책을 클릭합니다.

    3. 만들기 버튼을 클릭합니다.

    4. 액티브 디렉터리 정책의 이름을 지정합니다.

    5. 리전에서 SQL Server 인스턴스가 호스팅되는 위치와 가장 가까운 사용 가능한 리전을 선택합니다.

    6. Active Directory 연결 세부정보 섹션에 다음 정보를 입력합니다.

      1. 도메인 이름
      2. Active Directory DNS 서버 주소
      3. Active Directory 사이트 이름
      4. 조직 단위의 이름
      5. NetBIOS 이름 프리픽스
    7. Active Directory 사용자 인증 정보 섹션에서 컴퓨터를 지정된 도메인에 가입시킬 수 있는 사용자의 사용자 인증 정보를 입력합니다.

    8. SMB 설정 섹션에서 백업 연산자보안 권한 사용자를 제공합니다(해당하는 경우).

    9. 만들기를 클릭하여 새 Active Directory 정책 만들기 프로세스를 완료합니다.

  3. 새 스토리지 풀을 만들려면 다음을 수행합니다.

    1. 탐색창의 스토리지 섹션에서 스토리지 풀을 클릭합니다.
    2. 만들기 버튼을 클릭합니다.
    3. 스토리지 풀에 이름을 입력합니다.
    4. 위치에서 SQL Server 인스턴스가 호스팅되는 위치와 가장 가까운 사용 가능한 리전을 선택합니다.
    5. 예상되는 스토리지 성능을 충족하는 서비스 수준을 선택합니다.
    6. 스토리지 풀의 용량을 입력합니다. 스토리지 풀 용량은 풀 내의 모든 볼륨에 할당할 수 있는 총 스토리지 용량을 정의합니다.
    7. 네트워크 목록에서 다음과 같이 SQL Server 인스턴스가 호스팅될 VPC를 선택합니다.
      1. 연결 설정 버튼을 클릭합니다.
      2. 이전 단계에서 예약한 IP 주소 범위를 선택하고 계속을 클릭합니다.
      3. 연결 만들기 버튼을 클릭합니다.
    8. Active Directory 정책 섹션에서 스토리지 풀에 Active Directory 정책 할당을 선택하고 이전 단계에서 만든 Active Directory 정책을 선택합니다.
    9. 만들기 버튼을 클릭하여 새 스토리지 풀 만들기 프로세스를 완료합니다.
  4. 스토리지 볼륨을 만들려면 다음을 수행합니다.

    1. 탐색창의 스토리지 섹션에서 볼륨을 클릭합니다.
    2. 만들기 버튼을 클릭합니다.
    3. 스토리지 볼륨의 이름을 지정합니다.
    4. 스토리지 풀 세부정보에서 스토리지 풀 선택을 클릭하여 이전 단계에서 만든 스토리지 풀을 선택합니다.
    5. 볼륨 세부정보 섹션에서 다음 정보를 제공합니다.
      1. 공유 이름
      2. 볼륨 용량
    6. 대용량 구성 섹션에서 SMB 프로토콜을 선택합니다.
    7. 선택한 프로토콜의 구성 섹션에서 SQL Server, FSLogix의 CA 공유 지원 사용 설정을 선택합니다.
    8. 만들기 버튼을 클릭하여 새 스토리지 볼륨을 만드는 프로세스를 완료합니다.

방화벽 규칙 만들기

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

  • 사용하는 WSFC는 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 인스턴스 만들기

이제 장애 조치 클러스터에 대해 3개의 VM 인스턴스를 배포합니다.

Node-1은 SQL Server 데이터베이스의 기본 복제본을 호스팅하고 node-2는 보조 복제본을 호스팅합니다. 두 VM 인스턴스는 다음 조건을 충족해야 합니다.

  • 내부 패스 스루 네트워크 부하 분산기에서 액세스할 수 있도록 동일한 리전에 있어야 합니다.
  • SQL Server 프리미엄 이미지를 사용하여 WSFC 및 SQL Server 2022가 설치되어 있어야 합니다.

  • Compute Engine WSFC 지원이 사용 설정되어 있어야 합니다.

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

  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
    
    # Open firewall for SQL Server replication
    netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022
    
    EOF
    
  3. VM 인스턴스를 만듭니다. WSFC 노드로 작동하는 두 VM에서 메타데이터 키 enable-wsfctrue로 설정하여 추가 데이터 디스크를 연결하고 Windows Server 장애 조치 클러스터링을 사용 설정합니다.

    REGION=$(gcloud config get-value compute/region)
    PD_SIZE=200
    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-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 \
      --zone $REGION-b \
      --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" \
      --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. 시작 버튼을 마우스 오른쪽 버튼으로 클릭하거나 Win+X를 누르고 Windows PowerShell(관리자)을 클릭합니다.

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

    6. VM 인스턴스를 Active Directory 도메인에 조인하고 다시 시작합니다.

      Add-Computer -Domain DOMAIN -Restart
      

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

      VM 인스턴스가 다시 시작될 때까지 기다립니다.

스토리지 권한 할당

클라우드 볼륨 스토리지에 권한을 할당하려면 다음 단계를 완료하세요.

  1. Google Cloud 콘솔에서 Cloud Volumes를 선택하고 방금 만든 볼륨을 선택합니다.

    Cloud Volume

  2. 원격 데스크톱을 사용하여 node-1에 연결합니다. 도메인 사용자 계정으로 로그인합니다.

  3. Windows Explorer를 열고 이 PC를 마우스 오른쪽 버튼으로 클릭합니다.

  4. 네트워크 드라이브 매핑을 선택합니다.

  5. 복사한 SMB 경로를 폴더에 붙여넣습니다.

    Cloud Volume

  6. 로그인할 때 다시 연결 옵션을 사용 중지합니다.

  7. 마침을 클릭합니다.

  8. 매핑된 네트워크 드라이브를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.

    Cloud Volume

  9. 보안 탭에서 수정을 클릭합니다.

  10. 모든 사용자를 삭제하고 전체 제어 권한을 가진 SQL Server 설치 프로그램 및 SQL Server 서비스 계정을 추가합니다.

    Cloud Volume

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

클러스터 IP 주소 예약

VPC에 WSFC 클러스터 IP 주소용 고정 IP 주소와 내부 부하 분산기용 고정 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 주소를 예약합니다.

    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 windows-fci `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_ADDRESS
    

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

  5. witness의 PowerShell 세션으로 돌아가 클러스터의 가상 컴퓨터 객체에서 파일 공유에 액세스할 수 있는 권한을 부여합니다.

    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를 사용할 경우 VM 인스턴스를 도메인에 조인할 수 있도록 WSFC에서 사용하는 컴퓨터 계정을 Cloud 서비스 도메인 조인 계정 그룹에 추가합니다.

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members windows-fci$
    

기본 SQL Server 설치 제거

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

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

  1. 시작 버튼을 마우스 오른쪽 버튼으로 클릭하거나 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. VM 인스턴스가 다시 시작될 때까지 기다립니다.

SQL Server FCI 설치

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

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

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

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

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

  1. 시작 버튼을 마우스 오른쪽 버튼으로 클릭하거나 Win+X를 누르고 Windows PowerShell(관리자)을 클릭합니다.
  2. 를 클릭하여 권한 승격 프롬프트를 확인합니다.

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

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

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

  6. 버전 페이지에서 제품 키를 입력하고 소프트웨어 라이선스 유형을 선택한 후 다음을 클릭합니다.

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

  8. Microsoft 업데이트 페이지에서 다음을 클릭하여 설치를 시작합니다.

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

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

  11. 인스턴스 구성 페이지에서 네트워크 이름으로 sql을 입력하고 다음을 클릭합니다.

  12. 클러스터 리소스 그룹 페이지에서 자격 경고를 무시하고 다음을 클릭할 수 있습니다.

  13. 클러스터 디스크 선택 페이지에서 다음을 클릭합니다.

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

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

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

  17. 데이터베이스 엔진 구성 페이지에서 현재 사용자 추가를 선택하여 현재 사용자를 SQL Server 관리자로 지정합니다. 데이터 디렉터리 탭에서 데이터 루트 디렉터리 필드에 SMB 경로를 입력하고 다음을 선택합니다. SQL Server 서비스 계정에 모든 제어 공유 권한이 있는지 확인하라는 메시지 창이 표시됩니다. 를 선택하여 계속 진행합니다.

    Cloud Volume

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

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

이제 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. 비관리형 인스턴스 그룹을 만들고 노드 두 개를 그룹에 추가합니다.

    REGION=$(gcloud config get-value compute/region)
    
    gcloud compute instance-groups unmanaged create wsfc-group-a \
      --zone $REGION-a
    gcloud compute instance-groups unmanaged add-instances wsfc-group-a \ 
      --zone $REGION-a --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-b \
      --zone $REGION-b
    gcloud compute instance-groups unmanaged add-instances wsfc-group-b \ 
    --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"
    

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

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

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-healthcheck \
      --protocol tcp
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-a \
      --instance-group-zone $REGION-a \
      --region $REGION
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-b \
      --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 \
      --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
    

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

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

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

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

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

  8. VM 인스턴스를 Active Directory 도메인에 조인합니다.

    Add-Computer -Domain DOMAIN
    

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

  9. VM 인스턴스를 다시 시작합니다.

    Restart-Computer
    

    VM 인스턴스가 다시 시작될 때까지 기다립니다.

테스트 실행

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

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S 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가 장애 조치 클러스터의 현재 소유자임을 알 수 있습니다.

삭제

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

프로젝트 삭제

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

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

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

    리소스 관리로 이동

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