Amazon RDS for Microsoft SQL Server의 다중 AZ 배포 - Amazon Relational Database Service

Amazon RDS for Microsoft SQL Server의 다중 AZ 배포

다중 AZ 배포는 DB 인스턴스를 위해 향상된 가용성, 데이터 내구성 및 내결함성을 제공합니다. 계획된 데이터베이스 유지 관리 또는 예기치 않은 서비스 중단이 발생할 경우, Amazon RDS가 최신 보조 DB 인스턴스로 자동으로 장애 조치를 수행합니다. 이 기능을 통해 수동 개입 없이 데이터베이스 작업을 빠르게 재개할 수 있습니다. 기본 인스턴스 및 예비 인스턴스는 동일한 엔드포인트를 사용합니다. 이 엔드포인트의 물리적 네트워크 주소는 장애 조치 프로세스의 일환으로 보조 복제본으로 전환됩니다. 장애 조치가 발생하는 경우 애플리케이션을 다시 구성할 필요가 없습니다.

Amazon RDS는 SQL Server 데이터베이스 미러링(DBM) 또는 상시 가동 가용성 그룹(AG)을 사용하여 Microsoft SQL Server에 대한 다중 AZ 배포를 지원합니다. Amazon RDS는 다중 AZ 배포의 상태를 모니터링하고 유지합니다. 문제가 발생하면 RDS는 이상 있는 DB 인스턴스를 복구하고, 동기화를 재설정하며, 장애 조치를 시작합니다. 대기 및 기본 인스턴스가 완벽히 동기화되어 있는 경우에만 장애 조치가 이루어집니다. 사용자가 따로 관리할 것이 없습니다.

SQL Server 다중 AZ를 설정하면 RDS가 DBM 또는 AG를 사용하도록 인스턴스의 모든 데이터베이스를 자동으로 구성합니다. Amazon RDS에서 프라이머리 DB 인스턴스, 감시 인스턴스, 세컨더리 DB 인스턴스를 자동으로 처리합니다. 구성이 자동화되어 있으므로 RDS에서는 사용자가 배포하는 SQL Server의 버전에 따라 DBM 또는 상시 가동 AG를 선택합니다.

Amazon RDS는 다음 SQL Server 버전에 상시 가동 AG를 통한 다중 AZ를 지원합니다.

  • SQL Server 2019: Standard 및 Enterprise Edition

  • SQL Server 2017: Enterprise Edition 14.00.3049.1 이상

  • SQL Server 2016: Enterprise Edition 13.00.5216.0 또는 이후 버전

Amazon RDS는 앞서 언급한 버전을 제외한 다음 SQL Server 버전에 대해 DBM를 통한 다중 AZ를 지원합니다.

  • SQL Server 2017: Standard 및 Enterprise Edition

  • SQL Server 2016: Standard 및 Enterprise Edition

  • SQL Server 2014: Standard 및 Enterprise Edition

  • SQL Server 2012: Standard 및 Enterprise Edition

Amazon RDS는 모든 AWS 리전에서 SQL Server에 다중 AZ를 지원하지만 다음은 예외입니다.

  • 아시아 태평양(오사카): 여기에서는 DBM과 상시 작동 AG가 모두 지원되지 않음

  • 아시아 태평양(시드니): Virtual Private Cloud(VPC)에서 DB 인스턴스 지원됨

  • 아시아 태평양(도쿄): VPC의 DB 인스턴스가 지원됨

    자세한 내용은 VPC에서 DB 인스턴스를 사용한 작업 섹션을 참조하세요.

  • 남아메리카(상파울루): m1 또는 m2를 제외한 모든 DB 인스턴스 클래스 유형에서 지원됨

다음 SQL 쿼리를 사용하여 SQL Server DB 인스턴스가 단일 AZ, DBM 기능이 있는 다중 AZ 또는 상시 가동 AG 기능이 있는 다중 AZ인지 확인할 수 있습니다.

SELECT CASE WHEN dm.mirroring_state_desc IS NOT NULL THEN 'Multi-AZ (Mirroring)' WHEN dhdrs.group_database_id IS NOT NULL THEN 'Multi-AZ (AlwaysOn)' ELSE 'Single-AZ' END 'high_availability' FROM sys.databases sd LEFT JOIN sys.database_mirroring dm ON sd.database_id = dm.database_id LEFT JOIN sys.dm_hadr_database_replica_states dhdrs ON sd.database_id = dhdrs.database_id AND dhdrs.is_local = 1 WHERE DB_NAME(sd.database_id) = 'rdsadmin';

출력은 다음과 유사합니다.

high_availability Multi-AZ (Mirroring)

다중 AZ를 Microsoft SQL Server DB 인스턴스에 추가

AWS Management Console을 사용하여 새로운 SQL Server DB 인스턴스를 만들 때, 데이터베이스 미러링(DBM) 또는 상시 작동 AG를 사용하는 다중 AZ를 추가할 수 있습니다. 이렇게 하려면 다중 AZ 배포에서 Yes (Mirroring / Always On)(예(미러링/상시 작동)를 선택합니다. 자세한 내용은 Amazon RDS DB 인스턴스 생성 섹션을 참조하세요.

AWS Management Console을 사용하여 기존 SQL Server DB 인스턴스를 수정할 때 [DB 인스턴스 수정(Modify DB instance)] 페이지의 [다중 AZ 배포(Multi-AZ deployment)]에서 [예(미러링/상시 작동)(Yes (Mirroring / Always On))]를 선택하여 DBM 또는 AG를 사용하는 다중 AZ를 추가할 수 있습니다. 자세한 내용은 Amazon RDS DB 인스턴스 수정 섹션을 참조하세요.

참고

DB 인스턴스가 상시 작동 가용성 그룹(AG)이 아닌 데이터베이스 미러링(DBM)을 실행 중인 경우 다중 AZ를 추가하기 전에 인 메모리 최적화를 비활성화해야 할 수도 있습니다. DB 인스턴스에서 SQL Server 2014, 2016 또는 2017 Enterprise Edition을 실행하고 있으며 인 메모리 최적화가 활성화된 경우 다중 AZ를 추가하기 전에 DBM으로 인 메모리 최적화를 비활성화합니다.

DB 인스턴스에서 AG를 실행 중인 경우에는 이 단계가 필요하지 않습니다.

Microsoft SQL Server 다중 AZ 배포의 제한, 참고 및 권장 사항

다음은 RDS for Microsoft SQL Server DB 인스턴스에서 다중 AZ 배포 작업 시 알아두어야 할 몇 가지 제한 사항입니다.

  • 교차 리전 다중 AZ는 지원되지 않습니다.

  • 보조 DB 인스턴스가 데이터베이스 읽기 작업을 허용하도록 구성할 수 없습니다.

  • 상시 작동 가용성 그룹(AG)을 사용하는 다중 AZ는 인 메모리 최적화를 지원합니다.

  • 상시 작동 가용성 그룹(AG)이 있는 다중 AZ는 가용성 그룹 리스너에 대한 Kerberos 인증을 지원하지 않습니다. 이는 리스너에 SPN(서비스 보안 주체 이름)이 없기 때문입니다.

  • SQL Server 다중 AZ 배포에 있는 SQL Server DB 인스턴스의 데이터베이스는 이름을 변경할 수 없습니다. 그러한 인스턴스의 데이터베이스 이름을 바꿔야 하는 경우, 먼저 DB 인스턴스의 다중 AZ를 끈 후 데이터베이스 이름을 바꿉니다. 마지막으로 DB 인스턴스의 다중 AZ를 다시 켭니다.

  • 전체 복구 모델을 사용하여 백업한 다중 AZ DB 인스턴스만 복원할 수 있습니다.

  • 다중 AZ 배포에서는 SQL Server 에이전트 작업이 100개로 제한됩니다.

    한도를 늘려야 할 경우 AWS Support에 문의하여 할당량 증대를 요청하세요. [지원 센터(AWS Support Center)] 페이지를 열고 필요한 경우, 로그인한 다음 [사례 생성(Create Case)]을 선택합니다. Service Limit increase(서비스 한도 증가)를 선택합니다. 양식을 작성하고 제출합니다.

다음은 RDS for Microsoft SQL Server DB 인스턴스에서 다중 AZ 배포 작업 시 알아두어야 할 몇 가지 참고 사항입니다.

  • Amazon RDS는 상시 가동 AG 가용성 그룹 리스너 엔드포인트를 표시합니다. 이 엔드포인트는 콘솔에 표시되며, DescribeDBInstances API에 의해 엔드포인트 필드의 항목으로 반환됩니다.

  • Amazon RDS는 가용성 그룹 다중 서브넷 장애 조치를 지원합니다.

  • VPC에서 SQL Server DB 인스턴스와 함께 SQL Server 다중 AZ를 사용하려면 먼저 별개의 가용 영역 2개 이상에 서브넷이 있는 DB 서브넷 그룹을 만들어야 합니다. 그런 다음 SQL Server DB 인스턴스의 기본 복제본에 DB 서브넷 그룹을 할당합니다.

  • DB 인스턴스를 다중 AZ 배포로 수정할 때 수정하는 동안 인스턴스의 상태는 [수정 중(modifying)]입니다. Amazon RDS는 대기 인스턴스를 생성하고 프라이머리 DB 인스턴스를 백업합니다. 프로세스가 완료되면 기본 DB 인스턴스의 상태가 사용 가능이 됩니다.

  • 다중 AZ 배포가 같은 노드 상의 모든 데이터베이스를 유지 관리합니다. 기본 호스트의 데이터베이스가 장애 조치하는 경우, 모든 SQL Server 데이터베이스가 하나의 원자 단위로 대기 호스트로 장애 조치합니다. Amazon RDS는 새로운 정상 호스트를 프로비저닝하고 비정상 호스트를 대체합니다.

  • DBM 또는 AG를 사용하는 다중 AZ는 예비 복제본 하나를 지원합니다.

  • 사용자, 로그인 및 권한은 보조에 자동으로 복제됩니다. 이를 다시 생성할 필요가 없습니다. 사용자 정의 서버 역할(SQL Server 2012 기능)은 AG 인스턴스의 다중 AZ 인스턴스에서만 복제됩니다.

  • SQL Server 에이전트 작업이 있는 경우, 보조에서 다시 생성합니다. 이러한 작업은 msdb 데이터베이스에 저장되므로 데이터베이스 미러링(DBM) 또는 상시 작동 가용성 그룹(AG)을 사용하여 이 데이터베이스를 복제할 수 없기 때문입니다. 원래의 기본 인스턴스에서 작업을 먼저 만든 다음, 장애 조치하고 새 기본 인스턴스에서 같은 작업을 만들어야 합니다.

  • 동기식 데이터 복제로 인해 단일 가용 영역에서 표준 DB 인스턴스 배포와 비교했을 때 지연 시간이 증가할 수 있습니다.

  • 장애 조치 시간은 복구 프로세스 완료에 걸리는 시간의 영향을 받습니다. 트랜잭션이 크면 장애 조치 시간이 늘어납니다.

  • SQL Server 다중 AZ 배포에서 장애 조치를 사용하여 재부팅하면 기본 DB 인스턴스만 재부팅됩니다. 장애 조치 후에는 기본 DB 인스턴스가 새 보조 DB 인스턴스가 됩니다. 다중 AZ 인스턴스의 경우 파라미터가 업데이트되지 않을 수 있습니다. 장애 조치 없이 재부팅하는 경우 기본 DB 인스턴스와 보조 DB 인스턴스가 모두 재부팅되고 재부팅된 후 파라미터가 업데이트됩니다. DB 인스턴스가 응답하지 않는 경우 장애 조치 없이 재부팅하는 것이 좋습니다.

다음은 RDS for Microsoft SQL Server DB 인스턴스에서 다중 AZ 배포 작업 시 알아두어야 할 몇 가지 권장 사항입니다.

  • 프로덕션 또는 프로덕션 이전 환경에서 사용되는 데이터베이스의 경우 다음 옵션을 권장합니다.

    • 고가용성을 위한 다중 AZ 배포

    • 빠르고 일관적인 성능을 위한 “프로비저닝된 IOPS”

    • “범용”이 아닌 “메모리 최적화”

  • 보조 인스턴스에 대해 가용 영역(AZ)을 선택할 수 없으므로 애플리케이션 호스트를 배포할 경우 이 점을 고려하십시오. 데이터베이스를 다른 AZ로 장애 조치할 수 있으며, 애플리케이션 호스트가 데이터베이스와 다른 AZ에 있을 수도 있습니다. 이러한 이유로 지정된 AWS 리전의 모든 AZ에서 애플리케이션 호스트의 균형을 조정하는 것이 좋습니다.

  • 최상의 성능을 위해, 큰 데이터 로드 작업 중에는 데이터베이스 미러링 또는 상시 작동 AG를 활성화하지 마십시오. 데이터 로드를 최대한 빠르게 수행하려면 데이터 로드를 완료한 후에 DB 인스턴스를 다중 AZ 배포로 변환합니다.

  • SQL Server 데이터베이스에 액세스하는 애플리케이션에 연결 오류를 포착하는 예외 처리 기능이 있어야 합니다. 다음 코드 샘플에 통신 오류를 포착하는 try/catch 블록이 표시되어 있습니다. 이 예제에서 break 문은 연결에 성공하면 while 루프를 종료하지만 예외가 발생하면 10회까지 다시 시도합니다.

    int RetryMaxAttempts = 10; int RetryIntervalPeriodInSeconds = 1; int iRetryCount = 0; while (iRetryCount < RetryMaxAttempts) { using (SqlConnection connection = new SqlConnection(DatabaseConnString)) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');"; try { connection.Open(); command.ExecuteNonQuery(); break; } catch (Exception ex) { Logger(ex.Message); iRetryCount++; } finally { connection.Close(); } } } Thread.Sleep(RetryIntervalPeriodInSeconds * 1000); }
  • 다중 AZ 인스턴스로 작업할 때는 Set Partner Off 명령을 사용하지 마십시오. 예를 들어 다음을 수행하지 마십시오.

    --Don't do this ALTER DATABASE db1 SET PARTNER off
  • 복구 모드를 simple로 설정하지 마십시오. 예를 들어 다음을 수행하지 마십시오.

    --Don't do this ALTER DATABASE db1 SET RECOVERY simple
  • 이러한 설정은 대기 미러에 적용할 수 없으므로 다중 AZ DB 인스턴스에 새 로그인을 만들 때 DEFAULT_DATABASE 파라미터를 사용하지 마십시오. 예를 들어 다음을 수행하지 마십시오.

    --Don't do this CREATE LOGIN [test_dba] WITH PASSWORD=foo, DEFAULT_DATABASE=[db2]

    또한 다음 작업을 수행하지 마십시오.

    --Don't do this ALTER LOGIN [test_dba] SET DEFAULT_DATABASE=[db3]

보조의 위치 확인

AWS Management Console을 사용하여 보조 복제본의 위치를 확인할 수 있습니다. VPC에서 기본 DB 인스턴스를 설정할 경우 보조의 위치를 알아야 합니다.


				보조 AZ

AWS CLI 명령 describe-db-instances 또는 RDS API 작업 DescribeDBInstances를 사용하여 보조의 가용 영역을 확인할 수도 있습니다. 출력에는 대기 미러가 있는 보조 AZ가 표시됩니다.

데이터베이스 미러링에서 상시 작동 가용성 그룹으로 마이그레이션

Microsoft SQL Server Enterprise Edition의 14.00.3049.1 버전에서는 상시 작동 가용성 그룹(AG)이 기본적으로 사용됩니다.

데이터베이스 미러링(DBM)에서 AG로 마이그레이션하려면 먼저 버전을 확인하십시오. 버전이 13.00.5216.0 이전인 DB 인스턴스를 사용하는 경우, 13.00.5216.0으로 패치하도록 인스턴스를 수정합니다. Enterprise Edition 14.00.3049.1 이전 버전의 DB 인스턴스를 사용하는 경우, 14.00.3049.1 이상으로 패치하도록 인스턴스를 수정합니다.

AG를 사용하도록 미러링된 DB 인스턴스를 업그레이드하려면 먼저 업그레이드를 실행하고 다중 AZ를 제거하도록 인스턴스를 수정한 다음 다시 수정하여 다중 AZ를 추가하십시오. 그러면 인스턴스가 상시 작동 AG를 사용하도록 변환됩니다.