다음을 통해 공유


다중 서브넷 환경에서 Always On 수신기에 연결할 때 시간 제한이 발생

이 문서는 다중 서브넷 환경에서 SQL Server Always On 가용성 그룹 수신기에 연결할 때 발생하는 문제를 해결하는 데 도움이 됩니다.

원래 제품 버전: SQL Server 2012 Developer, SQL Server 2012 Enterprise, SQL Server 2012 Express, SQL Server 2012 Standard, SQL Server 2012 Web, SQL Server 2012 Enterprise Core
원래 KB 번호: 2792139

증상

Microsoft SQL Server 2012에서 Always On 가용성 그룹에 대한 가용성 그룹 수신기를 구성한 후에는 수신기를 ping하거나 애플리케이션에서 연결할 수 없습니다.

예를 들어 SQL Server를 사용하여 SQLCMD수신기에 연결하려고 하면 연결 시간이 초과됩니다. 또한 다음과 유사한 오류 메시지가 표시됩니다.

Sqlcmd: 오류: Microsoft SQL Native Client: 로그인 제한 시간이 만료되었습니다.

참고 항목

이러한 증상은 일반적으로 간헐적이거나 가용성 그룹 리소스의 장애 조치와 관련이 있습니다.

다음 스크린샷은 수신기의 가용성을 ping하려고 할 때 발생하는 일의 aglisten예를 보여 줍니다. 또한 스크린샷은 다중 서브넷 장애 조치(failover) 매개 변수-MSQLCMD 포함할 때 명령을 사용하여 SQL Server에 성공적으로 연결되었음을 보여줍니다.

aglisten의 가용성을 위해 수신기를 ping할 때 명령 프롬프트 창의 스크린샷.

참고 항목

스크린샷에 SQLCMD 표시된 대로 매개 변수와 함께 -M 명령을 사용하여 수신기에 연결할 수 있습니다.

원인

이 문제는 애플리케이션이 새 MultiSubnetFailover 매개 변수를 지원하지 않는 레거시 데이터 공급자를 사용하거나 이 매개 변수를 사용하도록 구성되지 않았기 때문에 발생합니다.

이 매개 변수는 .NET Framework 4 및 이후 버전의 .NET Framework에 포함되고 .NET Framework 3.5로 다시 이식되는 최신 버전의 SQLClient 드라이버에서 지원됩니다.

참고 항목

PING 명령은 새 매개 변수를 지원하지 않는 간단한 연결 테스트 도구입니다.

해결

사례에 해당하는 다음 해결 방법 중 하나를 사용할 수 있습니다.

  • 데이터 공급자가 매개 변수를 지원하는 MultiSubNetFailover 경우 이 상황을 해결하려면 매개 변수를 연결 문자열 추가하고 MultiSubNetFailover true설정합니다.

  • 레거시 클라이언트에서 속성을 사용할 MultiSubnetFailover 수 없는 경우 이 상황을 해결하려면 수신기 값을 RegisterAllProvidersIP 0으로 변경할 수 있습니다. 이렇게 하려면 Windows PowerShell 명령줄 인터페이스에서 다음 명령을 실행합니다.

    Import-Module FailoverClusters
    Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
    

    스크린샷은 Windows PowerShell의 명령 예제 출력을 보여줍니다.

참고 항목

값을 0으로 설정한 RegisterAllProvidersIP 후에는 DNS 서버에서 현재 온라인 IP 주소를 등록 취소해야 하며 장애 조치(failover)가 발생할 때 오프라인 IP 주소를 DNS 서버에 등록해야 합니다. 이로 인해 다음 장애 조치(failover)에 대한 연결 지연이 발생할 수 있습니다.

자세한 정보

둘 이상의 서브넷에 정의된 수신기에 연결하려고 하면 클라이언트 드라이버가 수신기의 오프라인 IP 주소 중 하나를 사용하여 연결을 시도하면 작업이 실패할 수 있습니다.

수신기를 만들면 가용성 그룹 복제본이 호스트되는 각 고유한 서브넷에 대해 IP 주소가 지정됩니다. 예를 들어 두 서브넷에 복제본이 있는 가용성 그룹에 대해 수신기를 만드는 경우 수신기에 두 개의 IP 주소가 정의됩니다. 한 주소는 서브넷 1의 SQL Server 인스턴스에 연결할 수 있는 애플리케이션에서 사용되며, 다른 주소는 애플리케이션이 서브넷 2의 SQL Server 인스턴스에 연결할 때 사용됩니다.

백그라운드에서 수신기는 Windows 클러스터 클라이언트 액세스 지점 리소스를 만듭니다. 속성 중 하나는 .입니다 RegisterAllProvidersIP. 수신기를 만들면 1설정되고 모든 수신기의 IP 주소가 DNS 서버에 등록됩니다. 이 구성은 클라이언트에 대한 다시 연결 시간을 줄입니다.

DNS 레코드에는 모든 IP 주소가 포함되어 있으므로 수신기에 연결하려는 클라이언트는 이 상황을 처리하는 방법을 알고 있어야 합니다. 이 MultiSubnetFailover 매개 변수를 사용하면 클라이언트 드라이버가 모든 수신기의 IP 주소와 병렬로 연결을 시도할 수 있습니다. 매개 변수가 MultiSubnetFailover 없으면 클라이언트 드라이버는 수신기의 모든 IP 주소에 순차적으로 연결하려고 합니다. 순차적 연결로 인해 로그온 시간이 길어지거나 로그온 시간이 초과될 수 있습니다.

참고 항목

이 문서에 언급된 문제는 Always On 가용성 그룹의 보조 읽기 전용 복제본을 사용하도록 구성된 SharePoint 환경에도 영향을 줍니다. 이 문제를 해결하려면 다음 중 SharePoint 버전에 적용되는 작업을 수행합니다.

참조