Always On 가용성 그룹 수신기에 연결

적용 대상:SQL Server

가용성 그룹 수신기를 구성한 후에는 Always On 가용성 그룹 수신기에 연결을 하기 위해서 연결 문자열을 업데이트해야 합니다. 이렇게 하면 장애 조치(failover)를 한 후에 연결 문자열을 수동으로 업데이트하지 않아도 애플리케이션에서 의도한 복제본(replica)으로 자동으로 트래픽을 라우팅됩니다.

주 복제본(replica)에 연결

읽기/쓰기 액세스하기 위해서 기본 복제본(replica)에 연결하려면 연결 문자열에 가용성 그룹 수신기 DNS 이름을 지정해 주세요.

예를 들어 수신기를 통해 SQL Server Management Studio의 기본 복제본(replica)에 연결하려고 한다면 서버 이름 필드에 수신기 DNS 이름을 입력합니다:

Connect to listener in SSMS

장애 조치(failover)를 하는 도중에 기본 복제본(replica)이 변경될 때 수신기에 대한 기존 연결은 끊어지며 새 연결이 새 주 복제본(replica)으로 라우팅됩니다.

ADO.NET 공급자(System.Data.SqlClient)에 대한 기본 연결 문자열 예제(System.Data.SqlClient):

Server=tcp: AGListener,1433;Database=MyDB;Integrated Security=SSPI  

다음 T-SQL(Transact-SQL) 명령을 실행하여 수신기를 통해 현재 연결된 복제본을 확인할 수 있습니다.

SELECT @@SERVERNAME

예를 들어 SQLVM1이 내 기본 복제본(replica)인 경우:

Check replica connectivity

가용성 그룹 수신기를 사용하는 대신에 기본 또는 보조 복제본(replica)의 인스턴스 이름을 사용해서 SQL Server 인스턴스에 직접 연결할 수 있습니다. 그러나 새 연결이 현재의 새로운 주 복제본에 자동으로 라우팅되는 기능을 사용할 수 없습니다. 또한 지정된 read-intent로 연결이 읽기 가능한 보조 복제본(replica)으로 자동으로 라우팅되는 읽기 전용 라우팅의 이러한 혜택을 잃게 됩니다.

읽기 전용 복제본에 연결

읽기 전용 라우팅은 읽기 전용 워크로드를 허용하도록 구성된 읽기 가능한 보조 복제본으로 들어오는 수신기 연결을 자동 라우팅하는 기능을 말합니다.

다음과 같은 경우에는 연결이 자동으로 읽기 전용 복제본(replica)으로 라우팅됩니다:

  • 하나 이상의 보조 복제본이 읽기 전용 액세스로 설정되었으며 각 읽기 전용 보조 복제본과 주 복제본은 읽기 전용 라우팅을 지원하도록 구성되었습니다.

  • 연결 문자열은 가용성 그룹에 관련된 데이터베이스를 참조하고 있습니다. 이에 대한 대안은 연결에 사용된 로그인이 데이터베이스를 기본 데이터베이스로 구성합니다. 자세한 정보는 알고리즘이 읽기 전용 라우팅에서 작동하는 방식에 대한 이 문서를 참조해 주세요.

  • 연결 문자열은 가용성 그룹 수신기를 참조하며 들어오는 연결의 애플리케이션 의도는 ODBC 또는 OLEDB 연결 문자열이나 연결 특성 또는 속성에서 Application Intent=ReadOnly 키워드를 사용하는 등과 같은 방법으로 읽기 전용으로 설정됩니다.

애플리케이션 의도의 특성은 로그인이 이뤄지는 동안 클라이언트 세션에 저장되고 SQL Server 인스턴스는 이 의도를 처리하며 가용성 그룹의 구성 및 보조 복제본(replica) 대상 데이터베이스의 현재 읽기-쓰기 상태에 따라 실행할 작업을 결정합니다.

예를 들어 SQL Server Management Studio를 사용하여 읽기 전용 복제본(replica) 연결하기 위해서는 서버로 연결 대화 상자에서 옵션을 선택하고 추가 연결 매개 변수의 탭을 선택한 이후에 텍스트 상자에 지정ApplicationIntent=ReadOnly합니다:

Read only connection in SSMS

읽기 전용 애플리케이션 의도를 지정하는 ADO.NET 공급자(System.Data.SqlClient)에 대한 연결 문자열의 예제:

Server=tcp:AGListener;Database=AdventureWorks;Integrated Security=SSPI;ApplicationIntent=ReadOnly  

자세한 내용은 가용성 복제본에 대한 읽기 전용 권한 구성(SQL Server)을 참조하세요

기본 포트가 아닌 포트

수신기를 만들 때 수신기에서 사용할 포트를 지정합니다. 포트가 기본 포트인 1433인 경우에는 수신기에 연결할 때 포트 번호를 지정할 필요가 없습니다. 그러타 포트가 1433이 아닌 경우 다음과 같이 listenername,port형식으로 연결 문자열 포트를 지정해야 합니다:

Connect with a non-default port

수신기에서 사용할 기본이 아닌 포트를 지정하는 ADO.NET 공급자(System.Data.SqlClient) 연결 문자열의 예:

Server=tcp:AGListener,1445;Database=AdventureWorks;Integrated Security=SSPI 

수신기 바이패스

가용성 그룹 수신기에서 장애 조치(Failover) 리디렉션 및 읽기 전용 라우팅을 지원하지만 클라이언트 연결에서 해당 기능을 사용할 필요는 없습니다. 클라이언트 연결은 가용성 그룹 수신기에 연결하는 대신에 SQL Server 인스턴스를 직접 참조할 수도 있습니다.

SQL Server의 인스턴스에서 가용성 그룹 수신기를 사용하거나 다른 인스턴스 엔드포인트를 사용하여 연결이 로그인되는지 여부는 관계가 없습니다. SQL Server의 인스턴스에서는 대상 데이터베이스의 상태를 확인하고 가용성 그룹의 구성 및 인스턴스의 데이터베이스 현재 상태에 따라 연결을 허용하거나 허용하지 않습니다. 예를 들어, 클라이언트 애플리케이션이 SQL Server 포트 인스턴스에 직접 연결하고 가용성 그룹에서 호스트 되는 대상 데이터베이스에 연결하고 대상 데이터베이스가 주 상태 및 온라인 상태인 경우 성공적으로 연결될 것입니다. 대상 데이터베이스가 오프라인 상태이거나 전환 상태이면 데이터베이스 연결이 실패합니다.

또는 데이터베이스 미러 Always On 가용성 그룹으로 마이그레이션이 이뤄지는 동안 애플리케이션은 보조 복제본(replica)은 하나만 있게 되고 사용자 연결을 허용하지 않는 한 데이터베이스 미러 연결 문자열을 지정할 수 있습니다.

데이터베이스 미러링 연결 문자열

가용성 그룹에 보조 복제본(replica)은 하나만 있으며 보조 복제본(replica) 대한 ALLOW_CONNECTIONS = READ_ONLY 또는 ALLOW_CONNECTIONS = NONE으로 구성된 경우라면 클라이언트는 데이터베이스 미러 연결 문자열 사용해서 주 복제본(replica)에 연결할 수 있습니다. 이 방법은 가용성 그룹을 두 개의 가용성 복제본(replica)(기본 복제본(replica) 및 하나의 보조 복제본(replica))으로 제한하는 한 기존 애플리케이션을 데이터베이스 미러링에서 가용성 그룹으로 마이그레이션하는 동안 유용할 수 있습니다. 보조 복제본을 더 추가하려면 가용성 그룹의 가용성 그룹 수신기를 만들고 가용성 그룹 수신기 DNS 이름을 사용하도록 애플리케이션을 업데이트해야 합니다.

데이터베이스 미러링 연결 문자열을 사용할 때 클라이언트는 SQL Server Native Client 또는 .NET Framework Data Provider for SQL Server를 사용할 수 있습니다. 클라이언트에서 제공하는 연결 문자열 연결하려고 하는 가용성 복제본(replica)을 초기에 호스트하는 서버 인스턴스를 식별하기 위해서는 하나의 서버 인스턴스의 이름(초기 파트너 이름)을 최소한으로 제공해야 합니다. 필요한 경우 연결 문자열에 다른 서버 인스턴스의 이름, 즉 장애 조치(failover) 파트너 이름을 제공하여 초기에 보조 복제본을 호스팅할 서버 인스턴스를 장애 조치(failover) 파트너 이름으로 식별할 수도 있습니다.

데이터베이스 미러링 연결 문자열에 대한 자세한 내용은 데이터베이스 미러링 세션에 클라이언트 연결(SQL Server)을 참조하세요.

다중 서브넷 장애 조치(failover)

연결 문자열에서 MultiSubnetFailover 연결 옵션을 지원하는 클라이언트 라이브러리를 사용 중인 경우, 사용하는 공급자의 구문에 따라 MultiSubnetFailover를 “True” 또는 “Yes”로 설정하여 다른 서브넷에 대한 가용성 그룹 장애 조치(failover)를 최적화할 수 있습니다.

참고 항목

가용성 그룹 수신기 및 SQL Server 장애 조치(failover) 클러스터 인스턴스 이름에 대한 단일 및 다중 서브넷 연결 모두에 대해 이 설정을 권장합니다. 이 옵션을 활성화하면 단일 서브넷 시나리오의 경우에도 추가 최적화가 추가됩니다.

MultiSubnetFailover 연결 옵션은 TCP 네트워크 프로토콜에서만 작동하며 가용성 그룹 수신기 및 SQL Server에 연결하는 가상 네트워크 이름에 연결할 때만 지원됩니다.

다중 서브넷 장애 조치(failover)를 사용하도록 설정하는 ADO.NET 공급자(System.Data.SqlClient) 연결 문자열 예제는 다음과 같습니다:

Server=tcp:AGListener,1433;Database=AdventureWorks;Integrated Security=SSPI; MultiSubnetFailover=True  

가용성 그룹이 단일 서브넷에만 걸쳐져 있는 경우에도 MultiSubnetFailover 연결 옵션을 True로 설정해야 합니다. 이렇게 하면 향후 클라이언트 연결 문자열을 변경하지 않아도 서브넷의 향후 스패닝을 지원하도록 새 클라이언트를 미리 구성하고 단일 서브넷 장애 조치(failover)에 대한 장애 조치(failover) 성능을 최적화할 수 있습니다. MultiSubnetFailover 연결 옵션은 필수는 아니지만, 서브넷 장애 조치(failover) 시간을 단축해 준다는 혜택이 있습니다. 클라이언트 드라이버가 가용성 그룹과 연결된 각 IP 주소에 대한 TCP 소켓을 병렬로 열려고 시도하기 때문입니다. 클라이언트 드라이버는 첫 번째 IP가 응답할 때까지 기다린 다음 성공적으로 응답하면 해당 IP를 사용하여 연결합니다.

수신기 및 TLS/SSL 인증서

가용성 그룹 수신기에 연결할 때 SQL Server의 참여 인스턴스가 세션 암호화와 함께 TLS/SSL 인증서를 사용하는 경우 연결 클라이언트 드라이버는 암호화를 강제로 적용하기 위해서 TLS/SSL 인증서의 주체 대체 이름을 지원해야 합니다.

인증서의 주체 대체 이름에 설정된 모든 가용성 그룹 수신기 목록을 사용하여 장애 조치 클러스터의 각 참여 서버 노드에 대해 X.509 인증서를 구성해야 합니다.

인증서 값의 형식은 다음과 같습니다:

CN = Server.FQDN  
SAN = Server.FQDN,Listener1.FQDN,Listener2.FQDN

예를 들어 다음과 같은 값이 있다고 가정합니다.

Servername: Win2019   
Instance: SQL2019   
AG: AG2019   
Listener: Listener2019   
Domain: contoso.com  (which is also the FQDN)

단일 가용성 그룹이 있는 WSFC의 경우 인증서에는 서버의 FQDN(정규화된 do기본 이름) 및 수신기의 FQDN이 있어야 합니다:

CN: Win2019.contoso.com
SAN: Win2019.contoso.com, Listener2019.contoso.com 

이 구성을 사용하면 인스턴스 (WIN2019\SQL2019) 또는 수신기 (Listener2019)에 연결할 때 연결이 암호화됩니다.

네트워킹을 구성하는 방법에 따라 NetBIOS를 SAN에 추가해야 할 수도 있는 고객의 작은 하위 집합이 있습니다. 이 경우 인증서 값은 다음과 같아야 합니다.

CN: Win2019.contoso.com
SAN: Win2019,Win2019.contoso.com,Listener2019,Listener2019.contoso.com

WSFC에 세 개의 가용성 그룹 수신기(예: Listener1, Listener2, Listener3)가 있는 경우

이러한 경우 인증서 값은 다음과 같아야 합니다:

CN: Win2019.contoso.com
SAN: Win2019.contoso.com,Listener1.contoso.com,Listener2.contoso.com,Listener3.contoso.com

수신기 및 Kerberos(SPN)

도메인 관리자는 각 가용성 그룹 수신기에 대해 Active Directory에서 SPN(서비스 사용자 이름)을 구성하여 수신기에 대한 클라이언트 연결에 Kerberos를 사용하도록 설정해야 합니다. SPN을 등록할 때 가용성 복제본(replica)을 호스팅하는 서버 인스턴스의 서비스 계정을 사용해야 합니다. SPN이 모든 복제본(replica)에서 작동하려면 가용성 그룹을 호스트하는 WSFC 클러스터의 모든 인스턴스에 동일한 서비스 계정을 사용해야 합니다.

setspn Windows 명령줄 도구를 사용해서 SPN을 구성합니다. 예를 들어 corp\svclogin2 도메인 계정에서 실행되도록 구성된 SQL Server 인스턴스 집합에 호스트되는 AG1listener.Adventure-Works.com이라는 가용성 그룹 수신기의 SPN을 구성하려면 다음을 수행합니다.

setspn -A MSSQLSvc/AG1listener.Adventure-Works.com:1433 corp\svclogin2  

자세한 정보는 Kerberos 연결의 서비스 사용자 이름 등록을 참조해 주세요.

다음 단계

수신기에 성공적으로 연결이 되면 읽기 전용 워크로드백업을 보조 복제본(replica)으로 오프로드해서 성능을 향상시키는 방법을 고려해 보세요. 다양한 가용성 그룹 모니터링 전략을 검토하여 가용성 그룹의 상태를 확인할 수도 있습니다.

가용성 그룹에 대한 자세한 내용은 Always On 가용성 그룹 개요(SQL Server)를 참조하세요.