비동기 PD를 사용하여 Microsoft SQL Server 재해 복구 설정


이 튜토리얼에서는 두 Google Cloud 리전에서 재해 복구(DR) 솔루션으로 Persistent Disk 비동기 복제(PD 비동기 복제)를 사용 설정하는 방법과 재해 발생 시 DR 인스턴스를 가져오는 방법을 설명합니다. 이 문서에서 재해는 기본 데이터베이스 고가용성(HA) 클러스터에 장애가 발생하거나 사용할 수 없는 상태를 의미합니다. 기본 데이터베이스는 데이터베이스가 위치한 리전에 장애가 발생하거나 액세스할 수 없는 상태가 되었을 때 장애가 발생할 수 있습니다.

이 가이드는 데이터베이스 설계자, 관리자, 엔지니어를 대상으로 합니다.

목표

  • Google Cloud에서 실행되는 모든 SQL Server AlwaysOn 가용성 그룹 클러스터 노드에 비동기 Persistent Disk 복제를 사용 설정합니다.
  • 재해 이벤트를 시뮬레이션하고 전체 재해 복구 프로세스를 수행하여 재해 복구 구성을 검사합니다.

비용

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

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. 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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

Google Cloud의 재해 복구

Google Cloud에서 DR은 특히 리전에 장애가 발생하거나 액세스할 수 없을 때 연속적인 처리 기능을 제공하는 것입니다. DR 사이트에는 여러 배포 옵션이 있으며 목표 복구 시간(RPO) 및 복구 시간 목표(RTO) 요구사항에 따라 결정됩니다. 이 튜토리얼에서는 가상 머신(VM) 디스크가 기본 리전에서 DR 리전으로 복제되는 옵션 중 하나를 설명합니다.

비동기 Persistent Disk 복제를 위한 재해 복구

Persistent Disk 비동기 복제(PD 비동기 복제)는 리전 간 활성-수동 DR을 위해 낮은 RPO 및 RTO 블록 스토리지 복제를 제공합니다.

PD 비동기 복제는 두 리전 사이에 비동기 데이터 복제 기능을 제공하는 스토리지 옵션입니다. 드물게 발생하는 리전 중단의 경우에도 PD 비동기 복제를 사용하면 데이터를 보조 리전으로 장애 조치하고 이 리전에서 워크로드를 다시 시작할 수 있습니다.

PD 비동기 복제는 실행 중인 워크로드에 연결된 디스크(기본 디스크)의 데이터를 다른 리전에 있는 별도의 디스크에 복제합니다. 복제된 데이터를 수신하는 디스크를 보조 디스크라고 합니다.

각 SQL Server 노드에 연결된 모든 디스크의 복제본에 동일한 시점의 데이터가 포함되도록 하려면 디스크를 일관성 그룹에 추가합니다. 일관성 그룹을 사용하면 여러 디스크 간에 DR 및 DR 테스트를 수행할 수 있습니다.

재해 복구 아키텍처

PD 비동기 복제의 경우 다음 다이어그램은 기본 리전에서 데이터베이스 HA를 지원하고 기본 리전에서 DR 리전으로의 디스크 복제를 지원하는 최소한의 아키텍처를 보여줍니다.

기본 및 대기 인스턴스가 R1 리전의 두 영역에 배포되고, 기본 디스크는 비동기 복제를 사용하여 R2 리전에 복제됩니다.

그림 1. Microsoft SQL Server 및 PD 비동기 복제를 사용한 재해 복구 아키텍처

이 아키텍처의 동작은 다음과 같습니다.

  • Microsoft SQL Server의 두 인스턴스인 기본 인스턴스와 보조 인스턴스는 가용성 그룹의 일부이며 동일한 리전(R1)에 배치되지만 영역은 서로 다릅니다(A 및 B 영역). R1에 있는 두 인스턴스는 동기 커밋 모드를 사용하여 해당 상태를 조정합니다. 동기 모드가 사용되는 이유는 고가용성을 지원하고 데이터를 일관적인 상태로 유지하기 때문입니다.
  • 두 SQL 노드의 디스크가 일관성 그룹에 추가되고 DR 리전 R2에 복제됩니다. 데이터는 기본 인프라에서 비동기식으로 복제됩니다.
  • 디스크만 R2 리전에 복제됩니다. DR 중에 새 VM이 생성되고 노드를 온라인으로 전환하기 위해 기존에 복제된 디스크가 VM에 연결됩니다.

재해 복구 프로세스

리전을 사용할 수 없게 되면 DR 프로세스가 시작됩니다. DR 프로세스에는 리전 장애를 완화하고 사용 가능한 리전에서 실행되는 기본 인스턴스를 설정하기 위해 수동 또는 자동으로 수행해야 하는 작업 단계가 기술됩니다.

기본 데이터베이스 DR 프로세스는 다음 단계들로 구성됩니다.

  1. 기본 데이터베이스 인스턴스를 실행하는 첫 번째 리전(R1)이 사용할 수 없는 상태가 됩니다.
  2. 운영팀이 재해 상태를 인식하고, 공식적으로 재해를 인정하고, 장애 조치가 필요한지 여부를 결정합니다.
  3. 장애 조치가 필요한 경우 기본 리전에서 DR 리전으로의 디스크 복제가 종료됩니다. 디스크 복제본에서 새 VM이 생성되고 온라인 상태가 됩니다.
  4. DR 리전(R2)의 새 기본 데이터베이스가 검증되고 온라인으로 전환되어 연결이 가능해집니다.
  5. 사용자가 새로운 기본 데이터베이스에서 처리를 재개하고 R2의 기본 인스턴스에 액세스합니다.

이러한 기본 프로세스는 작동하는 기본 데이터베이스를 다시 설정하지만, 새 기본 노드에 대기 노드가 있는 전체 HA 아키텍처를 설정하지 않습니다.

기본 및 대기 인스턴스가 R1 리전의 두 영역에 배포되고, 기본 디스크는 비동기 복제를 사용하여 R2 리전에 복제됩니다.

그림 2. Persistent Disk 비동기 복제로 재해 복구 후 SQL Server 배포

복구된 리전으로 대체

기본 리전(R1)이 온라인으로 전환되면 장애 복구 프로세스를 계획하고 실행할 수 있습니다. 장애 복구 프로세스는 이 튜토리얼에 설명된 모든 단계로 구성되지만 이 경우 R2가 소스이고 R1이 복구 리전입니다.

SQL Server 버전 선택

이 가이드에서 지원되는 Microsoft SQL Server 버전은 다음과 같습니다.

  • SQL Server 2016 Enterprise Edition
  • SQL Server 2017 Enterprise Edition
  • SQL Server 2019 Enterprise Edition
  • SQL Server 2022 Enterprise Edition

이 튜토리얼에서는 SQL Server의 AlwaysOn 가용성 그룹 기능이 사용됩니다.

HA Microsoft SQL Server 기본 데이터베이스가 필요하지 않고, 단일 데이터베이스 인스턴스만 기본 인스턴스로 사용해도 충분한 경우에는 다음 SQL Server를 사용할 수 있습니다.

  • SQL Server 2016 Standard Edition
  • SQL Server 2017 Standard Edition
  • SQL Server 2019 Standard Edition
  • SQL Server 2022 Standard Edition

SQL Server의 2016, 2017, 2019, 2022 버전에서는 Microsoft SQL Server Management Studio가 이미지에 설치되어 있습니다. 따라서 이를 별도로 설치할 필요가 없습니다. 하지만 프로덕션 환경에서는 Microsoft SQL Server Management Studio의 한 인스턴스를 각 리전의 개별 VM에 설치하는 것이 좋습니다. HA 환경을 설정할 때는 한 영역을 사용할 수 없을 때 다른 영역을 사용할 수 있도록 각 영역에 대해 한 번씩 Microsoft SQL Server Management Studio를 설치해야 합니다.

Microsoft SQL Server 재해 복구 설정

이 튜토리얼에서는 Microsoft SQL Server Enterprise용 sql-ent-2022-win-2022 이미지를 사용합니다.

전체 이미지 목록은 OS 이미지를 참조하세요.

2인스턴스 고가용성 클러스터 설정

SQL Server의 DR 리전에 대한 디스크 복제를 설정하려면 먼저 한 리전에 2인스턴스 HA 클러스터를 만듭니다. 한 인스턴스는 기본 인스턴스로, 다른 인스턴스는 대기 인스턴스로 사용됩니다. 이 단계를 수행하려면 SQL Server AlwaysOn 가용성 그룹 구성의 안내를 따릅니다. 이 가이드에서는 기본 리전(R1으로 표시)에 us-central1이 사용됩니다. SQL Server AlwaysOn 가용성 그룹 구성의 단계를 따랐으면 동일 리전(us-central1)에 2개의 SQL Server 인스턴스가 생성됩니다. us-central1-a에 기본 SQL Server 인스턴스(node-1)를 배포하고 us-central1-b에 대기 인스턴스(node-2)를 배포해 보겠습니다.

디스크 비동기 복제 사용 설정

모든 VM이 생성되고 구성되면 VM에 연결된 모든 디스크에 일관성 그룹을 만들어 리전 간 디스크 복사를 사용 설정합니다. 데이터가 소스 디스크에서 지정된 리전의 새로 생성된 빈 디스크로 복사됩니다.

  1. SQL 노드와 도메인 컨트롤러 모두에 일관성 그룹을 만듭니다. 영역 디스크의 제한사항 중 하나는 일관성 그룹이 여러 영역에 걸쳐 있을 수 없다는 것입니다.

    gcloud compute resource-policies create disk-consistency-group node-1-disk-const-grp \
    --region=$REGION
    
    gcloud compute resource-policies create disk-consistency-group node-2-disk-const-grp \
    --region=$REGION
    
    gcloud compute resource-policies create disk-consistency-group witness-disk-const-grp \
    --region=$REGION
    
  2. 기본 및 대기 VM의 디스크를 상응하는 일관성 그룹에 추가합니다.

    gcloud compute disks add-resource-policies node-1 \
    --zone=$REGION-a \
    --resource-policies=node-1-disk-const-grp
    
    gcloud compute disks add-resource-policies node-1-datadisk \
    --zone=$REGION-a \
    --resource-policies=node-1-disk-const-grp
    
    gcloud compute disks add-resource-policies node-2 \
    --zone=$REGION-b \
    --resource-policies=node-2-disk-const-grp
    
    gcloud compute disks add-resource-policies node-2-datadisk \
    --zone=$REGION-b \
    --resource-policies=node-2-disk-const-grp
    
    gcloud compute disks add-resource-policies witness \
    --zone=$REGION-c \
    --resource-policies=witness-disk-const-grp
    
  3. 페어링된 리전에서 빈 보조 디스크 만들기

    DR_REGION="us-west1"
    gcloud compute disks create node-1-replica \
      --zone=$DR_REGION-a \
      --size=50 \
      --primary-disk=node-1 \
      --primary-disk-zone=$REGION-a
    
    gcloud compute disks create node-1-datadisk-replica \
      --zone=$DR_REGION-a \
      --size=$PD_SIZE \
      --primary-disk=node-1-datadisk \
      --primary-disk-zone=$REGION-a
    
    gcloud compute disks create node-2-replica \
      --zone=$DR_REGION-b \
      --size=50 \
      --primary-disk=node-2 \
      --primary-disk-zone=$REGION-b
    
    gcloud compute disks create node-2-datadisk-replica \
      --zone=$DR_REGION-b \
      --size=$PD_SIZE \
      --primary-disk=node-2-datadisk \
      --primary-disk-zone=$REGION-b
    
    gcloud compute disks create witness-replica \
      --zone=$DR_REGION-c \
      --size=50 \
      --primary-disk=witness \
      --primary-disk-zone=$REGION-c
    
  4. 디스크 복제를 시작합니다. 데이터가 기본 디스크에서 DR 리전의 새로 생성된 빈 디스크로 복제됩니다.

    gcloud compute disks start-async-replication node-1 \
      --zone=$REGION-a \
      --secondary-disk=node-1-replica \
      --secondary-disk-zone=$DR_REGION-a 
    
    gcloud compute disks start-async-replication node-1-datadisk \
      --zone=$REGION-a \
      --secondary-disk=node-1-datadisk-replica \
      --secondary-disk-zone=$DR_REGION-a 
    
    gcloud compute disks start-async-replication node-2 \
      --zone=$REGION-b \
      --secondary-disk=node-2-replica \
      --secondary-disk-zone=$DR_REGION-b 
    
    gcloud compute disks start-async-replication node-2-datadisk \
      --zone=$REGION-b \
      --secondary-disk=node-2-datadisk-replica \
      --secondary-disk-zone=$DR_REGION-b 
    
    gcloud compute disks start-async-replication witness \
      --zone=$REGION-c \
      --secondary-disk=witness-replica \
      --secondary-disk-zone=$DR_REGION-c 
    

이 시점에서 데이터가 리전 간에 복제되고 있어야 합니다. 각 디스크의 복제 상태는 Active이어야 합니다.

재해 복구 시뮬레이션

이 섹션에서는 이 튜토리얼에서 설정된 재해 복구 아키텍처를 테스트합니다.

서비스 중단 시뮬레이션 및 재해 복구 장애 조치 실행

DR 장애 조치 중에 DR 리전에 새 VM을 만들고 복제된 디스크를 연결합니다. 장애 조치를 단순화하기 위해서는 동일한 IP 주소를 사용하기 위해 복구용으로 DR 리전에서 다른 가상 프라이빗 클라우드(VPC)를 사용할 수 있습니다.

장애 조치를 시작하기 전에 node-1이 생성한 AlwaysOn 가용성 그룹의 기본 노드인지 확인합니다. 두 노드는 두 개의 별도 일관성 그룹으로 보호되므로 데이터 동기화 문제를 방지하기 위해 도메인 컨트롤러와 기본 SQL Server 노드를 가져옵니다. 서비스 중단을 시뮬레이션하려면 다음 단계를 따르세요.

  1. 복구 VPC를 만듭니다.

    DRVPC_NAME="default-dr"
    DRSUBNET_NAME="default-recovery"
    
    gcloud compute networks create $DRVPC_NAME \
    --subnet-mode=custom
    CIDR = $(gcloud compute networks subnets describe default \
    --region=$REGION --format=value\(ipCidrRange\))
    
    gcloud compute networks subnets create $DRSUBNET_NAME \
    --network=$DRVPC_NAME --range=$CIDR --region=$DR_REGION
    
  2. 데이터 복제를 종료합니다.

    PROJECT=$(gcloud config get-value project)
    gcloud compute disks stop-group-async-replication projects/$PROJECT/regions/$REGION/resourcePolicies/node-1-disk-const-grp \
    --zone=$REGION-a
    
    gcloud compute disks stop-group-async-replication projects/$PROJECT/regions/$REGION/resourcePolicies/node-2-disk-const-grp \
    --zone=$REGION-b
    
    gcloud compute disks stop-group-async-replication projects/$PROJECT/regions/$REGION/resourcePolicies/witness-disk-const-grp \
    --zone=$REGION-c
    
  3. 기본 리전에서 소스 VM을 중지합니다.

    gcloud compute instances stop node-1 \
      --zone=$REGION-a
    
    gcloud compute instances stop node-2 \
      --zone=$REGION-b
    
    gcloud compute instances stop witness \
      --zone=$REGION-c
    
  4. 디스크 복제본을 사용하여 DR 리전에 VM을 만듭니다. 이러한 VM에는 소스 VM의 IP 주소가 있습니다.

    NODE1IP=$(gcloud compute instances describe node-1 --zone $REGION-a --format=value\(networkInterfaces[0].networkIP\))
    NODE2IP=$(gcloud compute instances describe node-2 --zone $REGION-a --format=value\(networkInterfaces[0].networkIP\))
    WITNESSIP=$(gcloud compute instances describe witness --zone $REGION-a --format=value\(networkInterfaces[0].networkIP\))
    
    gcloud compute instances create node-1 \
      --zone=$DR_REGION-a \
      --machine-type $MACHINE_TYPE \
      --network=$DRVPC_NAME \
      --subnet=$DRSUBNET_NAME \
      --private-network-ip $NODE1IP\
      --disk=boot=yes,device-name=node-1-replica,mode=rw,name=node-1-replica \
      --disk=auto-delete=yes,boot=no,device-name=node-1-datadisk-replica,mode=rw,name=node-1-datadisk-replica
    
    gcloud compute instances create witness \
      --zone=$DR_REGION-c \
      --machine-type=n2-standard-2 \
      --network=$DRVPC_NAME \
      --subnet=$DRSUBNET_NAME \
      --private-network-ip $WITNESSIP \
      --disk=boot=yes,device-name=witness-replica,mode=rw,name=witness-replica
    

서비스 중단을 시뮬레이션하고 DR 리전으로 장애 조치했습니다. 이제 보조 인스턴스가 올바르게 작동하는지 테스트할 수 있습니다.

SQL Server 연결 확인

VM이 생성된 후 데이터베이스가 성공적으로 복구되었고 서버가 예상대로 작동하는지 확인합니다. 데이터베이스를 테스트하기 위해 복구된 데이터베이스에서 선택 쿼리를 실행합니다.

  1. 원격 데스크톱을 사용하여 SQL Server VM에 연결합니다.
  2. SQL Server 관리 스튜디오를 엽니다.
  3. 서버에 연결 대화상자에서 서버 이름이 NODE-1로 설정되어 있는지 확인하고 연결을 선택합니다.
  4. 파일 메뉴에서 현재 연결을 사용하여 File > New > Query를 선택합니다.

    USE [bookshelf];
    SELECT * FROM Books;
    

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.

프로젝트 삭제

  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.

다음 단계

  • Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기. Cloud 아키텍처 센터 살펴보기