Always On 가용성 그룹의 계획된 수동 장애 조치(failover) 수행(SQL Server)
적용 대상: SQL Server
이 항목에서는 SQL Server에서 SQL Server Management Studio, Transact-SQL 또는 PowerShell을 사용하여 Always On 가용성 그룹에서 데이터 손실 없이 수동 장애 조치(Failover)를 수행하는 방법(계획된 수동 장애 조치(Failover))에 대해 설명합니다. 가용성 그룹은 가용성 복제본의 수준에서 장애 조치(Failover)됩니다. Always On 가용성 그룹 장애 조치(Failover)처럼 계획된 수동 장애 조치는 보조 복제본을 기본 역할로 전환합니다. 동시에 장애 조치(Failover)는 이전 기본 복제본을 보조 역할로 전환합니다.
계획된 수동 장애 조치(Failover)는 기본 복제본과 대상 보조 복제본이 동기 커밋 모드에서 실행 중이고 현재 동기화된 경우에만 지원됩니다. 계획된 수동 장애 조치(Failover)는 대상 보조 복제본의 가용성 그룹에 조인된 보조 데이터베이스의 모든 데이터를 유지합니다. 이전 기본 복제본이 보조 역할로 전환되면 해당 데이터베이스는 보조 데이터베이스가 됩니다. 그런 다음 새 기본 데이터베이스와 동기화되기 시작합니다. 데이터베이스가 모두 SYNCHRONIZED 상태로 전환된 후 새로운 보조 복제본은 향후 계획 수동 장애 조치(failover)의 대상 역할을 수행할 수 있습니다.
참고
보조 복제본과 기본 복제본이 모두 자동 장애 조치(Failover) 모드에 대해 구성된 경우 보조 복제본이 동기화되면 자동 장애 조치(Failover)의 대상 역할도 수행할 수 있습니다. 자세한 내용은 가용성 모드(Always On 가용성 그룹)를 참조하세요.
시작하기 전 주의 사항:
중요
클러스터 관리자가 없는 읽기 확장 가용성 그룹을 장애 조치하는 특정 절차가 있습니다. 가용성 그룹에 CLUSTER_TYPE = NONE이 있는 경우 읽기 확장 가용성 그룹에서 기본 복제본 장애 조치 아래의 절차를 따르세요.
제한 사항
장애 조치 명령은 대상 복제본에서 명령을 수락하는 즉시 반환합니다. 데이터베이스 복구는 가용성 그룹의 장애 조치가 끝난 후 비동기로 수행됩니다.
장애 조치(failover) 시 가용성 그룹 내에서 데이터베이스 간 일관성은 유지되지 않을 수 있습니다.
참고
데이터베이스 간 트랜잭션 및 분산 트랜잭션 지원은 SQL Server 및 운영 체제 버전에 따라 달라집니다. 자세한 내용은 Always On 가용성 그룹 및 데이터베이스 미러링에 대한 데이터베이스 간 트랜잭션 및 분산 트랜잭션(SQL Server)을 참조하세요.
필수 조건 및 제한 사항
대상 보조 복제본과 기본 복제본이 모두 동기-커밋 가용성 모드에서 실행 중이어야 합니다.
현재 대상 보조 복제본이 기본 복제본과 동기화되어 있어야 합니다. 이 보조 복제본의 모든 보조 데이터베이스는 이미 가용성 그룹에 조인되어 있어야 합니다. 또한 해당 주 데이터베이스와 동기화되어야 합니다(즉, 로컬 보조 데이터베이스가 동기화되어야 함).
팁
보조 복제본의 장애 조치(Failover) 준비를 확인하려면 sys.dm_hadr_database_replica_cluster_states 동적 관리 뷰에서 is_failover_ready 열을 쿼리합니다. 또는 Always On 그룹 대시 보드의 장애 조치(Failover) 준비 열을 볼 수 있습니다.
이 태스크는 대상 보조 복제본에서만 지원됩니다. 대상 보조 복제본을 호스팅하는 서버 인스턴스에 연결되어 있어야 합니다.
보안
사용 권한
가용성 그룹에서는 ALTER AVAILABILITY GROUP 권한이 필요합니다. CONTROL AVAILABILITY GROUP 권한, ALTER ANY AVAILABILITY GROUP 권한 또는 CONTROL SERVER 권한도 필요합니다.
SQL Server Management Studio 사용
가용성 그룹을 수동으로 장애 조치하려면:
개체 탐색기에서 장애 조치해야 할 가용성 그룹의 보조 복제본을 호스팅하는 서버 인스턴스에 연결합니다. 서버 트리를 확장합니다.
Always On 고가용성 노드 및 가용성 그룹 노드를 확장합니다.
장애 조치할 가용성 그룹을 마우스 오른쪽 단추로 클릭하고 장애 조치(Failover)를 선택합니다.
가용성 그룹 장애 조치 마법사가 시작됩니다. 자세한 내용은 가용성 그룹 장애 조치(Failover) 마법사 사용(SQL Server Management Studio)을 참조하세요.
Transact-SQL 사용
가용성 그룹을 수동으로 장애 조치하려면
대상 보조 복제본을 호스팅하는 서버 인스턴스에 연결합니다.
다음과 같은 ALTER AVAILABILITY GROUP 문을 사용합니다:
ALTER AVAILABILITY GROUP group_name FAILOVER
명령문에서 group_name은 가용성 그룹의 이름입니다.
다음 예에서는 MyAg 가용성 그룹을 연결된 보조 복제본으로 수동으로 장애 조치합니다:
ALTER AVAILABILITY GROUP MyAg FAILOVER;
PowerShell 사용
가용성 그룹을 수동으로 장애 조치하려면:
대상 보조 복제본을 호스팅하는 서버 인스턴스로 디렉터리(cd)를 변경합니다.
Switch-SqlAvailabilityGroup cmdlet을 사용합니다.
참고
cmdlet의 구문을 보려면 PowerShell 환경에서 Get-Help SQL Server cmdlet을 사용합니다. 자세한 내용은 SQL Server PowerShell에 대한 도움말 보기를 참조하세요.
:다음 예에서는 지정한 경로를 사용하여 MyAg 가용성 그룹을 보조 복제본으로 수동으로 장애 조치합니다:
Switch-SqlAvailabilityGroup -Path SQLSERVER:\Sql\SecondaryServer\InstanceName\AvailabilityGroups\MyAg
SQL Server PowerShell 공급자를 설정하고 사용하려면:
후속 작업: 가용성 그룹을 수동으로 장애 조치한 후
가용성 그룹의 자동 장애 조치(Failover) 설정 외부로 장애 조치한 경우 새로운 가용성 그룹 구성을 반영하도록 Windows Server 장애 조치(Failover) 클러스터링 노드의 쿼럼 투표를 조정합니다. 자세한 내용은 SQL Server의 WSFC(Windows Server 장애 조치(Failover) 클러스터링)를 참조하세요.
읽기 확장 가용성 그룹에서 기본 복제본 장애 조치
각 가용성 그룹에는 하나의 기본 복제본만 있습니다. 기본 복제본은 읽기 및 쓰기를 허용합니다. 주 복제본을 변경하기 위해 장애 조치(failover)를 수행할 수 있습니다. 일반적인 가용성 그룹에서 클러스터 관리자는 장애 조치 프로세스를 자동화합니다. 클러스터 형식이 NONE인 가용성 그룹에서 장애 조치(failover) 프로세스는 수동입니다.
클러스터 형식이 NONE인 가용성 그룹에서 두 가지 방법으로 기본 복제본을 장애 조치(failover)할 수 있습니다:
- 데이터가 손실되지 않는 수동 장애 조치(Failover)
- 데이터 손실이 있는 강제 수동 장애 조치(Failover)
데이터가 손실되지 않는 수동 장애 조치(Failover)
기본 복제본을 사용할 수 있지만 기본 복제본을 호스팅하는 인스턴스를 일시적으로 또는 영구적으로 변경해야 하는 경우 이 방법을 사용합니다. 잠재적인 데이터 손실을 방지하려면 수동 장애 조치(failover)를 실행하기 전에 대상 보조 복제본이 최신 상태인지 확인합니다.
데이터 손실이 없는 수동 장애 조치(Failover)를 수행하려면:
현재 주 복제본 및 대상 보조 복제본을
SYNCHRONOUS_COMMIT
으로 설정합니다.ALTER AVAILABILITY GROUP [AGRScale] MODIFY REPLICA ON N'<node2>' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
활성 트랜잭션이 기본 복제본과 적어도 하나의 동기 보조 복제본에 커밋되었는지 확인하려면 다음 쿼리를 실행합니다:
SELECT ag.name, drs.database_id, drs.group_id, drs.replica_id, drs.synchronization_state_desc, ag.sequence_number FROM sys.dm_hadr_database_replica_states drs, sys.availability_groups ag WHERE drs.group_id = ag.group_id;
보조 복제본이
synchronization_state_desc
가SYNCHRONIZED
일 때 동기화됩니다.REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
을 1로 업데이트합니다.다음 스크립트에서는
ag1
라는 가용성 그룹에서REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
을 1로 설정합니다. 다음 스크립트를 실행하기 전에ag1
을 가용성 그룹의 이름으로 바꿉니다:ALTER AVAILABILITY GROUP [AGRScale] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
이 설정은 모든 활성 트랜잭션이 기본 복제본과 적어도 하나의 동기 보조 복제본에 커밋되었는지 확인합니다.
참고
이 설정은 장애 조치에만 적용되는 것이 아니며, 환경 요구 사항에 따라 설정해야 합니다.
기본 복제본과 장애 조치(failover)에 참여하지 않는 보조 복제본을 오프라인으로 설정하여 역할 변경을 준비합니다:
ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
대상 보조 복제본을 주 복제본으로 승격합니다.
ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS;
기존의 기본 복제본 및 다른 보조 복제본을 호스팅하는 SQL Server 인스턴스에서 다음 명령을 실행하여 기존의 기본 복제본의 역할을
SECONDARY
로 업데이트합니다:ALTER AVAILABILITY GROUP [AGRScale] SET (ROLE = SECONDARY);
참고
가용성 그룹 사용을 삭제하려면 DROP AVAILABILITY GROUP을 사용합니다. NONE 또는 EXTERNAL 클러스터 형식을 사용하여 만든 가용성 그룹의 경우 가용성 그룹의 일부인 모든 복제본에서 명령을 실행합니다.
데이터 이동을 계속하고, 기본 복제본을 호스팅하는 SQL Server 인스턴스의 가용성 그룹에 있는 모든 데이터베이스에 대해 다음 명령을 실행합니다:
ALTER DATABASE [db1] SET HADR RESUME
읽기 확장 목적으로 만들었으며 클러스터 관리자가 관리하지 않는 수신기를 다시 만듭니다. 원래 수신기가 기존 주 복제본을 가리키는 경우 이 수신기를 삭제하고 새로운 주 복제본을 가리키도록 다시 만듭니다.
데이터 손실이 있는 강제 수동 장애 조치(Failover)
기본 복제본을 사용할 수 없고 즉시 복구할 수 없는 경우에는 데이터 손실이 있는 보조 복제본에 대한 장애 조치(failover)를 강제로 수행해야 합니다. 그러나 장애 조치 후 원래 기본 복제본이 복구되면 기본 복제본이 주 역할을 맡습니다. 각 복제본이 서로 다른 상태에 있지 않도록 하려면 데이터 손실이 있는 강제 장애 조치 후 가용성 그룹에서 원래 주 복제본을 제거합니다. 원래 주 복제본이 다시 온라인 상태가 되면 주 복제본에서 가용성 그룹을 완전히 제거합니다.
기본 복제본 N1에서 보조 복제본 N2로 데이터 손실이 있는 수동 장애 조치를 강제로 수행하려면 다음 단계를 수행합니다:
보조 복제본(N2)에서 강제 장애 조치를 시작합니다:
ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;
새 기본 복제본(N2)에서 원래 기본 복제본(N1)을 제거합니다:
ALTER AVAILABILITY GROUP [AGRScale] REMOVE REPLICA ON N'N1';
모든 애플리케이션 트래픽이 수신기 및/또는 새 기본 복제본을 가리키고 있는지 확인합니다.
원래 주 복제본(N1)이 온라인 상태가 되면 원래 주 복제본(N1)에서 가용성 그룹 AGRScale을 즉시 오프라인 상태로 설정합니다:
ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
데이터 또는 동기화되지 않은 변경 내용이 있는 경우에는 백업을 사용하거나 비즈니스 요구 사항에 맞는 기타 데이터 복제 옵션을 사용하여 이 데이터를 보존합니다.
다음으로, 원래 주 복제본(N1)에서 가용성 그룹을 제거합니다:
DROP AVAILABILITY GROUP [AGRScale];
원래 기본 복제본(N1)에서 가용성 그룹 데이터베이스를 삭제합니다:
USE [master] GO DROP DATABASE [AGDBRScale] GO
(선택 사항) 이제 원하는 경우 N1을 가용성 그룹 AGRScale에 새 보조 복제본으로 다시 추가할 수 있습니다.