Linux 및 macOS에서의 고가용성과 재해 복구
Linux 및 macOS용 ODBC 드라이버는 Always On 가용성 그룹을 지원합니다. Always On 가용성 그룹에 대한 자세한 내용은 다음을 참조하세요.
연결 문자열 특정 가용성 그룹의 가용성 그룹 수신기를 지정할 수 있습니다. Linux 또는 macOS의 ODBC 애플리케이션이 장애 조치(fail over)된 가용성 그룹의 데이터베이스에 연결된 경우 원래 연결이 끊어집니다. 애플리케이션이 장애 조치(failover) 후에도 작업을 계속하려면 새 연결을 열어야 합니다.
Linux 및 macOS의 ODBC 드라이버는 가용성 그룹 수신기에 연결되지 않는 경우 DNS 호스트 이름과 연결된 모든 IP 주소를 순차적으로 반복합니다. DNS 서버가 처음 반환한 IP 주소에 연결할 수 없는 경우 이러한 반복 작업에 많은 시간이 소요될 수 있습니다.
가용성 그룹 수신기에 연결할 때 드라이버는 모든 IP 주소에 동시에 연결을 설정하려고 시도합니다. 연결 시도에 성공하면 드라이버가 모든 보류 중인 연결 시도를 삭제합니다.
참고 항목
가용성 그룹 장애 조치(failover)로 인해 연결이 실패할 수 있으므로 연결 재시도 논리를 구현해야 합니다. 다시 연결될 때까지 실패한 연결을 다시 시도합니다. 연결 시간 제한을 늘리고 연결 재시도 논리를 구현하면 가용성 그룹에 대한 연결 가능성이 높아집니다.
MultiSubnetFailover를 사용하여 연결
SQL Server 2012(11.x) 가용성 그룹 수신기 또는 SQL Server 2012(11.x) 장애 조치(failover) 클러스터 인스턴스에 연결할 때는 항상 MultiSubnetFailover=Yes
를 지정합니다. MultiSubnetFailover
를 사용하면 SQL Server 2012(11.x)의 모든 가용성 그룹 및 장애 조치(failover) 클러스터 인스턴스에 대해 더 빠른 장애 조치(failover)를 수행할 수 있습니다.
이 연결 속성은 단일 및 다중 서브넷 Always On 토폴로지의 장애 조치(failover) 시간도 크게 줄여줍니다. 다중 서브넷 장애 조치(failover) 중에는 클라이언트가 병렬로 연결을 시도합니다. 서브넷 장애 조치 동안 드라이버는 TCP 연결을 적극적으로 다시 시도합니다.
MultiSubnetFailover
연결 속성은 애플리케이션이 가용성 그룹 또는 장애 조치(failover) 클러스터 인스턴스에서 배포되는 중이라는 것을 나타냅니다. 드라이버는 모든 IP 주소에 연결을 시도하여 기본 SQL Server 인스턴스의 데이터베이스에 연결을 시도합니다.
MultiSubnetFailover=Yes
를 사용하여 연결하면 클라이언트는 운영 체제의 기본 TCP 재전송 간격보다 빠르게 TCP 연결을 다시 시도합니다. MultiSubnetFailover=Yes
를 사용하면 Always On 가용성 그룹 또는 Always On 장애 조치(failover) 클러스터 인스턴스의 장애 조치(failover) 이후에 더 빠르게 다시 연결할 수 있습니다. MultiSubnetFailover=Yes
는 단일 및 다중 서브넷 가용성 그룹과 장애 조치(failover) 클러스터 인스턴스 모두에 적용됩니다.
가용성 그룹 수신기 또는 장애 조치(failover) 클러스터 인스턴스에 연결하는 경우 MultiSubnetFailover=Yes
를 사용합니다. 그렇지 않으면 애플리케이션의 성능에 부정적인 영향을 미칠 수 있습니다.
권장 사항
장애 조치(failover) 클러스터 인스턴스 또는 가용성 그룹의 서버에 연결하는 경우:
단일 서브넷 또는 다중 서브넷 가용성 그룹에 연결할 때
MultiSubnetFailover=Yes
를 지정하면 성능이 향상됩니다.가용성 그룹에 대한 가용성 그룹 수신기를 연결 문자열의 서버로 지정합니다.
64개 이상의 IP 주소로 구성된 SQL Server 인스턴스에는 연결할 수 없습니다.
애플리케이션의 동작에 영향을 주지 않고 SQL Server 인증 또는 Kerberos 인증을 모두
MultiSubnetFailover=Yes
와 함께 사용할 수 있습니다.장애 조치(failover) 시간을 수용하고 애플리케이션 연결 재시도 횟수를 줄이기 위해
loginTimeout
값을 늘릴 수 있습니다.분산 트랜잭션은 지원되지 않습니다.
읽기 전용 라우팅이 적용되지 않으면 다음과 같은 경우 가용성 그룹 내 보조 복제본 위치에 대한 연결이 실패합니다.
보조 복제본 위치가 연결을 허용하도록 구성되어 있지 않은 경우.
애플리케이션에서
ApplicationIntent=ReadWrite
를 사용하고 보조 복제본 위치가 읽기 전용 액세스용으로 구성되어 있는 경우.
주 복제본이 읽기 전용 작업을 거부하도록 구성되어 있고 연결 문자열에 ApplicationIntent=ReadOnly
가 포함되어 있으면 연결이 실패합니다.
애플리케이션 의도 지정
연결 문자열에 키워드 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초 이상으로 늘려야 합니다.
ODBC 구문
2개의 ODBC 연결 문자열 키워드가 Always On 가용성 그룹을 지원합니다
ApplicationIntent
MultiSubnetFailover
ODBC 연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.
해당하는 연결 특성은 다음과 같습니다.
SQL_COPT_SS_APPLICATION_INTENT
SQL_COPT_SS_MULTISUBNET_FAILOVER
ODBC 연결 속성에 대한 자세한 내용은 SQLSetConnectAttr을 참조하세요.
Always On 가용 그룹을 사용하는 ODBC 애플리케이션은 연결을 만들 때 다음 두 가지 함수 중 하나를 사용할 수 있습니다.
함수 | 설명 |
---|---|
SQLConnect 함수 | SQLConnect 는 DSN(데이터 원본 이름) 또는 연결 특성을 통해 ApplicationIntent 및 MultiSubnetFailover 를 모두 지원합니다. |
SQLDriverConnect 함수 | SQLDriverConnect 는 DSN, 연결 문자열 키워드 또는 연결 특성을 통해 ApplicationIntent 및 MultiSubnetFailover 를 지원합니다. |