고가용성, 재해 복구를 위한 JDBC 드라이브 지원
이 문서에서는 고가용성 재해 복구: Always On 가용성 그룹에 대한 Microsoft JDBC Driver for SQL Server 지원에 대해 설명합니다. Always On 가용성 그룹에 대한 자세한 내용은 SQL Server 2012(11.x) 온라인 설명서를 참조하세요.
Microsoft JDBC Driver for SQL Server의 버전 4.0에서 시작하면 이제 연결 속성에 (고가용성 재해 복구) 가용성 그룹(AG)의 가용성 그룹 수신기를 지정할 수 있습니다. SQL Server용 Microsoft JDBC Driver 애플리케이션이 장애 조치되는 Always On 데이터베이스에 연결되는 경우 장애 조치 후 작업을 계속하기 위해 원래 연결이 끊어지고 애플리케이션은 새 연결을 열어야 합니다. Microsoft JDBC Driver for SQL Server 4.0에 다음 연결 속성이 추가되었습니다.
multiSubnetFailover
applicationIntent
가용성 그룹 또는 장애 조치(failover) 클러스터 인스턴스의 가용성 그룹 수신기에 연결할 때는 항상 multiSubnetFailover=true를 지정합니다.
참고 항목
multiSubnetFailover는 기본적으로 false입니다. applicationIntent를 사용하여 애플리케이션 워크로드 유형을 선언합니다. 자세한 내용은 아래 섹션을 참조하세요.
Microsoft JDBC Driver for SQL Server 버전 6.0부터, Always On 가용성 그룹 또는 여러 IP 주소가 연결된 서버에 대한 투명 연결에 대해 새로운 연결 속성인 transparentNetworkIPResolution(TNIR)이 추가되었습니다. transparentNetworkIPResolution이 true이면 드라이버는 사용 가능한 첫 번째 IP 주소에 연결을 시도합니다. 첫 번째 시도가 실패하면 제한 시간이 만료될 때까지 드라이버는 모든 IP 주소에 병렬로 연결을 시도하고, 그 중 하나가 성공할 때 보류 중인 연결 시도를 모두 삭제합니다.
고:
- transparentNetworkIPResolution은 기본적으로 true입니다.
- multiSubnetFailover가 true이면 transparentNetworkIPResolution이 무시됩니다.
- 데이터베이스 미러링이 사용되면 transparentNetworkIPResolution이 무시됩니다.
- IP 주소가 64개 이상인 경우 transparentNetworkIPResolution이 무시됩니다.
- multiSubnetFailover=true의 경우에는 첫 연결 시도에서 500ms가 시간 제한 값으로 사용됩니다. 나머지 연결 시도는 multiSubnetFailover 기능과 동일한 논리를 따릅니다.
참고 항목
Microsoft JDBC Driver 4.2 for SQL Server(이하)를 사용하는 경우 multiSubnetFailover가 false이면 Microsoft JDBC Driver for SQL Server가 첫 번째 IP 주소에 연결을 시도합니다. Microsoft JDBC Driver for SQL Server에서 첫 번째 IP 주소와의 연결을 설정할 수 없는 경우 연결이 실패합니다. Microsoft JDBC Driver for SQL Server는 서버와 연결된 후속 IP 주소에 연결을 시도하지 않습니다.
참고 항목
연결 제한 시간을 늘리고 연결 재시도 논리를 구현하면 애플리케이션이 가용성 그룹에 연결될 가능성이 증가합니다. 또한 가용성 그룹 장애 조치(failover)로 인해 연결이 실패할 수 있으므로 실패한 연결을 다시 연결할 때까지 다시 시도하는 연결 재시도 논리를 구현해야 합니다.
multiSubnetFailover로 연결
SQL Server 2012(11.x) 가용성 그룹 또는 SQL Server 2012(11.x) 장애 조치(failover) 클러스터 인스턴스의 가용성 그룹 수신기에 연결할 때는 항상 multiSubnetFailover=true를 지정합니다. multiSubnetFailover를 사용하면 SQL Server 2012(11.x)에서 모든 가용성 그룹 및 장애 조치(Failover) 클러스터 인스턴스에 대한 장애 조치(Failover)를 빠르게 수행하고 단일 및 다중 서브넷 Always On 토폴로지에 대한 장애 조치(Failover) 시간을 크게 줄일 수 있습니다. 다중 서브넷 장애 조치(Failover) 중에는 클라이언트가 연결을 병렬로 시도합니다. 서브넷 장애 조치(Failover) 중에는 Microsoft JDBC Driver for SQL Server가 TCP 연결을 적극적으로 재시도합니다.
multiSubnetFailover 연결 속성은 애플리케이션을 가용성 그룹 또는 장애 조치(Failover) 클러스터 인스턴스에 배포하는 중이며 Microsoft JDBC Driver for SQL Server가 모든 IP 주소에 연결을 시도하여 주 SQL Server 인스턴스의 데이터베이스에 연결을 시도함을 나타냅니다. 연결에 대해 MultiSubnetFailover=true를 지정하면 클라이언트는 운영 체제의 기본 TCP 재전송 간격보다 빠르게 TCP 연결을 다시 시도합니다. 이 동작을 통해 Always On 가용성 그룹 또는 Always On 장애 조치(Failover) 클러스터 인스턴스의 장애 조치(Failover) 후 더 빠르게 다시 연결할 수 있으며 단일/다중 서브넷 가용성 그룹 및 장애 조치(Failover) 클러스터 인스턴스에 모두 적용됩니다.
Microsoft JDBC Driver for SQL Server의 연결 스트링 키워드에 대한 자세한 내용은 연결 속성 설정을 참조하세요.
가용성 그룹 수신기 또는 장애 조치 클러스터 인스턴스 이외의 대상에 연결할 때 multiSubnetFailover=true를 지정하면 성능이 저하될 수 있으므로 이는 지원되지 않습니다.
보안 관리자가 설치되지 않은 경우 Java Virtual Machine은 기본적으로 JDK 구현 및 Java 속성 networkaddress.cache.ttl 및 networkaddress.cache.negative.ttl에 정의된 제한 시간 동안 VIP(가상 IP 주소)를 캐시합니다. JDK 보안 관리자가 설치된 경우 Java Virtual Machine은 VIP를 캐시하고 기본적으로 캐시를 새로 고치지 않습니다. Java Virtual Machine 캐시에 대해 "time-to-live"(networkaddress.cache.ttl)를 1일로 설정해야 합니다. 기본값을 1일(정도)로 변경하지 않으면 VIP를 추가하거나 업데이트할 때 Java Virtual Machine 캐시에서 기존 값이 삭제되지 않습니다. networkaddress.cache.ttl 및 networkaddress.cache.negative.ttl에 대한 자세한 내용은 https://download.oracle.com/javase/6/docs/technotes/guides/net/properties.html을 참조하세요.
다음 지침에 따라 가용성 그룹의 서버 또는 장애 조치(failover) 클러스터 인스턴스로 연결하세요.
드라이버에서 instanceName 연결 속성이 multiSubnetFailover 연결 속성과 동일한 연결 스트링 사용되는 경우 오류가 발생합니다. 이 오류는 SQL Browser가 가용성 그룹에서 사용되지 않는다는 사실을 반영합니다. 그러나 portNumber 연결 속성도 지정된 경우 드라이버는 instanceName을 무시하고 portNumber를 사용합니다.
단일 또는 다중 서브넷에 연결할 때 multiSubnetFailover 연결 속성을 사용하십시오. 그러면 두 경우 모두 성능이 향상됩니다.
가용성 그룹에 연결하려면 가용성 그룹에 대한 가용성 그룹 수신기를 연결 문자열의 서버로 지정합니다. 예를 들면 jdbc:sqlserver://VNN1입니다.
IP 주소가 64개 이상으로 구성된 SQL Server 인스턴스에 연결하면 연결 오류가 발생합니다.
multiSubnetFailover 연결 속성을 사용하는 애플리케이션 동작은 SQL Server 인증, Kerberos 인증, Windows 인증 등의 인증 유형에 영향을 받지 않습니다.
장애 조치(failover) 시간을 수용하고 애플리케이션의 연결 재시도 횟수를 줄이기 위해 loginTimeout 값을 증가시킵니다.
읽기 전용 라우팅이 적용되지 않으면 다음과 같은 경우 가용성 그룹 내 보조 복제본 위치에 대한 연결이 실패합니다.
보조 복제본 위치가 연결을 허용하도록 구성되어 있지 않은 경우
애플리케이션에서 applicationIntent=ReadWrite(아래에서 설명)를 사용하고 보조 복제본 위치가 읽기 전용 액세스용으로 구성되어 있는 경우
주 복제본이 읽기 전용 작업을 거부하도록 구성되어 있고 연결 스트링에 ApplicationIntent=ReadOnly가 포함되어 있으면 연결이 실패합니다.
데이터베이스 미러링에서 다중 서브넷 클러스터를 사용하도록 업그레이드
현재 데이터베이스 미러링을 사용 중인 Microsoft JDBC Driver for SQL 애플리케이션을 다중 서브넷 시나리오로 업그레이드할 경우에는 failoverPartner 연결 속성을 제거하고, 이를 true로 설정된 multiSubnetFailover로 바꾸고, 연결 스트링에서 서버 이름을 가용성 그룹 수신기로 바꿔야 합니다. 연결 문자열에서 failoverPartner 및 multiSubnetFailover=true를 사용하는 경우 드라이버에서 오류가 발생합니다. 그러나 연결 스트링 failoverPartner 및 multiSubnetFailover=false(또는 ApplicationIntent=ReadWrite)를 사용하는 경우 애플리케이션은 데이터베이스 미러링을 사용합니다.
AG의 기본 데이터베이스에서 데이터베이스 미러링이 사용되고 가용성 그룹 수신기 대신 주 데이터베이스에 연결하는 연결 스트링에 multiSubnetFailover=true가 사용된 경우 드라이버에서 오류를 반환합니다.
애플리케이션 의도 지정
연결 문자열에 키워드 ApplicationIntent
를 지정할 수 있습니다. 할당 가능한 값은 ReadWrite
(기본값) 또는 ReadOnly
입니다.
ApplicationIntent=ReadOnly
를 설정하면 클라이언트는 연결 시 읽은 워크로드를 요청합니다. 서버는 연결 시 및 USE
데이터베이스 문 중에 의도를 적용합니다.
ApplicationIntent
키워드는 레거시 읽기 전용 데이터베이스에 적용되지 않습니다.
ReadOnly의 대상
연결이 ReadOnly
를 선택하면 데이터베이스에 대해 존재할 수 있는 다음 특수 구성 중 하나에 연결이 할당됩니다.
Always On. 데이터베이스는 대상 가용성 그룹 데이터베이스에 대한 읽기 워크로드를 허용하거나 허용하지 않을 수 있습니다. 이 선택은
PRIMARY_ROLE
와SECONDARY_ROLE
Transact-SQL 문의ALLOW_CONNECTIONS
절을 사용하여 제어됩니다.
이러한 특수 대상을 사용할 수 없는 경우 일반 데이터베이스를 읽습니다.
ApplicationIntent
키워드는 읽기 전용 라우팅을 설정하는 데 사용됩니다.
읽기 전용 라우팅
읽기 전용 라우팅은 데이터베이스의 읽기 전용 복제 가용성을 보장할 수 있는 기능입니다. 읽기 전용 라우팅을 사용하도록 설정하려면 다음이 모두 적용합니다.
Always On 가용성 그룹 수신기에 연결해야 합니다.
ApplicationIntent
연결 문자열 키워드를ReadOnly
로 설정해야 합니다.읽기 전용 라우팅을 설정하려면 데이터베이스 관리자가 가용성 그룹을 구성해야 합니다.
각각 읽기 전용 라우팅을 사용하는 여러 연결이 동일한 읽기 전용 복제본에 연결되지 않을 수 있습니다. 데이터베이스 동기화를 변경하거나 서버 라우팅 구성을 변경하면 클라이언트를 다른 읽기 전용 복사본에 연결할 수 있습니다.
가용성 그룹 수신기를 Server
연결 스트링 키워드에 전달하지 않고 모든 읽기 전용 요청을 동일한 읽기 전용 복제본에 연결할 수 있습니다. 대신, 읽기 전용 인스턴스의 이름을 지정합니다.
읽기 전용 라우팅은 주 복제본에 연결하는 것보다 시간이 더 오래 걸릴 수도 있습니다. 읽기 전용 라우팅은 먼저 주 복제본에 연결한 다음, 가장 잘 읽을 수 있는 보조 복제본을 찾기 때문입니다. 이렇게 단계가 여럿이기 때문에 login
제한 시간을 30초 이상으로 늘려야 합니다.
연결 풀링
연결 풀링 라이브러리와 함께 Microsoft JDBC Driver for SQL Server를 사용하는 경우 다음 사항을 고려해야 합니다.
- 읽기 전용 라우팅을 구성하고 부하를 분산하려는 읽기 전용 서버 풀이 있는 경우 연결 풀링을 사용하면 새 연결이 대상 서버에 분산될 수 있는 기회가 줄어듭니다.
- 풀에 있는 단일 서버에 보다 높은 부하가 부과되지 않도록 하려면 풀 전체에서 균일한 연결 분포를 지원하는 풀 옵션을 선택하세요.
- 연결 풀이 연결 수명을 사용하여 구성되었는지 확인합니다. 읽기 전용 연결을 만들 때 읽기 전용 복제본(replica) 사용할 수 없는 경우 구성은 연결이 결국 닫히고 다시 사용할 수 있게 되면 읽기 전용 복제본(replica) 다시 설정해야 합니다.
multiSubnetFailover 및 applicationIntent를 지원하는 새 메서드
다음 메서드를 사용하면 multiSubnetFailover, applicationIntent, transparentNetworkIPResolution 연결 스트링 키워드(keyword) 프로그래밍 방식으로 액세스할 수 있습니다.
SQLServerDataSource.setTransparentNetworkIPResolution
SQLServerDataSource.getTransparentNetworkIPResolution
getMultiSubnetFailover, setMultiSubnetFailover, getApplicationIntent, setApplicationIntent, getTransparentNetworkIPResolution, and setTransparentNetworkIPResolution 메서드도 SQLServerDataSource 클래스, SQLServerConnectionPoolDataSource 클래스, SQLServerXADataSource 클래스에 추가됩니다.
TLS/SSL 인증서 유효성 검사
가용성 그룹은 여러 물리적 서버로 구성됩니다. Microsoft JDBC Driver 4.0 for SQL Server은 여러 호스트를 동일한 인증서와 연결할 수 있도록 TLS/SSL 인증서에서 주체 대체 이름에 대한 지원을 추가했습니다. TLS에 관해 자세한 내용은 암호화 지원 이해를 참조하세요.