Always On 가용성 그룹에 대한 유연성 있는 자동 장애 조치(failover) 정책 구성
적용 대상: SQL Server - Windows만 해당
이 항목에서는 SQL Server에서 Transact-SQL 또는 PowerShell을 사용하여 Always On 가용성 그룹에 대해 유연성 있는 장애 조치(failover) 정책을 구성하는 방법을 설명합니다. 유연성 있는 장애 조치(failover) 정책은 가용성 그룹에 대한 자동 장애 조치(failover)를 실행해야 하는 상태를 세분화하여 제어합니다. 자동 장애 조치를 트리거하는 오류 상태 및 상태 확인 빈도를 변경하여 자동 장애 조치가 수행될 가능성을 높이거나 줄임으로써 고가용성에 대한 SLA를 지원할 수 있습니다.
가용성 그룹의 유연성 있는 장애 조치(failover) 정책은 오류 상태 수준 및 상태 확인 제한 시간 임계값 정의합니다. 가용성 그룹이 해당 오류 상태 수준 및 상태 확인 제한 시간 임계값을 초과했다는 것이 감지되면 가용성 그룹의 리소스 DLL은 WSFC(Windows Server 장애 조치 클러스터링) 클러스터에 다시 응답합니다. 그러면 WSFC 클러스터는 보조 복제본(replica) 대한 자동 장애 조치(failover)를 시작합니다.
참고 항목
SQL Server Management Studio.를 통해서는 가용성 그룹의 유연성 있는 장애 조치(failover) 정책을 구성할 수 없습니다.
자동 장애 조치에 대한 제한 사항
자동 장애 조치(failover)가 발생하려면 현재 주 복제본(replica) 및 하나의 보조 복제본(replica) 자동 장애 조치(failover)가 포함된 동기-커밋 가용성 모드로 구성되어야 하고 보조 복제본(replica)은 주 복제본(replica)과 동기화해야 합니다.
SQL Server 2019(15.x)는 SQL Server 2017(14.x)의 최대 동기 복제본(replica)수를 3개에서 5개로 증가했습니다. 그룹 내에서 자동 장애 조치가 실행되도록 이 그룹을 다섯 개의 복제본으로 구성할 수 있습니다. 한 개의 주 복제본과 네 개의 동기 보조 복제본(replica)이 있습니다.
가용성 그룹이 해당 WSFC 실패 임계값을 초과하는 경우 WSFC 클러스터는 가용성 그룹에 대한 자동 장애 조치를 시도하지 않을 것입니다. 또한 클러스터 관리자가 실패한 리소스 그룹을 수동으로 온라인 상태로 만들거나 데이터베이스 관리자가 가용성 그룹의 수동 장애 조치를 실행할 때까지 가용성 그룹의 WSFC 리소스 그룹이 실패한 상태로 유지됩니다. WSFC 오류 임계값은 특정 기간 동안 가용성 그룹에 대해 지원되는 최대 오류 수로 정의됩니다. 기본 기간은 6시간이며, 이 기간 동안의 최대 오류 수에 대한 기본값 n-1이고, 여기서 n은 WSFC 노드의 수입니다. 지정된 가용성 그룹에 대한 실패 임계값을 변경하기 위해서는 WSFC 장애 조치(failover) 관리자 콘솔을 사용해 보세요.
필수 조건
- 주 복제본을 호스팅하는 서버 인스턴스에 연결되어 있어야 합니다.
사용 권한
작업 | 사용 권한 |
---|---|
새 가용성 그룹에 대한 유연성 있는 장애 조치(failover) 정책을 구성하려면 | CREATE AVAILABILITY GROUP 서버 권한, ALTER ANY AVAILABILITY GROUP 권한, CONTROL SERVER 권한 중 하나와 sysadmin 고정 서버 역할의 멤버 자격이 필요합니다. |
기존 가용성 그룹의 정책을 수정하려면 | 가용성 그룹에 대한 ALTER AVAILABILITY GROUP 권한, CONTROL AVAILABILITY GROUP 권한, ALTER ANY AVAILABILITY GROUP 권한 또는 CONTROL SERVER 권한이 필요합니다. |
상태 확인 제한 시간 임계값
가용성 그룹의 WSFC 리소스 DLL은 주 복제본(replica)을 호스트하는 SQL Server 인스턴스에서 sp_server_진단 저장 프로시저를 호출하여 주 복제본(replica)의 상태 검사를 실행합니다. sp_server_diagnostics 은 가용성 그룹에 대한 상태 확인 제한 시간 임계값의 1/3에 해당하는 간격으로 결과를 반환합니다. 기본 상태 확인 제한 시간 임계값은 30초이며 이 값에 도달하면 sp_server_diagnostics가 10초 간격으로 반환합니다. sp_server_diagnostics가 느리거나 정보를 반환하지 않는 경우 리소스 DLL은 주 복제본이 응답하지 않는다고 결정하기 이전에 상태 확인 제한 시간 임계값의 전체 간격 동안 대기합니다. 주 복제본(replica이) 응답하지 않는 경우 현재 지원되는 경우 자동 장애 조치(failover)는 시작됩니다.
Important
sp_server_diagnostics 는 데이터베이스 수준에서 상태 확인을 수행하지 않습니다.
오류 상태 수준
sp_server_diagnostics 반환된 진단 데이터 및 상태 정보가 가용성 그룹의 오류 상태 수준에 따라 자동 장애 조치(failover)가 실행되도록 합니다. 오류 상태 수준은 자동 장애 조치(failover)를 트리거하는 오류 상태를 지정합니다. 오류 상태 수준에는 5가지가 있으며, 가장 낮은 제한 수준 1에서 가장 높은 제한 수준 5까지 다양합니다. 특정 수준에는 그보다 낮은 모든 제한 수준을 포함합니다. 따라서 가장 엄격한 수준인 5에는 덜 제한적인 4개의 조건 등이 포함됩니다.
Important
손상된 데이터베이스 및 손상될 가능성이 있는 데이터베이스는 오류 상태 수준에서는 검색이 되지 않습니다. 따라서 손상되거나 손상될 가능성이 있는 데이터베이스(하드웨어 오류, 데이터 손상 또는 기타 문제로 인한 것인지의 여부)는 자동 장애 조치(failover)를 트리거하지 않습니다.
다음 표에서는 각 수준에 해당하는 오류 상태를 설명합니다.
Level | 오류 상태 | Transact-SQL 값 | PowerShell 값 |
---|---|---|---|
하나 | On server down. 다음과 같은 경우 자동 장애 조치를 시작하도록 지정합니다: SQL Server 서비스가 다운된 경우. 서버 인스턴스로부터 ACK를 받지 못해 WSFC 클러스터에 연결할 가용성 그룹의 임대가 만료된 경우. 자세한 내용은 작동 방법: SQL Server Always On 임대 시간 제한을 참조하세요. 제한 수준이 가장 낮은 상태입니다. |
1 | OnServerDown |
2 | 서버 응답 없음 발생 시. 다음과 같은 경우 자동 장애 조치를 시작하도록 지정합니다: SQL Server 인스턴스가 클러스터에 연결되어 있지 않고 가용성 그룹의 사용자 지정 상태 확인 제한 시간 임계값이 초과된 경우. 가용성 복제본이 오류 상태에 있는 경우. |
2 | OnServerUnresponsive |
3단계 | 중대 서버 오류 발생 시. 분리된 스핀 잠금, 심각한 쓰기 액세스 위반 또는 짧은 시간 내에 생성된 너무 많은 메모리 덤프와 같은 중요한 SQL Server 내부 오류에 대해 자동 장애 조치(failover)가 시작되도록 지정합니다. 이 값은 기본 수준입니다. |
3 | OnCriticalServerError |
4 | 일반 서버 오류 발생 시. SQL Server 내부 리소스 풀에서 지속적인 메모리 부족 상태와 같은 일반적인 SQL Server 내부 오류가 발생할 경우 자동 장애 조치를 시작하도록 지정합니다. | 4 | OnModerateServerError |
5 | 지정된 오류 상태 발생 시. 다음을 포함하여 지정된 오류 상태가 발생할 경우 자동 장애 조치를 시작하도록 지정합니다: 스케줄러 교착 상태가 검색된 경우. 해결할 수 없는 교착 상태가 발견된 경우. 제한 수준이 가장 높은 상태입니다. |
5 | OnAnyQualifiedFailureConditions |
참고 항목
클라이언트 요청에 대해 SQL Server 인스턴스의 응답이 없는 것은 가용성 그룹과 관련이 없습니다.
Transact-SQL 사용
유연성 있는 장애 조치(Failover) 정책을 구성하려면
주 복제본을 호스팅하는 서버 인스턴스에 연결합니다.
새 가용성 그룹을 만들려는 경우 CREATE AVAILABILITY GROUPTransact-SQL 문을 사용합니다. 기존 가용성 그룹을 수정하려는 경우 ALTER AVAILABILITY GROUPTransact-SQL 문을 사용합니다.
장애 조치 조건 수준을 설정하려면 FAILURE_CONDITION_LEVEL = n 옵션을 사용합니다. 여기서 n 은 1에서 5까지의 정수입니다.
예를 들어 다음 Transact-SQL 문은 기존 가용성 그룹
AG1
의 오류 상태 수준을 수준 1로 변경합니다.ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);
각 정수 값과 오류 조건 상태의 관계는 다음과 같습니다:
Transact-SQL 값 수준 자동 장애 조치가 시작되는 경우... 1 하나 서버 작동 중지 시. 장애 조치나 재시작으로 인해 SQL Server 서비스가 중지된 경우. 2 2 서버 응답 없음 발생 시. 낮은 값의 조건이 모두 충족되거나, SQL Server 서비스가 클러스터에 연결되었지만, 상태 확인 제한 시간 임계값을 초과했거나, 현재 주 복제본(replica)이 오류 상태인 경우. 3 3단계 중대 서버 오류 발생 시. 낮은 값의 조건이 모두 충족되거나 내부 중대 서버 오류가 발생한 경우.
이 값은 기본 수준입니다.4 4 일반 서버 오류 발생 시. 낮은 값의 조건이 모두 충족되거나 일반 서버 오류가 발생한 경우. 5 5 지정된 오류 상태 발생 시. 낮은 값의 조건이 모두 충족되거나 지정된 오류 상태가 발생한 경우. 장애 조치 상태 수준에 대한 자세한 내용은 가용성 그룹 자동 장애 조치에 대한 유연한 장애 조치(Failover) 정책(SQL Server)을 참조하세요.
상태 확인 제한 시간 임계값을 구성하려면 HEALTH_CHECK_TIMEOUT = n 옵션을 사용합니다. 여기서 n 은 15000밀리초(15초)부터 4294967295밀리초까지의 정수입니다. 기본값은 30000밀리초(30초)입니다
예를 들어 다음 Transact-SQL 문은 기존 가용성 그룹
AG1
의 상태 확인 제한 시간 임계값을 60,000밀리초(1분)로 변경합니다.ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);
PowerShell 사용
유연성 있는 장애 조치(Failover) 정책을 구성하려면
주 복제본을 호스팅하는 서버 인스턴스에 기본값(cd)을 설정합니다.
가용성 그룹에 가용성 복제본을 추가하는 경우 New-SqlAvailabilityGroupcmdlet을 사용합니다. 기존 가용성 복제본을 수정할 때 Set-SqlAvailabilityGroup cmdlet을 사용합니다.
장애 조치 상태 수준을 설정하려면 FailureConditionLevellevel 매개 변수를 사용하며, 여기에서 level은 다음 값 중 하나입니다:
값 수준 자동 장애 조치가 시작되는 경우... OnServerDown 하나 서버 작동 중지 시. 장애 조치나 재시작으로 인해 SQL Server 서비스가 중지된 경우. OnServerUnresponsive 2 서버 응답 없음 발생 시. 낮은 값의 조건이 모두 충족되거나, SQL Server 서비스가 클러스터에 연결되었지만 상태 확인 제한 시간 임계값을 초과했거나, 현재 주 복제본이 오류 상태인 경우. OnCriticalServerError 3단계 중대 서버 오류 발생 시. 낮은 값의 조건이 모두 충족되거나 내부 중대 서버 오류가 발생한 경우.
이 값은 기본 수준입니다.OnModerateServerError 4 일반 서버 오류 발생 시. 낮은 값의 조건이 모두 충족되거나 일반 서버 오류가 발생한 경우. OnAnyQualifiedFailureConditions 5 지정된 오류 상태 발생 시. 낮은 값의 조건이 모두 충족되거나 지정된 오류 상태가 발생한 경우. 장애 조치 상태 수준에 대한 자세한 내용은 가용성 그룹 자동 장애 조치에 대한 유연한 장애 조치(Failover) 정책(SQL Server)을 참조하세요.
예를 들어 다음 명령은 기존 가용성 그룹
AG1
의 오류 상태 수준을 수준 1로 변경합니다.Set-SqlAvailabilityGroup ` -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg ` -FailureConditionLevel OnServerDown
상태 확인 제한 시간 임계값을 설정하려면 HealthCheckTimeoutn 매개 변수를 사용합니다. 여기서 n 은 15000밀리초(15초)부터 4294967295밀리초 사이의 정수입니다. 기본값은 30000밀리초(30초)입니다.
예를 들어 다음 명령은 기존 가용성 그룹,
AG1
, AG1의 상태 확인 제한 시간 임계값을 120,000밀리초(2분)로 변경합니다.Set-SqlAvailabilityGroup ` -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAG ` -HealthCheckTimeout 120000
참고 항목
cmdlet의 구문을 보려면 PowerShell 환경에서 Get-Help SQL Server cmdlet을 사용합니다. 자세한 내용은 Get Help SQL Server PowerShell을 참조해 주세요.
SQL Server PowerShell 공급자를 설정하고 사용하려면
관련 작업
자동 장애 조치(failover)를 구성하려면
가용성 복제본의 가용성 모드 변경(SQL Server)(자동 장애 조치(failover)를 사용하려면 동기-커밋 가용성 모드가 필요함)
유연성 있는 장애 조치(failover) 정책을 구성하여 자동 장애 조치의 상태 제어(AlwaysOn 가용성 그룹)
관련 내용
참고 항목
Always On 가용성 그룹 개요(SQL Server)
가용성 모드(Always On 가용성 그룹)
장애 조치(Failover) 및 장애 조치(Failover) 모드(Always On 가용성 그룹)
SQL Server의 WSFC(Windows Server 장애 조치(Failover) 클러스터링)
Failover Policy for Failover Cluster Instances
sp_server_진단(Transact-SQL)