다중 서브넷 환경에서 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) 매개 변수-M
를 SQLCMD
포함할 때 명령을 사용하여 SQL Server에 성공적으로 연결되었음을 보여줍니다.
참고 항목
스크린샷에 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
참고 항목
값을 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 버전에 적용되는 작업을 수행합니다.
SharePoint 2007의 경우: 레거시 애플리케이션으로 분류됩니다. 따라서 매개 변수를 사용하도록 SharePoint 2007을
MultiSubnetFailover
구성할 수 없습니다. 대신 확인 섹션에 설명된 Windows PowerShell 명령을 사용해야 합니다.SharePoint 2010의 경우: 이제 매개 변수에 대한
MultiSubnetFailover
지원을 추가하는 누적 업데이트 패키지를 사용할 수 있습니다. 업데이트 패키지에 대한 자세한 내용은 다음 문서를 참조하세요.