AlwaysOn 가용성 그룹 자동 장애 조치가 작동하지 않습니다


10

AG 설정 사용 WSFC가 있고 DevClusterOnline이라는 하나의 가용성 그룹에 두 개의 노드로 구성되어 있습니다. 두 노드 (DEV-AWEB5 기본, DEV-AWEB6 보조)는 Windows Server 2008 R2를 실행하고 있습니다.

AG의 상태를 확인하면 다음과 같은 결과가 나타납니다.

가용성 그룹 상태 설명

아래 쿼리를 실행하면이 결과 집합이 반환됩니다. 동기 커밋 및 자동 장애 조치 설정

select
    ar.replica_server_name,
    availability_group_name = ag.name,
    ar.availability_mode_desc,
    ar.failover_mode_desc
from sys.availability_replicas ar
inner join sys.availability_groups ag
on ar.group_id = ag.group_id
order by availability_group_name, replica_server_name;

DEV-AWEB5의 연결을 끊으면 그룹 리스너 (DevListener)에 연결할 수 없지만 핑할 수 있으며 핑에 응답합니다. 복제본-DEV-AWEB6이 RESOLVING 상태가되고 내 DB에 액세스 할 수 없습니다. 그러나 수동으로 Management Studio로 이동하여 Failover를 DEV-AWEB6으로 설정 한 다음 다시 실행하면 DevListener가 다시 연결을 수락합니다.

이러한 사실로 인해 장애 조치가 실제로 작동하고 커밋과 자동 장애 조치가 구성되어 있음을 확인하면 설정에서 오작동하는 경우 무엇인지 알 수 없습니다.

DEV-AWEB5의 연결을 끊으면 복제본의 연결과 DevListener도 유지 될 것으로 예상됩니다. 자동 장애 조치를 통해 AG Listener에 투명하게 연결할 수있을 것으로 기대합니다. 최종 사용자 관점에서 웹 시스템을 사용하면 DB 서버 중 하나가 다운된다는 사실에 주목할 수 없습니다.

나는 여기에 갇혀있다. 누구든지 내가 잘못하고있는 것에 대해 나를 밝혀 줄 수 있습니까?


1
쿼럼 모델은 어떻게 생겼습니까? 단순한 노드 대다수입니까? 그렇다면 문제가 될 수 있습니다. 에서 technet.microsoft.com/en-us/library/cc731739.aspx , 그 쿼럼 모델은 (클러스터의 노드의 절반)을의 손실을 유지할 수 -1. 따라서 노드 과반수 쿼럼이있는 두 개의 노드 클러스터가있는 경우 0 개의 노드 장애를 유지할 수 있습니다.
Ben Thul

2
@BenThul 클러스터에서 쿼럼이 손실되면 OP는 수동으로 장애 조치를 수행 할 수 없습니다.
Thomas Stringer

답변:


6

DEV-AWEB5를 분리하면

"연결 끊기"를 정의하십시오. 내 생각에 당신은 상자를 유지했지만 SQL Server를 중단했습니다.

그룹 리스너 (DevListener)에 연결할 수 없지만 핑할 수 있으며 핑에 응답합니다.

리스너는 표시된 가용성 그룹에 대한 WSFC 클러스터 자원 그룹 내의 VNN (가상 네트워크 이름)이기 때문입니다. DEV_AWEB5 노드는 여전히 클러스터 리소스 그룹을 소유하지만 가장 실패한 상태 인 AG 클러스터 리소스 일뿐입니다. VNN은 여전히 ​​온라인 상태 여야합니다 (예상 동작). 단순히 해당 자원 그룹 (이 경우 DEV-AWEB5)을 소유하고있는 노드를 가리 킵니다. 실제로 PowerShell 원격을 사용하도록 설정하고 다음을 실행 한 경우 :

Invoke-Command -ComputerName "YourListenerName" -ScriptBlock { $env:computername }

마찬가지로 DEV-AWEB5에 RDP를 제공 할 수 있으면 (기능 및 액세스 가능성 등이 제공되는 경우) 리스너 이름 ( mstsc /v:YourListenerName)을 사용하여 RDP를 수행 할 수 있습니다 . 그것은 단지 VNN입니다.

그 반환은 소유 노드의 컴퓨터 이름이됩니다.

모든 증상에 따라 장애 조치 임계 값에 도달했다고 기꺼이 생각합니다. 장애 조치 임계 값은 클러스터가 지정된 기간 동안 리소스 그룹의 장애 조치를 시도하는 횟수를 결정합니다. 이 값의 기본값은 6 시간 동안 max failovers n-1 (여기서 n 은 노드 수)입니다 . 다음 WSFC PowerShell 명령을 통해이를 확인할 수 있습니다.

Get-ClusterGroup -Name "YourAgName" |
    Select-Object Name, FailoverThreshold, FailoverPeriod

그것은 단지 당신에게 설정을 제공합니다 (물론 선택하면 수정할 수 있습니다).

이것이 사실임을 증명하는 가장 좋은 방법은 클러스터 로그를 생성해야한다는 것입니다 (시스템 이벤트 로그는 "실패한"정도의 세부 사항 만 해당).

Get-ClusterLog -Node "YourClusterNode" -TimeSpan <amount_of_minutes_since_failure>

기본적으로 "C : \ Windows \ Cluster \ Reports"폴더에 저장되며 파일 이름은 "Cluster.log"입니다.

해당 클러스터 로그를 열었다면 다음 문자열을 찾을 수 있어야합니다. 정확히 무슨 일이 있었으며 왜 그런 일이 일어 났는지 나타냅니다.

그룹 [YourClusterGroupName] , failoverCount [# 페일 오버 수] , 페일 오버 임계 값 [페일 오버 임계 값] , nodeAvailCount [노드 사용 가능 수 ] 를 페일 오버 하지 않습니다 .

위의 메시지는 단순히 WSFC에게 그룹이 너무 많이 발생하여 임계 값에 도달했기 때문에 그룹을 페일 오버하지 않음을 알려줍니다.

왜 이런 일이 발생합니까? 노드 간 클러스터 리소스의 핑퐁 (Ping-Pong) 효과가 너무 자주 발생하는 것을 방지합니다.

장애 조치 테스트에서 이러한 임계 값에 도달하는 것이 일반적이지만 프로덕션 환경에서는 일반적으로 조사해야 할 문제를 가리 킵니다.


2
도와 주셔서 감사합니다. 지시를 따랐지만 마침내 이것이 문제가 아니라는 것을 알게되었습니다. AG가 자동 장애 조치를 수행 할 수없는 이유는 WSFC 종속성을 올바르게 구성하지 않았기 때문입니다. 결과적으로 MSSQL을 클러스터 리소스 (일반 서비스)로 추가하고 장애 조치 클러스터 관리자에서 AG 리스너와 함께 종속성으로 추가해야했습니다. 또한 '다시 시작하지 못하면이 서비스 또는 응용 프로그램의 모든 리소스를 페일 오버합니다'확인란을 선택해야합니다. 나는 당신이 내가 이미이 일을했다는 인상을 받았다고 확신합니다.
Marcus

1

MSSQL을 일반 서비스 리소스로 추가하는 것은 답이 아닙니다.

그러면 클러스터 관리자가 SQL Server 서비스를 담당하게됩니다. 예, 자동으로 장애 조치되지만 SQL Server 구성 관리자에서 서비스가 "수동"으로 설정되어 있음을 알 수 있습니다. 이제 SQL 서버 서비스를 제어합니다.

NON Clustered Application을 담당하는 Cluster Manager를 사용하고 있습니다.

눈물로 끝날 것입니다.

MS 설명서에 따라 SQL Server 가용성 그룹을 올바르게 구성하는 올바른 방법입니다.

또한 클러스터 관리자> 역할> 장애 조치 탭에 정의 된 장애 조치 매개 변수를 초과하지 않아야합니다.

이러한 제한을 초과하면 클러스터가 리소스를 페일 오버하지 않고 응용 프로그램 이벤트 로그에 오류가 게시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.