다음을 통해 공유


Always On 가용성 그룹에 대한 읽기 전용 라우팅 구성

적용 대상: SQL Server

SQL Server에서 읽기 전용 라우팅을 지원하도록 Always On 가용성 그룹을 구성하려면 Transact-SQL 이나 PowerShell을 사용합니다. 읽기 전용 라우팅은 SQL Server가 한정된 읽기 전용 연결 요청을 사용 가능한 Always On 읽기 가능 보조 복제본(replica)으로 라우팅하는 기능(즉, 보조 역할에서 실행할 때 읽기 전용 워크로드를 허용하도록 구성된 복제본(replica))을 나타냅니다. 읽기 전용 라우팅을 지원하려면 가용성 그룹에 가용성 그룹 수신기가 있어야 합니다. 읽기 전용 클라이언트는 해당 연결 요청을 이 수신기에 전달해야 하며, 클라이언트의 연결 문자열에서는 애플리케이션 의도를 "읽기 전용"으로 지정해야 합니다. 즉, 읽기 의도 연결 요청이어야 합니다.

읽기 전용 라우팅은 SQL Server 2016 (13.x) 이상에서 사용할 수 있습니다.

참고 항목

읽기 가능한 보조 복제본을 구성하는 방법은 가용성 복제본에 대한 읽기 전용 액세스 구성(SQL Server)을 참조하세요.

필수 조건

읽기 전용 라우팅을 지원하도록 구성해야 하는 복제본 속성은 무엇인가요?

  • 읽기 전용 라우팅을 지원하는 읽기 가능한 각 보조 복제본(replica) 대해 읽기 전용 라우팅 URL을 지정해야 합니다. 이 URL은 로컬 복제본(replica) 보조 역할에서 실행되는 경우에만 적용됩니다. 필요에 따라 읽기 전용 라우팅 URL을 복제본(replica) 복제본(replica) 기준으로 지정해야 합니다. 각 읽기 전용 라우팅 URL은 읽기 전용 연결 요청을 읽기 가능한 특정 보조 복제본(replica) 라우팅하는 데 사용됩니다. 일반적으로 읽기 가능한 모든 보조 복제본(replica)에는 읽기 전용 라우팅 URL이 할당됩니다.

    가용성 복제본에 대한 읽기 전용 라우팅 URL을 계산하는 방법에 대한 자세한 내용은 Always On에 대한 read_only_routing_url 계산을 참조해 주세요

  • 주 복제본으로 사용될 때 읽기 전용 라우팅을 지원하도록 할 각 가용성 복제본에 대해 읽기 전용 라우팅 목록을 지정해야 합니다. 지정된 읽기 전용 라우팅 목록은 로컬 복제본(replica)이 주 역할에서 실행 중일 때에만 적용됩니다. 이 목록은 필요에 따라 복제본(replica)의 단위별로 지정해야 합니다. 일반적으로 각 읽기 전용 라우팅 목록에는 목록 끝에 로컬 복제본(replica) URL과 함께 모든 읽기 전용 라우팅 URL이 포함됩니다.

    참고 항목

    읽기 전용 연결 요청은 현재 주 복제본(replica) 읽기 전용 라우팅 목록에서 사용할 수 있는 가능한 첫 번째 항목으로 라우팅 됩니다. 그러나 읽기 전용 복제본(replica)간의 부하 분산이 지원됩니다. 자세한 내용 및 예제는 읽기 전용 복제본에 대한 부하 분산 구성을 참조해 주세요.

참고 항목

가용성 그룹 수신기 및 읽기 전용 라우팅에 대한 자세한 내용은 가용성 그룹 수신기, 클라이언트 연결 및 애플리케이션 장애 조치(failover)(SQL Server)를 참조하세요.

사용 권한

작업 사용 권한
가용성 그룹을 만들 때 복제본을 구성하려면 CREATE AVAILABILITY GROUP 서버 권한, ALTER ANY AVAILABILITY GROUP 권한, CONTROL SERVER 권한 중 하나와 sysadmin 고정 서버 역할의 멤버 자격이 필요합니다.
가용성 복제본을 수정하기 위해서 가용성 그룹에 대한 ALTER AVAILABILITY GROUP 권한, CONTROL AVAILABILITY GROUP 권한, ALTER ANY AVAILABILITY GROUP 권한 또는 CONTROL SERVER 권한이 필요합니다.

Transact-SQL 사용

읽기 전용 라우팅 목록 구성

Transact-SQL을 사용하여 읽기 전용 라우팅을 구성하려면 다음 단계를 따라 해 보세요. 코드 예제를 보려면 이 섹션의 뒷부분에 나오는 예(Transact-SQL)를 참조하세요.

  1. 주 복제본을 호스팅하는 서버 인스턴스에 연결합니다.

  2. 새 가용성 그룹에 대한 복제본을 지정하려는 경우 CREATE AVAILABILITY GROUP Transact-SQL 문을 사용합니다. 기존 가용성 그룹에 대한 복제본을 추가하거나 수정하려는 경우 ALTER AVAILABILITY GROUP Transact-SQL 문을 사용합니다.

    • 보조 역할에 대한 읽기 전용 라우팅을 구성하려면 ADD REPLICA 또는 MODIFY REPLICA WITH 절에서 다음과 같이 SECONDARY_ROLE 옵션을 지정합니다:

      SECONDARY_ROLE ( READ_ONLY_ROUTING_URL ='TCP://system-address:port')

      읽기 전용 라우팅 URL의 매개 변수는 다음과 같습니다:

      system-address
      대상 컴퓨터 시스템을 명확하게 식별하는 시스템 이름, 정규화된 도메인 이름 또는 IP 주소 등의 문자열입니다.

      port
      SQL Server 인스턴스의 데이터베이스 엔진에서 사용되는 포트 번호입니다.

      예: SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')

      복제본이 읽기 전용 연결을 허용하도록 이미 구성되어 있는 경우 MODIFY REPLICA 절에서 ALLOW_CONNECTIONS는 선택 사항입니다.

      자세한 내용은 Always On에 대한 read_only_routing_url 계산을 참조해 주세요.

    • 주 역할에 대한 읽기 전용 라우팅을 구성하려면 ADD REPLICA 또는 MODIFY REPLICA WITH 절에서 다음과 같이 PRIMARY_ROLE 옵션을 지정합니다:

      PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('server' [ ,...n ] ))

      여기서 서버는 가용성 그룹에서 읽기 전용 보조 복제본(replica)을 호스팅하는 서버 인스턴스를 식별합니다.

      예: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))

      참고 항목

      읽기 전용 라우팅 목록을 구성하기 이전에 읽기 전용 라우팅 URL을 설정해야 합니다.

읽기 전용 복제본(replica) 부하 분산 구성

SQL Server 2016(13.x)부터 읽기 전용 복제본(replica) 집합 간에 부하 분산을 구성할 수 있습니다. 이전에는 읽기 전용 라우팅에서 항상 라우팅 목록에서 사용 가능한 첫 번째 복제본으로 트래픽을 전송했습니다. 이 기능을 활용하기 위해서는 CREATE AVAILABILITY GROUP 또는 ALTER AVAILABILITY GROUP 명령에서 READ_ONLY_ROUTING_LIST 서버 인스턴스 주위에 중첩된 하나의 수준에 있는 괄호를 사용합니다.

예를 들어 다음 라우팅 목록은 읽기 전용 복제본(replica)의 두개Server1Server2에 읽기 전용 연결 요청의 부하를 분산합니다. 이 두 서버를 묶는 중첩 괄호는 부하 분산되는 집합을 식별합니다. 해당 집합에서 두 복제본을 모두 사용할 수 없으면 읽기 전용 라우팅 목록의 다른 복제본인 Server3Server4에 순서대로 계속 연결을 시도합니다.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')  

라우팅 목록의 각 항목 자체는 부하 분산된 읽기 전용 복제본(replica)의 집합일 수 있습니다. 다음은 이에 대한 예입니다.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')  

중첩된 괄호는 한 수준만 지원됩니다.

예제 (Transact-SQL)

다음 예제에서는 기존 가용성 그룹의 두 가용성 복제본(replica)AG1을 수정하여 이러한 복제본(replica) 중 하나가 현재 기본 역할을 소유하고 있는 경우 읽기 전용 라우팅을 지원합니다. 가용성 복제본을 호스팅하는 서버 인스턴스를 식별하려면 이 예제에서는COMPUTER01COMPUTER02 인스턴스 이름을 지정합니다.

ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));  
GO  
  

PowerShell 사용

읽기 전용 라우팅 목록 구성

PowerShell을 사용하여 읽기 전용 라우팅을 구성하려면 다음 단계를 따라 해 주세요. 코드 예제는 이 섹션의 뒷부분에 나오는 예제(PowerShell)를 참조해 주세요.

  1. 주 복제본을 호스팅하는 서버 인스턴스를 기본값(cd)으로 설정합니다.

  2. 가용성 그룹에 가용성 복제본을 추가할 때는 New-SqlAvailabilityReplica를 사용합니다. 기존 가용성 복제본을 수정하는 경우 Set-SqlAvailabilityReplica cmdlet을 사용합니다. 관련된 매개 변수는 다음과 같습니다:

    • 보조 역할에 대한 읽기 전용 라우팅을 구성하기 위해서는 ReadonlyRoutingConnectionUrl"url" 매개 변수를 지정합니다.

      여기서 URL은 읽기 전용 연결을 위해 복제본(replica) 라우팅할 때 사용할 연결 FQDN(정규화된 도메인 이름) 및 포트입니다. 예: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"

      자세한 내용은 Always On에 대한 read_only_routing_url 계산을 참조해 주세요.

    • 주 역할에 대한 연결 액세스를 구성하려면 ReadonlyRoutingList"server" [ ,...n ]를 지정합니다. 여기서 server는 가용성 그룹의 읽기 전용 보조 복제본을 호스트하는 서버 인스턴스를 식별합니다. 예: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      참고 항목

      읽기 전용 라우팅 목록을 구성하기 이전에 복제본(replica) 읽기 전용 라우팅 URL을 설정해야 합니다.

    참고 항목

    cmdlet의 구문을 보려면 PowerShell 환경에서 Get-Help SQL Server cmdlet을 사용합니다. 자세한 내용은 Get Help SQL Server PowerShell을 참조해 주세요.

SQL Server PowerShell 공급자 설정 및 사용

예제(PowerShell)

다음 예제에서는 읽기 전용 라우팅을 위해 가용성 그룹에 주 복제본(replica)과 하나의 보조 복제본(replica)을 구성합니다. 먼저, 이 예에서는 각 복제본에 읽기 전용 라우팅 URL을 할당합니다. 그런 다음 주 복제본에 읽기 전용 라우팅 목록을 설정합니다. 연결 문자열 "ReadOnly" 속성이 설정된 연결은 보조 복제본(replica)으로 리디렉션됩니다. 이 보조 복제본을 읽을 수 없는 경우(ConnectionModeInSecondaryRole 설정에 따라 결정됨) 다시 주 복제본으로 연결됩니다.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg  
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"  
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"  
  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica  

후속 작업: 읽기 전용 라우팅을 만들고 난 후

현재 주 복제본과 읽기 가능한 보조 복제본 두 역할 모두가 읽기 전용 라우팅을 지원하도록 구성되고 나면 읽기 가능한 보조 복제본은 가용성 그룹 수신기를 통해 연결한 클라이언트로부터 읽기 전용 연결 요청을 받을 수 있습니다.

bcp 유틸리티 또는 sqlcmd 유틸리티를 사용하는 경우 -K ReadOnly 스위치를 지정하여 읽기 전용 액세스를 사용하도록 설정된 보조 복제본에 대한 읽기 전용 액세스를 지정할 수 있습니다.

클라이언트 연결 문자열에 대한 요구 사항 및 권장 사항

클라이언트 애플리케이션이 읽기 전용 라우팅을 사용하려면 해당 연결 문자열 다음 요구 사항을 충족해야 합니다:

  • TCP 프로로토콜을 사용합니다.

  • 애플리케이션 의도 특성/속성을 읽기 전용으로 설정합니다.

  • 읽기 전용 라우팅을 지원하도록 만들어진 가용성 그룹의 수신기를 참조해 주세요.

  • 해당 가용성 그룹의 데이터베이스를 참조해 주세요.

또한 연결 문자열 사용해서 각 서브넷의 각 복제본(replica) 대해 병렬 클라이언트 스레드를 지원하는 다중 서브넷 장애 조치(failover)를 활성화하는 것을 권장해 드립니다. 이렇게 하면 장애 조치(failover)를 취한 후 클라이언트 재연결 시간은 최소화됩니다.

연결 문자열의 구문은 애플리케이션에서 사용하는 SQL Server 공급자에 따라 다릅니다. SQL Server용 .NET Framework Data Provider 4.0.2의 다음 예제 안의 연결 문자열에서는 읽기 전용 라우팅에 필요하며 권장되고 있는 연결 문자열 부분을 보여 줍니다.

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True  

읽기 전용 애플리케이션 의도 및 읽기 전용 라우팅에 대한 자세한 내용은 가용성 그룹 수신기, 클라이언트 연결 및 애플리케이션 장애 조치(failover)(SQL Server)를 참조하세요.

읽기 전용 라우팅이 올바르게 작동하지 않는 경우

읽기 전용 라우팅 구성 문제 해결에 대한 자세한 내용은 읽기 전용 라우팅이 제대로 작동하지 않음을 참조해 주세요.

다음 단계

읽기 전용 라우팅 구성을 보기 위해서

클라이언트 연결 액세스를 구성하기 위해서

애플리케이션에서 연결 문자열을 사용하기 위해서

블로그:

백서:

추가 콘텐츠