

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

# 분산된 가용성 그룹을 사용하여 SQL Server를 AWS로 마이그레이션
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups"></a>

*Praveen Marthala, Amazon Web Services*

## 요약
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-summary"></a>

Microsoft SQL Server 올웨이즈 온 가용성 그룹은 SQL Server를 위한 고가용성(HA) 및 재해 복구(DR) 솔루션을 제공합니다. 가용성 그룹은 읽기/쓰기 트래픽을 허용하는 기본 복제본과 읽기 트래픽을 허용하는 최대 8개의 보조 복제본으로 구성됩니다. 가용성 그룹은 두 개 이상의 노드가 있는 Windows Server 장애 조치 클러스터(WSFC)에 구성됩니다.

Microsoft SQL Server 올웨이즈 온 분산 가용성 그룹은 두 개의 독립적인 WFSC 간에 두 개의 개별 가용성 그룹을 구성하는 솔루션을 제공합니다. 분산 가용성 그룹에 속하는 가용성 그룹은 같은 데이터 센터에 있지 않아도 됩니다. 가용성 그룹 하나는 온프레미스에 있을 수 있고, 다른 가용성 그룹은 다른 도메인의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 있는 Amazon Web Services(AWS) 클라우드에 있을 수 있습니다. 

이 패턴은 분산 가용성 그룹을 사용하여 Amazon EC2에 가용성 그룹을 설정한 상태에서 기존 가용성 그룹에 속하는 온프레미스 SQL Server 데이터베이스를 SQL Server로 마이그레이션하는 단계를 설명합니다. 이 패턴을 따르면 전환 중에 가동 중지 시간을 최소화하면서 데이터베이스를 AWS 클라우드로 마이그레이션할 수 있습니다. 데이터베이스는 전환 후 즉시 AWS에서 고가용성을 제공합니다. 또한 이 패턴을 사용하여 SQL 서버의 동일한 버전을 유지하면서 기본 운영 체제를 온프레미스에서 AWS로 변경할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ AWS Direct Connect 또는 AWS Site-to-Site VPN
+ 온프레미스와 AWS의 두 노드에 설치된 동일한 버전의 SQL 서버

**제품 버전**
+ SQL Server 버전 2016 이상
+ SQL Server Enterprise Edition

## 아키텍처
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-architecture"></a>

**소스 기술 스택**
+ 온프레미스 상시 가동 가용성 그룹을 지원하는 Microsoft SQL Server 데이터베이스

**대상 기술 스택**
+ AWS 클라우드의 Amazon EC2에 올웨이즈 온 가용성 그룹이 있는 Microsoft SQL Server 데이터베이스

**마이그레이션 아키텍처**

![온프레미스 및 AWS의 가용성 그룹에서 동기식 복제를 사용하는 SQL Server.](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6e229e30-9b11-4ccb-bccd-cbe6601139c0/images/79ee7911-d68f-4db7-9b94-113dcf09c28b.png)


*용어*
+ WSFC 1 - WSFC 온프레미스
+ WSFC 2 - AWS 클라우드의 WSFC
+ AG 1 - WSFC 1에 속하는 첫 번째 가용성 그룹
+ AG 2 - WSFC 2에 속하는 두 번째 가용성 그룹
+ SQL Server 기본 복제본 - 모든 쓰기의 글로벌 기본 복제본으로 간주되는 AG 1의 노드
+ SQL Server 전달자 - SQL Server 기본 복제본에서 비동기적으로 데이터를 수신하는 AG 2의 노드
+ SQL Server 보조 복제본 - 기본 복제본 또는 전달자로부터 데이터를 동기적으로 수신하는 AG 1 또는 AG 2의 노드

## 도구
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-tools"></a>
+ [AWS Direct Connect는](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 AWS Direct Connect에 연결합니다. 이 연결을 통해 네트워크 경로의 인터넷 서비스 공급자를 우회하여 퍼블릭 AWS 서비스에 직접 *가상 인터페이스*를 생성할 수 있습니다.
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/concepts.html) – Amazon Elastic Compute Cloud(Amazon EC2)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하여 필요에 따라 많거나 적은 수의 가상 서버를 시작하고 스케일 아웃 또는 스케일 인할 수 있습니다.
+ [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) - AWS Site-to-Site VPN은 Site-to-Site 가상 프라이빗 네트워크(VPN) 생성을 지원합니다. AWS에서 시작하는 인스턴스와 자체 원격 네트워크 간에 트래픽을 전달하도록 VPN을 구성할 수 있습니다.
+ [마이크로소프트 SQL 서버 관리 스튜디오](https://docs.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms?view=sql-server-ver15) - 마이크로소프트 SQL 서버 관리 스튜디오(SSMS)는 SQL 서버 인프라를 관리하기 위한 통합 환경입니다. SQL Server와 상호 작용하는 다양한 스크립트 편집기와 함께 사용자 인터페이스와 도구 그룹을 제공합니다.

## 에픽
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-epics"></a>

### AWS에 두 번째 가용성 그룹 설정
<a name="set-up-a-second-availability-group-on-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS에서 WSFC를 생성합니다. | HA용 노드 2개가 있는 Amazon EC2 인스턴스에서 WSFC 2를 생성합니다. 이 장애 조치 클러스터를 사용하여 AWS에 두 번째 가용성 그룹(AG 2)을 생성합니다. | 시스템 관리자, SysOps 관리자 | 
| WSFC 2에 두 번째 가용성 그룹을 생성합니다. | SSMS를 사용하여 WSFC 2의 두 노드에 AG 2를 생성합니다. WSFC 2의 첫 번째 노드가 전달자 역할을 합니다. WSFC 2의 두 번째 노드는 AG 2의 보조 복제본 역할을 합니다.<br />이 단계에서는 AG 2에서 사용할 수 있는 데이터베이스가 없습니다. 분산 가용성 그룹을 설정하기 위한 출발점입니다. | DBA, 개발자 | 
| AG 2에서 복구 옵션 없이 데이터베이스를 생성합니다. | 온프레미스 가용성 그룹(AG 1)에 데이터베이스를 백업합니다. <br />복구 옵션 없이 데이터베이스를 전달자와 AG 2의 보조 복제본 모두에 복원합니다. 데이터베이스를 복원하는 동안 데이터베이스 데이터 파일과 로그 파일을 위한 충분한 디스크 공간이 있는 위치를 지정하세요.<br />이 단계에서는 데이터베이스가 복원 상태에 있습니다. AG 2 또는 분산 가용성 그룹에 속하지 않으며 동기화되지도 않습니다. | DBA, 개발자 | 

### 분산 가용성 그룹 구성
<a name="configure-the-distributed-availability-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AG 1에 분산 가용성 그룹을 생성합니다. | AG 1에 분산 가용성 그룹을 생성하려면 `DISTRIBUTED` 옵션이 있는 `CREATE AVAILABILITY GROUP`을 사용하세요.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html) | DBA, 개발자 | 
| AG 2에 분산 가용성 그룹을 생성합니다. | AG 2에 분산 가용성 그룹을 생성하려면 `DISTRIBUTED` 옵션이 있는 `ALTER AVAILABILITY GROUP`을 사용하세요.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html)<br />분산 가용성 그룹은 AG 1과 AG 2 사이에 생성됩니다.<br />AG 2의 데이터베이스는 아직 AG 1에서 AG 2로의 데이터 흐름에 참여하도록 구성되지 않았습니다. | DBA, 개발자 | 
| AG 2의 전달자 및 보조 복제본에 데이터베이스를 추가합니다. | AG 2의 `ALTER DATABASE` 전달자와 보조 복제본 모두에서 `SET HADR` `AVAILABILITY GROUP` 옵션을 사용하여 데이터베이스를 분산 가용성 그룹에 추가합니다. <br />그러면 AG 1과 AG 2의 데이터베이스 간에 비동기 데이터 흐름이 시작됩니다. <br />글로벌 기본 복제본은 쓰기 작업을 수행하고 AG 1의 보조 복제본에 동기적으로 데이터를 전송하고 AG 2의 전달자에 비동기적으로 데이터를 전송합니다. AG 2의 전달자는 AG 2의 보조 복제본에 동기적으로 데이터를 전송합니다. | DBA, 개발자 | 

### AG 1과 AG 2 간의 비동기 데이터 흐름을 모니터링합니다.
<a name="monitor-asynchronous-data-flow-between-ag-1-and-ag-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DMV 및 SQL 서버 로그를 사용합니다. | 동적 관리 보기(DMV)와 SQL Server 로그를 사용하여 두 가용성 그룹 간의 데이터 흐름 상태를 모니터링합니다. <br />모니터링 대상 DMV에는 `sys.dm_hadr_availability_replica_states` 및 `sys.dm_hadr_automatic_seeding`이 포함됩니다.<br />전달자 동기화 상태를 확인하려면 전달자의 SQL Server 로그에서 *동기화 상태*를 모니터링하세요. | DBA, 개발자 | 

### 최종 마이그레이션을 위한 전환 활동 수행
<a name="perform-cutover-activities-for-final-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 복제본에 대한 모든 트래픽을 중지합니다. | AG 1의 기본 복제본으로 들어오는 트래픽을 중지하여 데이터베이스에서 쓰기 작업이 발생하지 않고 데이터베이스를 마이그레이션할 준비가 되도록 하세요. | 앱 소유자, 개발자 | 
| AG 1의 분산 가용성 그룹의 가용성 모드를 변경합니다. | 기본 복제본에서 분산 가용성 그룹의 가용성 모드를 동기로 설정합니다. <br />가용성 모드를 동기로 변경하면 데이터가 AG 1의 기본 복제본에서 AG 2의 전달자로 동기적으로 전송됩니다. | DBA, 개발자 | 
| 두 가용성 그룹의 LSN을 확인하세요. | AG 1과 AG 2 모두에서 마지막 로그 시퀀스 번호(LSN)를 확인합니다. AG 1의 기본 복제본에서는 쓰기가 수행되지 않으므로 데이터가 동기화되고 두 가용성 그룹의 마지막 LSN이 일치해야 합니다. | DBA, 개발자 | 
| AG 1을 보조 역할로 업데이트합니다. | AG 1을 보조 역할로 업데이트하면 AG 1은 기본 복제 역할을 잃고 쓰기를 허용하지 않으며 두 가용성 그룹 간의 데이터 흐름이 중지됩니다. | DBA, 개발자 | 

### 두 번째 가용성 그룹으로 페일오버
<a name="fail-over-to-the-second-availability-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AG 2로 수동 페일오버합니다. | AG 2의 전달자에서 데이터 손실을 허용하도록 분산 가용성 그룹을 변경하세요. AG 1과 AG 2의 마지막 LSN이 일치하는지 이미 확인하고 확인했으므로 데이터 손실은 걱정할 필요가 없습니다.<br />AG 2에서 전달자의 데이터 손실을 허용하면 AG 1과 AG 2의 역할이 변경됩니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html) | DBA, 개발자 | 
| AG 2의 분산 가용성 그룹의 가용성 모드를 변경합니다. | AG 2의 기본 복제본에서 가용성 모드를 비동기로 변경합니다.<br />이렇게 하면 데이터 이동이 AG 2에서 AG 1로, 즉 동기식에서 비동기식으로 변경됩니다. 이 단계는 AG 2와 AG 1 사이의 네트워크 지연 시간(있는 경우)을 방지하기 위해 필요하며 데이터베이스 성능에는 영향을 미치지 않습니다. | DBA, 개발자 | 
| 새 기본 복제본으로 트래픽 전송을 시작합니다. | AG 2의 리스너 URL 엔드포인트를 사용하여 데이터베이스로 트래픽을 전송하도록 연결 문자열을 업데이트합니다.<br />이제 AG 2는 쓰기를 수락하고 AG 1의 전달자에게 데이터를 전송하며, AG 2의 자체 보조 복제본에도 데이터를 전송합니다. 데이터는 AG 2에서 AG 1로 비동기적으로 이동합니다. | 앱 소유자, 개발자 | 

### 전환 이후 활동 수행
<a name="perform-post-cutover-activities"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 분산 가용성 그룹을 AG 2에 삭제합니다. | 계획된 시간에 마이그레이션을 모니터링합니다. 그런 다음 AG 2에 분산 가용성 그룹을 삭제하여 AG 2와 AG 1 사이의 분산 가용성 그룹 설정을 제거합니다. 이렇게 하면 분산 가용성 그룹 구성이 제거되고 AG 2에서 AG 1로 이동하는 데이터 흐름이 중지됩니다. <br />현재 AG 2는 쓰기 작업을 수행하는 기본 복제본과 동일한 가용성 그룹 내에 보조 복제본이 있어 AWS에서 가용성이 높습니다. | DBA, 개발자 | 
| 온프레미스 서버를 서비스 해제합니다. | AG 1에 속하는 WSFC 1의 온프레미스 서버를 서비스 해제합니다. | 시스템 관리자, SysOps 관리자 | 

## 관련 리소스
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-resources"></a>
+ [분산 가용성 그룹](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/distributed-groups.html)
+ [SQL 문서: 분산 가용성 그룹](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/distributed-availability-groups?view=sql-server-ver15)
+ [SQL Docs: Always On 가용성 그룹: 고가용성 및 재해 복구 솔루션](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/always-on-availability-groups-sql-server?view=sql-server-ver15)