다음을 통해 공유


Always On 가용성 그룹 내에서 가용성 복제본 연결이 해제됨

적용 대상: SQL Server

소개

  • 정책 이름: 가용성 복제본 연결 상태
  • 문제: 가용성 복제본의 연결이 끊어짐
  • 범주: 위험
  • 패싯: 가용성 복제본

설명

이 정책은 가용성 복제본 사이에서의 연결 상태를 확인합니다. 가용성 복제본의 연결 상태가 DISCONNECTED인 경우 정책은 비정상 상태에 있습니다. 그 외에는 정책이 정상 상태입니다.

가능한 원인

보조 복제본이 주 복제본에 연결되어 있지 않습니다. 상태는 DISCONNECTED입니다. 이 문제는 다음 이유 중 하나로 인해 발생할 수 있습니다.

가능한 해결 방법

주 및 보조 복제본(replica) 인스턴스에 관한 데이터베이스 미러링 엔드포인트 구성을 확인해서 일치하지 않는 구성을 업데이트합니다. 또한 포트가 충돌하는 경우 포트 번호를 변경합니다.

이 문제에 대한 해결 방법은 다음과 같습니다:

연결 포트가 다른 애플리케이션과 충돌할 수 있음

다음 명령을 실행하여 포트 문제를 진단합니다.

$server_name = "server_instance"  #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT type_desc, port FROM sys.tcp_endpoints WHERE type_desc = 'DATABASE_MIRRORING'; "

이전 명령은 다음 명령에서 사용해야 하는 포트 번호를 반환합니다.

$port = "5022"
Get-NetTCPConnection -LocalPort $port
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess | Select-Object Name, ProductVersion, Path, Id

암호화 유형 또는 알고리즘이 일치하지 않음

두 서버에서 모두 이 명령을 실행하고, 암호화를 비교하고, 둘 다 동일한지 확인합니다.

$server_name = "server_instance"  #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc FROM sys.database_mirroring_endpoints"

연결 엔드포인트가 삭제되었거나 시작되지 않았음

미러링 엔드포인트가 종료되고 시작되면 다음 명령을 실행합니다.

$server_name = "server_instance"  #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc FROM sys.database_mirroring_endpoints"

엔드포인트가 연결에 응답하지 않거나 실행되고 있지 않은 것으로 의심되는 경우 다음 명령을 실행합니다.

$server_name = "server_instance"  #use your SQL Server instance here
$server_name = "hadr_endpoint"    #replace with your endpoint name
sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = stopped"
sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = started"

Warning

STATE = stopped를 이용해 명령을 실행하면 엔드포인트가 중지되고 Always On 트래픽 흐름이 일시적으로 중단됩니다.

네트워크 또는 연결 문제 또는 방화벽에서 포트가 차단된 경우

다음 명령을 사용하여 Node1에서 Node2로 및 Node2에서 Node1로 양방향으로 연결을 테스트합니다:

$computer = "remote_node"      # replace with node name in your environment
$port = "5022"                 # replace with the port from your database_mirroring_endpoints
Test-NetConnection -ComputerName $computer -Port $port

계정이 도메인 사용자가 아니며 DC 및 원격 노드에 연결할 수 없습니다.

서비스 계정이 원격 노드에 연결할 수 있는지 여부를 테스트하려면 다음 단계를 수행합니다. 이 단계에서는 서비스 계정으로 로그인하지 않았다고 가정합니다.

  1. 시작>Windows PowerShell>을 선택하고 아이콘을 마우스 오른쪽 단추로 클릭합니다.

  2. 더 보기>다른 사용자로 실행>다른 계정 사용을 선택합니다.

  3. 서비스 계정 이름 및 암호를 입력합니다.

  4. Windows PowerShell이 열리면 다음 명령을 입력하여 서비스 계정으로 로그인했는지 확인합니다.

    whoami
    
  5. 그런 다음 다음 예제에서와 같이 원격 노드에 대한 연결을 테스트할 수 있습니다.

    $computer = "remote_node" # replace with node name in your environment
    $port = "5022"            # replace with the port from your database_mirroring_endpoints
    Test-NetConnection -ComputerName $computer -Port $port