보조-기본 복제본 읽기/쓰기 연결 리디렉션(Always On 가용성 그룹)
적용 대상: SQL Server 2019(15.x)
SQL Server 2019(15.x) CTP 2.0에는 Always On 가용성 그룹의 보조-기본 복제본 읽기/쓰기 연결 리디렉션이 도입되었습니다. 읽기/쓰기 연결 리디렉션은 모든 운영 체제 플랫폼에서 사용할 수 있습니다. 연결 문자열에 지정된 대상 서버에 관계없이 클라이언트 애플리케이션 연결을 기본 복제본에 연결할 수 있습니다.
예를 들어, 연결 문자열은 보조 복제본을 대상으로 지정할 수 있습니다. AG(가용성 그룹) 복제본(replica) 구성 및 연결 문자열 설정에 따라 연결이 자동으로 기본 복제본에 리디렉션될 수 있습니다.
사용 사례
SQL Server 2019(15.x) 이전에는 장애 조치(Failover) 후에 다시 연결되도록 하기 위해 AG 수신기 및 해당 클러스터 리소스가 사용자 트래픽을 기본 복제본으로 리디렉션합니다. SQL Server 2019(15.x)에서는 AG 수신기 기능을 계속 지원하고 수신기를 포함할 수 없는 시나리오를 위해 복제본 연결 리디렉션을 추가합니다. 예시:
- SQL Server 가용성 그룹과 통합되는 클러스터 기술은 기능과 같은 수신기를 제공하지 않음
- 구성이 복잡하고 오류가 발생하기 쉬우며 여러 구성 요소가 연관되어 문제를 해결하기 어려운 Pacemaker를 사용하는 클라우드 또는 다중 서브넷 부동 IP와 같은 다중 서브넷 구성
- 수동 장애 조치(failover) 시 투명한 재연결을 보장하는 간단한 메커니즘이 없기 때문에 읽기 확장 또는 재해 복구 및 클러스터 유형이
NONE
임
요구 사항
보조 복제본이 읽기/쓰기 연결 요청을 리디렉션하려면 다음이 충족되어야 합니다.
- 보조 복제본이 온라인 상태여야 합니다.
- 복제본 사양
PRIMARY_ROLE
에는READ_WRITE_ROUTING_URL
이 포함되어야 합니다. ApplicationIntent
를ReadWrite
로 정의하거나ApplicationIntent
를 설정하지 않고 기본값(ReadWrite
)이 적용되도록 하여 연결 문자열이ReadWrite
가 되도록 해야 합니다.
READ_WRITE_ROUTING_URL 옵션 설정
읽기/쓰기 연결 리디렉션을 구성하려면 AG를 만들 때 기본 복제본에 대해 READ_WRITE_ROUTING_URL
을 설정합니다.
SQL Server 2019(15.x)에서는 READ_WRITE_ROUTING_URL
이 <add_replica_option>
사양에 추가되었습니다. 다음 항목을 참조하십시오.
PRIMARY_ROLE(READ_WRITE_ROUTING_URL)가 설정되지 않음(기본값)
기본적으로 읽기/쓰기 복제본(replica) 연결 리디렉션은 복제본(replica)에 대해 설정되지 않습니다. 보조 복제본이 연결 요청을 처리하는 방법은 보조 복제본이 연결을 허용하도록 설정되었는지 여부와 연결 문자열의 ApplicationIntent
설정에 따라 달라집니다. 다음 표에서는 보조 복제본이 SECONDARY_ROLE (ALLOW CONNECTIONS = )
및 ApplicationIntent
에 따라 연결을 처리하는 방법을 보여 줍니다.
ApplicationIntent 값 |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
---|---|---|---|
ApplicationIntent=ReadWrite 기본값 |
연결 실패 | 연결 실패 | 연결 성공 읽기 성공 쓰기 실패 |
ApplicationIntent=ReadOnly |
연결 실패 | 연결 성공 | 연결 성공 |
위의 표에서는 SQL Server 2019(15.x) 이전 버전의 SQL Server와 동일한 기본 동작을 보여 줍니다.
PRIMARY_ROLE(READ_WRITE_ROUTING_URL)이 설정됨
읽기/쓰기 연결 리디렉션을 설정하면 복제본(replica)이 연결 요청을 처리하는 방식이 다르게 동작합니다. 연결 동작은 여전히 SECONDARY_ROLE (ALLOW CONNECTIONS = )
및 ApplicationIntent
설정에 따라 달라집니다. 다음 표에서는 READ_WRITE_ROUTING
이 설정되어 있는 보조 복제본이 SECONDARY_ROLE (ALLOW CONNECTIONS = )
및 ApplicationIntent
에 따라 연결을 처리하는 방법을 보여 줍니다.
ApplicationIntent 값 |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
---|---|---|---|
ApplicationIntent=ReadWrite 기본값 |
연결 실패 | 연결 실패 | 연결이 주 복제본으로 라우팅됨 |
ApplicationIntent=ReadOnly |
연결 실패 | 연결 성공 | 연결 성공 |
앞의 표에서는 기본 복제본에 READ_WRITE_ROUTING_URL
이 설정된 경우 SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
이면 보조 복제본이 연결을 기본 복제본으로 리디렉션하고 연결이 ReadWrite
를 지정한다는 것을 보여 줍니다.
예시
이 예시에서 가용성 그룹에는 다음 3개의 복제본이 있습니다.
- COMPUTER01의 기본 복제본
- COMPUTER02의 동기 보조 복제본
- COMPUTER03의 동기 보조 복제본
다음 그림은 가용성 그룹을 나타냅니다.
다음 Transact-SQL 스크립트는 이 AG를 만듭니다. 이 예에서 각 복제본(replica)은 READ_WRITE_ROUTING_URL
을 지정합니다.
CREATE AVAILABILITY GROUP MyAg
WITH ( CLUSTER_TYPE = NONE )
FOR
DATABASE [<Database1>]
REPLICA ON
'COMPUTER01' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER01.<domain>.<tld>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER02', 'COMPUTER03'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
),
'COMPUTER02' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER02.<domain>.<tld>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER03'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
),
'COMPUTER03' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER03.<domain>.<tld>:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER02'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
);
GO
<domain>.<tld>
- 정규화된 도메인 이름의 도메인 및 최상위 도메인. 예들 들어
corporation.com
입니다.
- 정규화된 도메인 이름의 도메인 및 최상위 도메인. 예들 들어
연결 동작
다음 다이어그램에서 클라이언트 응용 프로그램은 ApplicationIntent=ReadWrite
를 사용하여 COMPUTER02에 연결합니다. 기본 복제본으로 연결이 리디렉션됩니다.
보조 복제본이 읽기/쓰기 호출을 기본 복제본으로 리디렉션합니다. 두 복제본(replica)에 대한 읽기 쓰기 연결은 기본 복제본으로 리디렉션됩니다.
다음 다이어그램에서 기본 복제본은 COMPUTER02로 수동으로 장애 조치(failover)되었습니다. 클라이언트 응용 프로그램은 ApplicationIntent=ReadWrite
를 사용하여 COMPUTER01에 연결합니다. 기본 복제본으로 연결이 리디렉션됩니다.
참고 항목
Always On 가용성 그룹 개요(SQL Server)