다음을 통해 공유


분산 AG를 사용하여 가용성 그룹을 마이그레이션합니다.

분산 AG(가용성 그룹)를 사용하여 Always On 가용성 그룹의 데이터베이스를 마이그레이션하는 동시에 Azure VM(Virtual Machines)의 SQL Server에서 HADR(고가용성 및 재해 복구) 지원 이후 마이그레이션을 유지합니다.

원본 SQL Server 인스턴스가 필수 구성 요소를 충족하는지 확인한 후 이 문서의 단계에 따라 Azure VM의 SQL Server에서 기존 가용성 그룹과 대상 가용성 그룹 간에 분산 가용성을 만듭니다.

이 문서는 가용성 그룹에 참여하는 데이터베이스를 위한 것이며 WSFC(Windows Server 장애 조치(Failover) 클러스터)와 가용성 그룹 수신기가 필요합니다. 독립 실행형 SQL Server 인스턴스에서 데이터베이스를 마이그레이션할 수도 있습니다.

분산된 가용성 그룹을 사용하여 가용성 그룹 마이그레이션을 설명하는 다이어그램입니다.

초기 설정

첫 번째 단계는 Azure에서 SQL Server VM을 만드는 것입니다. Azure Portal, Azure PowerShell 또는 ARM 템플릿을 사용하여 해당 작업을 수행할 수 있습니다.

필수 구성 요소에 따라 SQL Server VM을 구성해야 합니다. 가용성 그룹 수신기로 트래픽을 라우팅하기 위해 Azure Load Balancer 또는 분산 네트워크 이름을 사용하는 단일 서브넷 배포 또는 이러한 요구 사항이 없는 다중 서브넷 배포 중에서 선택합니다. 다중 서브넷 배포가 권장됩니다. 자세히 알아보려면 연결을 참조하세요.

간단하게 하기 위해 대상 SQL Server VM을 원본 SQL Server 인스턴스와 동일한 도메인에 조인합니다. 그렇지 않으면 대상 SQL Server VM을 원본 SQL Server 인스턴스의 도메인과 페더레이션된 도메인에 조인합니다.

자동 시드를 사용하여 DAG(분산 가용성 그룹)를 만들려면 DAG의 전역 기본(원본)에 대한 인스턴스 이름은 DAG의 전달자(대상)의 인스턴스 이름과 일치해야 합니다. 전역 기본 및 전달자 간에 인스턴스 이름이 일치하지 않는 경우 수동 시드를 사용하여 DAG를 만들고 향후 추가 데이터베이스 파일을 수동으로 추가해야 합니다.

이 문서에서는 다음 예제 매개 변수를 사용합니다.

  • 데이터베이스 이름: Adventureworks2022
  • 원본 머신 이름: OnPremNode1 (DAG의 전역 기본), OnPremNode2
  • 원본 SQL Server 인스턴스 이름: MSSQLSERVER, MSSQLSERVER
  • 원본 가용성 그룹 이름: OnPremAg
  • 원본 가용성 그룹 수신기 이름: OnPremAG_LST
  • 대상 SQL Server VM 이름: SQLVM1 (DAG의 전달자), SQLVM2
  • Azure VM 인스턴스 이름의 대상 SQL Server: MSSQLSERVER, MSSQLSERVER
  • 대상 가용성 그룹 이름: AzureAG
  • 원본 가용성 그룹 수신기 이름: AzureAG_LST
  • 엔드포인트 이름: Hadr_endpoint
  • 분산 가용성 그룹 이름: DAG
  • 도메인 이름: Contoso

엔드포인트 만들기

T-SQL(Transact-SQL)을 사용하여 두 원본 인스턴스(OnPremNode1, OnPremNode2) 및 대상 SQL Server 인스턴스(SQLVM1, SQLVM2) 모두에 엔드포인트를 만듭니다.

원본 인스턴스에 가용성 그룹이 이미 구성된 경우 두 대상 인스턴스에서만 이 스크립트를 실행합니다.

엔드포인트를 만들려면 원본 서버와 대상 서버 모두에서 이 T-SQL 스크립트를 실행합니다.

CREATE ENDPOINT [Hadr_endpoint] STATE = STARTED AS TCP (
    LISTENER_PORT = 5022,
    LISTENER_IP = ALL
)
FOR DATA_MIRRORING(ROLE = ALL,
    AUTHENTICATION = WINDOWS NEGOTIATE,
    ENCRYPTION = REQUIRED ALGORITHM AES);
GO

도메인 계정에는 자동으로 엔드포인트에 대한 액세스 권한이 있지만 서비스 계정은 자동으로 sysadmin에 속하지 않으며 연결 권한이 없을 수 있습니다. SQL Server 서비스 계정 연결 권한을 엔드포인트에 수동으로 부여하려면 두 서버 모두에서 다음 T-SQL 스크립트를 실행합니다.

GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [<your account>];

원본 AG 만들기

분산 가용성 그룹은 두 개의 개별 가용성 그룹에 걸쳐 있는 특수 가용성 그룹이기 때문에 먼저 두 원본 SQL Server 인스턴스에서 가용성 그룹을 만들어야 합니다.

원본 인스턴스에 가용성 그룹이 이미 있는 경우 이 섹션을 건너뜁니다.

T-SQL(Transact-SQL)을 사용하여 Adventureworks2022 데이터베이스 예제의 두 원본 인스턴스(OnPremNode1, OnPremNode2) 간에 가용성 그룹(OnPremAG)을 만듭니다.

원본 인스턴스에서 가용성 그룹을 만들 경우 원본 주 복제본(OnPremNode1)에서 다음 스크립트를 실행합니다.

CREATE AVAILABILITY GROUP [OnPremAG]
WITH (
    AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
    DB_FAILOVER = OFF,
    DTC_SUPPORT = NONE
)
FOR DATABASE [Adventureworks2022] REPLICA
ON N'OnPremNode1' WITH (
    ENDPOINT_URL = N'TCP://OnPremNode1.contoso.com:5022',
    FAILOVER_MODE = AUTOMATIC,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    SEEDING_MODE = AUTOMATIC,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
),
N'OnPremNode2' WITH (
    ENDPOINT_URL = N'TCP://OnPremNode2.contoso.com:5022',
    FAILOVER_MODE = AUTOMATIC,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    SEEDING_MODE = AUTOMATIC,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
);

다음으로 보조 복제본(OnPremNode2)을 가용성 그룹(OnPremAg)에 조인하려면 다음을 수행합니다.

가용성 그룹에 조인하려면 원본 보조 복제본에서 다음 스크립트를 실행합니다.

ALTER AVAILABILITY GROUP [OnPremAG] JOIN;
GO
ALTER AVAILABILITY GROUP [OnPremAG] GRANT CREATE ANY DATABASE;
GO

마지막으로 전역 전달자 가용성 그룹(OnPremAG)에 대한 수신기를 만듭니다.

수신기를 만들려면 원본 주 복제본에서 다음 스크립트를 실행합니다.

USE [master]
GO

ALTER AVAILABILITY GROUP [OnPremAG]
ADD LISTENER N'OnPremAG_LST' (
    WITH IP (
        (<available_static_ip>, <mask>),
        PORT = 60173
    )
);
GO

대상 AG 만들기

또한 대상 SQL Server VM에도 가용성 그룹을 만들어야 합니다.

Azure의 SQL Server 인스턴스 간에 가용성 그룹이 이미 구성된 경우 이 섹션을 건너뜁니다.

T-SQL(Transact-SQL)을 사용하여 대상 SQL Server 인스턴스(SQLVM1SQLVM2)에서 가용성 그룹(AzureAG)을 만듭니다.

대상에서 가용성 그룹을 만들려면 대상 주 복제본에서 다음 스크립트를 실행합니다.

CREATE AVAILABILITY GROUP [AzureAG] FOR REPLICA
ON N'SQLVM1' WITH (
    ENDPOINT_URL = N'TCP://SQLVM1.contoso.com:5022',
    FAILOVER_MODE = MANUAL,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    BACKUP_PRIORITY = 50,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
    SEEDING_MODE = AUTOMATIC
),
N'SQLVM2' WITH (
    ENDPOINT_URL = N'TCP://SQLVM2.contoso.com:5022',
    FAILOVER_MODE = MANUAL,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    BACKUP_PRIORITY = 50,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
    SEEDING_MODE = AUTOMATIC
);
GO

다음으로 대상 보조 복제본(SQLVM2)을 가용성 그룹(AzureAG)에 조인하려면 다음을 수행합니다.

대상 보조 복제본에서 다음 스크립트를 실행합니다.

ALTER AVAILABILITY GROUP [AzureAG] JOIN;
GO
ALTER AVAILABILITY GROUP [AzureAG] GRANT CREATE ANY DATABASE;
GO

마지막으로 대상 가용성 그룹(AzureAG)에 대한 수신기(AzureAG_LST)를 만듭니다. SQL Server VM을 여러 서브넷에 배포한 경우 Transact-SQL을 사용하여 수신기를 만듭니다. 단일 서브넷에 SQL Server VM을 배포한 경우 Azure Load Balancer 또는 수신기에 대한 분산 네트워크 이름을 구성합니다.

수신기를 만들려면 Azure에 있는 가용성 그룹의 주 복제본에서 다음 스크립트를 실행합니다.

ALTER AVAILABILITY GROUP [AzureAG]
ADD LISTENER N'AzureAG_LST' (
    WITH IP (
        (N'<primary replica_secondary_ip>', N'<primary_mask>'),
        (N'<secondary replica_secondary_ip>', N'<secondary_mask>')
    ),
    PORT = <port_number_you_set>
);
GO

분산 AG 만들기

원본(OnPremAG) 및 대상(AzureAG) 가용성 그룹을 구성한 후에는 개별 가용성 그룹 모두에 걸쳐 있는 분산 가용성 그룹을 만듭니다.

원본 SQL 전역 기본(OnPremNode1) 및 AG(OnPremAG)에서 Transact-SQL을 사용하여 분산 가용성 그룹(DAG)을 만듭니다.

원본에서 분산 AG를 만들려면 원본 전역 기본에서 다음 스크립트를 실행합니다.

CREATE AVAILABILITY GROUP [DAG]
WITH (DISTRIBUTED) AVAILABILITY GROUP
ON 'OnPremAG' WITH (
    LISTENER_URL = 'tcp://OnPremAG_LST.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
),
'AzureAG' WITH (
    LISTENER_URL = 'tcp://AzureAG_LST.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
);
GO

참고 항목

시드 모드는 대상 및 원본의 SQL Server 버전이 동일하므로 AUTOMATIC로 설정됩니다. SQL Server 대상이 상위 버전이거나 전역 기본 및 전달자의 인스턴스 이름이 다른 경우 분산된 ag를 만들고, SEEDING_MODEMANUAL로 설정된 분산된 ag에 보조 AG를 조인합니다. 그런 다음, 원본에서 대상 SQL Server 인스턴스로 데이터베이스를 수동으로 복원합니다. 자세한 내용은 마이그레이션 중 버전 업그레이드를 검토하세요.

분산 AG를 만든 후 대상 전달자 인스턴스(SQLVM1)에서 대상 AG(AzureAG)를 분산 AG(DAG)에 조인합니다.

대상 AG를 분산 AG에 조인하려면 대상 전달자에서 다음 스크립트를 실행합니다.

ALTER AVAILABILITY GROUP [DAG]
INNER JOIN AVAILABILITY GROUP
ON 'OnPremAG' WITH (
        LISTENER_URL = 'tcp://OnPremAG_LST.contoso.com:5022',
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        FAILOVER_MODE = MANUAL,
        SEEDING_MODE = AUTOMATIC
        ),
'AzureAG' WITH (
    LISTENER_URL = 'tcp://AzureAG_LST.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
);
GO

원본 및 대상 가용성 그룹 간의 동기화를 취소, 일시 중지 또는 지연해야 하는 경우(예: 성능 문제) 원본 전역 기본 인스턴스(OnPremNode1)에서 다음 스크립트를 실행합니다.

ALTER AVAILABILITY GROUP [DAG]
MODIFY AVAILABILITY GROUP ON 'AzureAG'
WITH (SEEDING_MODE = MANUAL);

자세한 내용은 전달자에 대한 자동 시드 취소를 검토하세요.