고가용성을 사용하여 SQL Server 빅 데이터 클러스터 배포

적용 대상: SQL Server 2019(15.x)

중요

Microsoft SQL Server 2019 빅 데이터 클러스터 추가 기능이 사용 중지됩니다. SQL Server 2019 빅 데이터 클러스터에 대한 지원은 2025년 2월 28일에 종료됩니다. Software Assurance를 사용하는 SQL Server 2019의 모든 기존 사용자는 플랫폼에서 완전히 지원되며, 소프트웨어는 지원 종료 시점까지 SQL Server 누적 업데이트를 통해 계속 유지 관리됩니다. 자세한 내용은 공지 블로그 게시물Microsoft SQL Server 플랫폼의 빅 데이터 옵션을 참조하세요.

SQL Server 빅 데이터 클러스터는 Kubernetes에 컨테이너화된 애플리케이션으로 제공되고 상태 저장 세트 및 영구 스토리지와 같은 기능을 사용하므로, 이 인프라에는 클러스터 구성 요소에서 서비스 상태를 유지하는 데 활용하는 기본적으로 제공되는 상태 모니터링, 실패 검색 및 장애 조치 메커니즘이 있습니다. 안정성을 높이기 위해 고가용성 구성에서 추가 복제본과 함께 배포하도록 SQL Server 마스터 인스턴스 및/또는 HDFS 이름 노드 및 Spark 공유 서비스를 구성할 수도 있습니다. 모니터링, 오류 검색 및 자동 장애 조치(failover)는 대표적으로 제어 서비스라는 빅 데이터 클러스터 관리 서비스에서 관리됩니다. 이 서비스는 사용자 개입 없이 가용성 그룹 설정, 데이터베이스 미러링 엔드포인트 구성에서 가용성 그룹에 데이터베이스 추가 또는 장애 조치(failover) 및 업그레이드 조정에 이르기까지 모든 기능을 제공합니다.

다음 이미지에는 가용성 그룹이 SQL Server 빅 데이터 클러스터에 어떻게 배포되는지 나와 있습니다.

high-availability-ag-bdc

가용성 그룹에서 사용할 수 있는 몇 가지 기능은 다음과 같습니다.

  • 고가용성 설정이 배포 구성 파일에 지정된 경우 containedag로 명명된 단일 가용성 그룹이 만들어집니다. 기본적으로 포함된 containedag에는 기본을 포함하여 세 개의 복제본이 있습니다. 가용성 그룹 만들기 또는 만들어진 가용성 그룹에 복제본 조인을 포함하여 가용성 그룹에 대한 모든 CRUD 작업은 내부적으로 관리됩니다. 빅 데이터 클러스터의 SQL Server 마스터 인스턴스에서는 추가 가용성 그룹을 만들 수 없습니다.

  • 모든 사용자 및 시스템 데이터베이스(예: mastermsdb)를 포함하여 모든 데이터베이스가 가용성 그룹에 자동으로 추가됩니다. 이 기능은 가용성 그룹 복제본 전체에서 단일 시스템 보기를 제공합니다. 추가 모델 데이터베이스 model_replicatedmastermodel_msdb은 시스템 데이터베이스의 복제 부분을 시드하는 데 사용됩니다. 이러한 데이터베이스 외에도 인스턴스에 직접 연결하는 경우 containedag_mastercontainedag_msdb 데이터베이스가 표시됩니다. containedag 데이터베이스는 가용성 그룹 내의 mastermsdb를 나타냅니다.

    Important

    데이터베이스 연결 등의 워크플로의 결과로 인스턴스에서 만든 데이터베이스는 가용성 그룹에 자동으로 추가되지 않습니다. SQL Server 빅 데이터 클러스터 관리자는 이 작업을 수동으로 수행해야 합니다. SQL Server 인스턴스 master 데이터베이스에 임시 엔드포인트를 사용하도록 설정하는 방법을 알아보려면 SQL Server 인스턴스에 연결을 참조하세요. SQL Server 2019 CU2 릴리스 전에는 복원 문에 따라 생성된 데이터베이스의 동작이 동일했으며, 포함된 가용성 그룹에 데이터베이스를 수동으로 추가해야 했습니다.

  • PolyBase 구성 데이터베이스는 각 복제본(replica) 특정 인스턴스 수준 메타데이터를 포함하므로 가용성 그룹에 포함되지 않습니다.

  • 외부 엔드포인트는 가용성 그룹 내의 데이터베이스에 연결하기 위해 자동으로 프로비저닝됩니다. 이 master-svc-external 엔드포인트는 가용성 그룹 수신기의 역할을 수행합니다.

  • 두 번째 외부 엔드포인트는 읽기 워크로드를 확장하기 위해 보조 복제본(replica)에 대한 읽기 전용 연결을 위해 프로비전됩니다.

배포

가용성 그룹에 SQL Server 마스터를 배포하려면 다음을 수행합니다.

  1. hadr 기능 활성화
  2. AG에 대한 복제본(replica) 개수 지정(최소값: 3)
  3. 읽기 전용 보조 복제본(replica) 대한 연결을 위해 만든 두 번째 외부 엔드포인트의 세부 정보 구성

aks-dev-test-ha 또는 kubeadm-prod 기본 제공 구성 프로필을 사용하여 빅 데이터 클러스터 사용자 지정을 시작할 수 있습니다. 프로필에는 추가 고가용성을 구성할 수 있는 리소스에 필요한 설정이 포함됩니다. 예를 들어 아래는 SQL Server 마스터 인스턴스에 가용성 그룹을 사용하도록 설정하는 것과 관련된 bdc.json 구성 파일의 섹션입니다.

{
  ...
    "spec": {
      "type": "Master",
      "replicas": 3,
      "endpoints": [
        {
          "name": "Master",
          "serviceType": "LoadBalancer",
          "port": 31433
        },
        {
          "name": "MasterSecondary",
          "serviceType": "LoadBalancer",
          "port": 31436
        }
      ],
      "settings": {
        "sql": {
          "hadr.enabled": "true"
        }
      }
    }
  ...
}

다음 단계에서는 aks-dev-test-ha 프로필에서 시작하고 빅 데이터 클러스터 배포 구성을 사용자 지정하는 방법에 대한 예제를 안내합니다. kubeadm 클러스터에 배포하는 경우 비슷한 단계가 적용되지만 endpoints 섹션의 serviceTypeNodePort를 사용하고 있는지 확인합니다.

  1. 대상 프로필 복제

    azdata bdc config init --source aks-dev-test-ha --target custom-aks-ha
    
  2. 필요에 따라 사용자 지정 프로필을 편집합니다.

  3. 위에서 만든 클러스터 구성 프로필을 사용하여 클러스터 배포 시작

    azdata bdc create --config-profile custom-aks-ha --accept-eula yes
    

가용성 그룹의 SQL Server 데이터베이스에 연결

SQL Server 마스터에 대해 실행하려는 워크로드 유형에 따라 읽기/쓰기 워크로드의 주 데이터베이스 또는 읽기 전용 워크로드 유형에 대한 보조 복제본(replica) 데이터베이스에 연결할 수 있습니다. 각 연결 유형에 대한 개요는 다음과 같습니다.

주 복제본의 데이터베이스에 연결

기본 복제본(replica) 연결의 경우 sql-server-master 엔드포인트를 사용합니다. 이 엔드포인트는 AG의 수신기이기도 합니다. 이 엔드포인트를 사용하는 경우 모든 연결이 가용성 그룹 내의 데이터베이스 컨텍스트에 있습니다. 예를 들어 이 엔드포인트를 사용하는 기본 연결은 SQL Server 인스턴스 master 데이터베이스가 아닌 가용성 그룹 내의 master 데이터베이스에 연결됩니다. 이 명령을 실행하여 엔드포인트를 찾습니다.

azdata bdc endpoint list -e sql-server-master -o table
Description                           Endpoint             Name               Protocol
------------------------------------  -------------------  -----------------  ----------
SQL Server Master Instance Front-End  11.11.111.111,11111  sql-server-master  tds

참고 항목

장애 조치 이벤트는 HDFS 또는 데이터 풀과 같은 원격 데이터 원본의 데이터에 액세스하는 분산 쿼리를 실행하는 동안 발생할 수 있습니다. 장애 조치로 인해 연결이 끊기는 경우 애플리케이션에서 연결 다시 시도 논리를 사용하도록 설계하는 것이 좋습니다.

보조 복제본(replica)의 데이터베이스에 연결

보조 복제본(replica)의 데이터베이스에 대한 읽기 전용 연결의 경우 sql-server-master-readonly 엔드포인트를 사용합니다. 이 엔드포인트는 모든 보조 복제본(replica) 전반에서 부하 분산 장치처럼 작동합니다. 이 엔드포인트를 사용하는 경우 모든 연결이 가용성 그룹 내의 데이터베이스 컨텍스트에 있습니다. 예를 들어 이 엔드포인트를 사용하는 기본 연결은 SQL Server 인스턴스 master 데이터베이스가 아닌 가용성 그룹 내의 master 데이터베이스에 연결됩니다.

azdata bdc endpoint list -e sql-server-master-readonly -o table
Description                                    Endpoint            Name                        Protocol
---------------------------------------------  ------------------  --------------------------  ----------
SQL Server Master Readable Secondary Replicas  11.11.111.11,11111  sql-server-master-readonly  tds

SQL Server 인스턴스에 연결

서버 수준 구성을 설정하거나 가용성 그룹에 데이터베이스를 수동으로 추가하는 등의 특정 작업을 수행하려면 SQL Server 인스턴스에 연결해야 합니다. SQL Server 2019 CU2 이전의 경우 sp_configure, RESTORE DATABASE 또는 모든 가용성 그룹 DDL과 같은 작업에는 이 유형의 연결이 필요합니다. 기본적으로 빅 데이터 클러스터에는 인스턴스에 연결할 수 있는 엔드포인트가 포함되어 있지 않으며 엔드포인트를 수동으로 노출해야 합니다.

Important

SQL Server 인스턴스 연결에 대해 노출된 엔드포인트는 Active Directory가 활성화된 클러스터에서도 SQL 인증만 지원합니다. 기본적으로 빅 데이터 클러스터 배포 중에는 sa 로그인이 비활성화되고 AZDATA_USERNAMEAZDATA_PASSWORD 환경 변수에 대해 배포 시 제공된 값에 따라 새 sysadmin 로그인이 프로비전됩니다.

Important

포함된 가용성 그룹 DDL은 BDC가 단독으로 자체 관리합니다. 포함된 가용성 또는 데이터베이스 미러 엔드포인트를 삭제하려는 모든(외부 사용자) 시도는 지원되지 않으며 복구할 수 없는 BDC 상태로 이어질 수 있습니다.

이 엔드포인트를 공개한 다음, 복원 워크플로를 사용하여 만든 데이터베이스를 가용성 그룹에 추가하는 방법을 보여 주는 예제는 다음과 같습니다. sp_configure를 사용하여 서버 구성을 변경하려는 경우 SQL Server 마스터 인스턴스에 대한 연결을 설정하는 방법에 대한 유사한 지침이 적용됩니다.

참고 항목

SQL Server 2019 CU2부터 복원 워크플로로 인해 생성된 데이터베이스가 포함된 가용성 그룸에 자동으로 추가됩니다.

  • sql-server-master 엔드포인트에 연결하여 주 복제본을 호스팅하는 Pod를 결정하고 다음을 실행합니다.

    SELECT @@SERVERNAME
    
  • 새 Kubernetes 서비스를 만들어 외부 엔드포인트를 노출합니다.

    kubeadm 클러스터의 경우 아래 명령을 실행합니다. podName을 이전 단계에서 반환된 서버의 이름으로 바꾸고, serviceName을 만든 Kubernetes 서비스의 기본 설정 이름으로 바꾸고, namespaceName*를 빅 데이터 클러스터의 이름으로 바꿉니다.

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=NodePort
    

    aks 실행의 경우 생성된 서비스 유형이 LoadBalancer인 것을 제외하고 동일한 명령을 실행합니다. 예시:

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=LoadBalancer
    

    AKS에 대해 실행되는 이 명령의 예제는 다음과 같습니다. 여기서 주 복제본을 호스팅하는 Pod는 master-0입니다.

    kubectl -n mssql-cluster expose pod master-0 --port=1533  --name=master-sql-0 --type=LoadBalancer
    

    생성한 Kubernetes 서비스의 IP를 가져옵니다.

    kubectl get services -n <namespaceName>
    

Important

모범 사례로 다음 명령을 실행하여 위에서 만든 Kubernetes Service를 삭제하여 정리해야 합니다.

kubectl delete svc master-sql-0 -n mssql-cluster
  • 데이터베이스를 가용성 그룹에 추가합니다.

    데이터베이스를 AG에 추가하려면 해당 데이터베이스를 전체 복구 모드에서 실행하고 로그 백업을 수행해야 합니다. 위에서 만든 Kubernetes 서비스의 IP를 사용하여 SQL Server 인스턴스에 연결한 다음, T-SQL 문을 아래와 같이 실행합니다.

    ALTER DATABASE <databaseName> SET RECOVERY FULL;
    BACKUP DATABASE <databaseName> TO DISK='<filePath>'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE <databaseName>
    

    다음 예제에서는 인스턴스에 복원된 sales라는 데이터베이스를 추가합니다.

    ALTER DATABASE sales SET RECOVERY FULL;
    BACKUP DATABASE sales TO DISK='/var/opt/mssql/data/sales.bak'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE sales
    

알려진 제한 사항

빅 데이터 클러스터의 SQL Server 마스터에 대하여 포함된 가용성 그룹 관련 알려진 문제 및 제한 사항은 다음과 같습니다.

  • 빅 데이터 클러스터를 배포할 때는 고가용성 구성을 만들어야 합니다. 배포 후 가용성 그룹에서 고가용성 구성을 사용하도록 설정할 수 없습니다. 현재는 동기 커밋 복제본(replica) 구성만 사용할 수 있습니다.

Warning

쿼럼 커밋의 모든 복제본에 대한 비동기 커밋으로 동기화 모드를 업데이트하면 고가용성 구성이 잘못 생성됩니다. 기본 복제본(replica)에 영향을 주는 오류 이벤트의 경우 자동 장애 조치(failover)가 트리거되지 않으며 사용자가 수동 장애 조치(failover)를 실행할 때 데이터 손실 위험을 감수해야 하므로 이 구성에서 실행하면 데이터 손실 위험이 발생합니다.

  • 다른 서버에 생성된 백업에서 TDE 사용 데이터베이스를 복원하려면 SQL Server 인스턴스 마스터와 포함된 AG 마스터에서 모두 필수 인증서를 복원해야 합니다. 인증서를 백업하고 복원하는 방법에 대한 예제는 여기를 참조하세요.
  • 서버 구성 설정을 sp_configure와 실행하는 것과 같은 특정 작업은 가용성 그룹 master이 아닌 SQL Server 인스턴스 master 데이터베이스에 연결해야 합니다. 해당 기본 엔드포인트는 사용할 수 없습니다. 지침에 따라 엔드포인트를 노출하고 SQL Server 인스턴스에 연결하고 sp_configure를 실행합니다. 수동으로 엔드포인트를 노출하여 SQL Server 인스턴스 master 데이터베이스에 연결할 때만 SQL 인증을 사용할 수 있습니다.
  • 포함된 msdb 데이터베이스는 가용성 그룹에 포함되어 있고 SQL 에이전트 작업은 두루 복제되지만 일정에 따라서만 주 복제본에서 실행됩니다.
  • 포함된 가용성 그룹에는 복제 기능이 지원되지 않습니다. 포함된 AG의 SQL Server 인스턴스 부분은 인스턴스 수준 또는 포함된 AG 수준에서 배포자 또는 게시자로 기능할 수 없습니다.
  • 데이터베이스를 만들 때 파일 그룹 추가는 지원되지 않습니다. 해결 방법으로 먼저 데이터베이스를 만든 다음 ALTER DATABASE 문을 실행하여 파일 그룹을 추가할 수 있습니다.
  • SQL Server 2019 CU2 이전에는 CREATE DATABASERESTORE DATABASE(예: CREATE DATABASE FROM SNAPSHOT) 이외의 워크플로 결과로 생성된 데이터베이스가 가용성 그룹에 자동으로 추가되지 않았습니다. 인스턴스에 연결하고 데이터베이스를 가용성 그룹에 수동으로 추가합니다.
  • Service Broker 및 데이터베이스 메일은 현재 고가용성으로 배포된 빅 데이터 클러스터에서 지원되지 않습니다.

다음 단계