

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 의 SQL Server에서 Always On 가용성 그룹에서 읽기 전용 라우팅 구성 AWS
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws"></a>

*Subhani Shaik, Amazon Web Services*

## 요약
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-summary"></a>

이 패턴은 읽기 전용 워크로드를 기본 복제본에서 보조 복제본으로 넘겨서 SQL Server Always On에서 예비 보조 복제본을 사용하는 방법을 다룹니다.

데이터베이스 미러링에는 일대일 매핑이 있습니다. 보조 데이터베이스를 직접 읽을 수 없으므로 스냅샷을 만들어야 합니다. Always On 가용성 그룹 기능은 Microsoft SQL Server 2012에 도입되었습니다. 이후 버전에서는 읽기 전용 라우팅을 비롯한 주요 기능이 도입되었습니다. Always On 가용성 그룹에서는 복제본 모드를 읽기 전용으로 변경하여 보조 복제본에서 직접 데이터를 읽을 수 있습니다.

Always On 가용성 그룹 솔루션은 고가용성(HA), 재해 복구(DR) 및 데이터베이스 미러링의 대안을 지원합니다. Always On 가용성 그룹은 데이터베이스 수준에서 작동하며 사용자 데이터베이스 집합의 가용성을 극대화합니다.

SQL Server는 읽기 전용 라우팅 메커니즘을 사용하여 들어오는 읽기 전용 연결을 보조 읽기 전용 복제본으로 리디렉션합니다. 이렇게 하려면 연결 문자열에 다음 파라미터와 값을 추가해야 합니다.
+ `ApplicationIntent=ReadOnly`
+ `Initial Catalog=<database name>`

## 사전 조건 및 제한 사항
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-prereqs"></a>

**사전 조건 **
+ Virtual Private Cloud(VPC), 가용 영역 2개, 프라이빗 서브넷 및 보안 그룹이 AWS 계정 있는 활성
+ 인스턴스 수준에서 [구성된 Windows](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/ec2-fci.html) [Server 장애 조치 클러스터링(WSFC)과 기본 노드()와 보조 노드() 사이의 SQL Server 수준에서 구성된 Always On 가용성 그룹이 있는 SQL Server 2019 Enterprise Edition Amazon Machine Image](https://aws.amazon.com/marketplace/pp/prodview-btjcozd246p6w)가 있는 Amazon Elastic Compute Cloud(Amazon EC2`WSFCNODE1`) 시스템 2대, `WSFCNODE2`라는 AWS Directory Service for Microsoft Active Directory 디렉터리의 일부 `tagechtalk.com`
+ 보조 복제본에 `read-only`를 허용하도록 구성된 하나 이상의 노드
+ Always On 가용성 그룹에 대하여 이름이 `SQLAG1`인 리스너
+ 두 노드에서 동일한 서비스 계정으로 실행되는 SQL Server 데이터베이스 엔진
+ SQL Server Management Studio(SSMS)
+ 이름이 `test`인 테스트 데이터베이스

**제품 버전**
+ SQL 2014 이상

## 아키텍처
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-architecture"></a>

**대상 기술 스택**
+ Amazon EC2
+ AWS Managed Microsoft AD
+ Amazon FSx

**대상 아키텍처**

다음 다이어그램은 Always On 가용성 그룹(AG) 리스너가 연결에 `ApplicationIntent` 파라미터가 포함된 쿼리를 적절한 보조 노드로 리디렉션하는 방법을 보여줍니다.

![Amazon EFS를 사용하는 노드 1 WSFC 및 노드 2 WSFC에 대한 두 가용 영역 간의 3단계 프로세스.](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/19b5937b-da10-4c74-8619-fdcb758f2211/images/f9ba0f89-7dc2-4f4c-8eee-bef56968ad2d.png)


1. Always On 가용성 그룹 리스너로 요청이 전송됩니다.

1. 연결 문자열에 `ApplicationIntent` 파라미터가 없으면 해당 요청이 기본 인스턴스에 전송됩니다.

1. 연결 문자열에가 포함된 경우 `ApplicationIntent=ReadOnly`요청은 읽기 전용 라우팅 구성이 있는 보조 인스턴스, 즉 Always On 가용성 그룹이 있는 WSFC로 전송됩니다.

## 도구
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-tools"></a>

**AWS 서비스**
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)를 사용하면 디렉터리 인식 워크로드 및 AWS 리소스가에서 Microsoft Active Directory를 사용할 수 있습니다 AWS 클라우드.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon FSx](https://docs.aws.amazon.com/fsx/?id=docs_gateway)는 업계 표준 연결 프로토콜을 지원하고 AWS 리전전반에 걸쳐 고가용성 및 복제를 제공하는 파일 시스템을 제공합니다.

**기타 서비스**
+ SQL Management Studio(SSMS)는 SQL Server 인스턴스를 연결, 관리 및 집행하기 위한 도구입니다.
+ sqlcmd는 명령줄 유틸리티입니다.

## 모범 사례
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-best-practices"></a>

Always On 가용성 그룹에 대한 자세한 내용은 [SQL Server 설명서](https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/always-on-availability-groups-sql-server?view=sql-server-ver16)를 참조하세요.

## 에픽
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-epics"></a>

### 읽기 전용 라우팅 설정
<a name="set-up-read-only-routing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 읽기 전용에 복제본을 업데이트합니다. | 기본 복제본과 보조 복제본을 모두 읽기 전용으로 업데이트하려면 SSMS에서 기본 복제본에 연결하고 [추가 정보](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional) 섹션에서 *1단계* 코드를 실행합니다. | DBA | 
| 라우팅 URL을 생성합니다. | 두 복제본의 라우팅 URL을 생성하려면 [추가 정보](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional) 섹션에서 *2단계* 코드를 실행합니다. 이 코드에서 `tagechtalk.com`는 AWS Managed Microsoft AD 디렉터리의 이름입니다. | DBA | 
| 라우팅 목록을 생성합니다. | 두 복제본 모두에 대한 라우팅 목록을 생성하려면 [추가 정보](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional) 섹션에서 *3단계* 코드를 실행합니다. | DBA | 
| 라우팅 목록 검증합니다. | SQL Server Management Studio에서 기본 인스턴스에 연결하고 [추가 정보](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional) 섹션의 *4단계* 코드를 실행하여 라우팅 목록을 검증합니다. | DBA | 

### 읽기 전용 라우팅 테스트
<a name="test-the-read-only-routing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| `ApplicationIntent` 파라미터를 사용하여 연결합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.html) | DBA | 
| 장애 조치를 수행합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.html) | DBA | 

### sqlcmd 명령줄 유틸리티를 사용하여 연결
<a name="connect-by-using-the-sqlcmd-command-line-utility"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| sqlcmd를 사용하여 연결합니다. | sqlcmd에서 연결하려면 명령 프롬프트의 [추가 정보](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional) 섹션에서 *5단계* 코드를 실행합니다. 연결된 후 다음 명령을 실행하여 연결된 서버 이름을 표시합니다.<pre>SELECT SERVERPROPERTY('ComputernamePhysicalNetBios') .</pre><br />출력에는 현재 보조 복제본 이름(`WSFCNODE1`)이 표시됩니다. | DBA | 

## 문제 해결
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 리스너 생성이 실패하면 'WSFC 클러스터가 네트워크 이름 리소스를 온라인 상태로 가져올 수 없습니다'라는 메시지가 표시됩니다. | 자세한 내용은 Microsoft 블로그 게시물 ['WSFC 클러스터가 네트워크 이름 리소스를 온라인 상태로 가져올 수 없습니다'라는 메시지로 리스너 생성 실패](https://techcommunity.microsoft.com/blog/sqlserversupport/create-listener-fails-with-message-the-wsfc-cluster-could-not-bring-the-network-/318235)를 참조하세요. | 
| 기타 리스너 문제나 네트워크 액세스 문제를 비롯한 잠재적 문제. | Microsoft 설명서의 [Always On 가용성 그룹 구성 문제 해결(SQL Server)](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/troubleshoot-always-on-availability-groups-configuration-sql-server?view=sql-server-ver16)을 참조하세요. | 

## 관련 리소스
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-resources"></a>
+ [Always On 가용성 그룹에 대한 읽기 전용 라우팅 구성](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server?view=sql-server-ver16)
+ [Always On 가용성 그룹 구성 문제 해결(SQL Server)](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/troubleshoot-always-on-availability-groups-configuration-sql-server?view=sql-server-ver16)

## 추가 정보
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional"></a>

*단계 1. 복제본을 읽기 전용으로 업데이트*

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY))
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY))
GO
```

*2단계. 라우팅 URL 생성*

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://WSFCNode1.tagechtalk.com:1433'))
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://WSFCNode2.tagechtalk.com:1433'))
GO
```

*단계 3. 라우팅 목록 생성*

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=('WSFCNODE2','WSFCNODE1')));
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('WSFCNODE1','WSFCNODE2')));
GO
```

*4단계. 라우팅 목록 검증*

```
SELECT AGSrc.replica_server_name AS PrimaryReplica, AGRepl.replica_server_name AS ReadOnlyReplica, AGRepl.read_only_routing_url AS RoutingURL , AGRL.routing_priority AS RoutingPriority FROM sys.availability_read_only_routing_lists AGRL INNER JOIN sys.availability_replicas AGSrc ON AGRL.replica_id = AGSrc.replica_id INNER JOIN sys.availability_replicas AGRepl ON AGRL.read_only_replica_id = AGRepl.replica_id INNER JOIN sys.availability_groups AV ON AV.group_id = AGSrc.group_id ORDER BY PrimaryReplica
```

*5단계. SQL 명령 유틸리티*

```
sqlcmd -S SQLAG1,1433 -E -d test -K ReadOnly
```