Amazon FSx를 사용하여 SQL Server Always On FCI용 다중 AZ 인프라 설정 - AWS 권장 가이드

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

Amazon FSx를 사용하여 SQL Server Always On FCI용 다중 AZ 인프라 설정

작성자: Manish Garg(AWS), T.V.R.L.Phani Kumar Dadi(AWS), Nishad Mankar(AWS), RAJNEESH TYAGI(AWS)

코드 리포지토리: - 자동화 aws-windows-failover-cluster

환경: PoC 또는 파일럿

소스: 온프레미스 SQL Server 데이터베이스

대상: EC2 기반 Microsoft SQL Server

R 유형: 리호스팅

워크로드: Microsoft

기술: 마이그레이션, 인프라, DevOps

AWS 서비스: AWS Managed Microsoft AD, Amazon EC2, Amazon FSx, AWS Systems Manager

요약

많은 Microsoft SQL Server Always On 장애 조치 클러스터 인스턴스(FCI)를 빠르게 마이그레이션해야 하는 경우 이 패턴을 이용하면 프로비저닝 시간을 최소화할 수 있습니다. 자동화 및 Amazon FSx for Windows File Server를 이용하면 많은 클러스터를 배포하는 데 필요한 수동 작업, 사람이 저지르는 오류 및 시간을 줄일 수 있습니다.

이 패턴은 Amazon Web Services(AWS)의 다중 가용 영역(다중 AZ) 배포에서 SQL Server FCI의 인프라를 설정합니다. 이 인프라에 필요한 AWS 서비스 프로비저닝은 AWS CloudFormation 템플릿을 사용하여 자동화됩니다. Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스에서의 SQL Server 설치 및 클러스터 노드 생성은 명령을 사용하여 수행됩니다. PowerShell

이 솔루션은 가용성이 높은 다중 AZ Amazon FSx for Windows 파일 시스템을 SQL Server 데이터베이스 파일을 저장하기 위한 공용 감시 시스템으로 사용합니다. SQL Server를 호스팅하는 Amazon FSx 파일 시스템 및 EC2 Windows 인스턴스는 동일한 AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD) 도메인에 조인됩니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 계정.

  • AWS CloudFormation 템플릿을 사용하여 리소스를 프로비저닝할 수 있는 충분한 권한을 가진 AWS 사용자

  • Microsoft Active Directory용 AWS Directory Service

  • 키-값 페어로 AWS Managed Microsoft AD에 인증하기 위한 AWS Secrets Manager의 보안 인증 정보:

    • ADDomainName: <도메인 이름>

    • ADDomainJoinUserName: <도메인 사용자 이름>

    • ADDomainJoinPassword: <도메인 사용자 비밀번호>

    • TargetOU: <대상 OU 값>

    참고: AWS Managed Microsoft AD 조인 활동에는 AWS Systems Manager Automation과 동일한 키 이름을 사용하게 됩니다.

  • SQL Server 설치용 SQL Server 미디어 파일과 생성된 Windows 서비스 또는 도메인 계정(클러스터 생성 시 사용됨)

  • 별도의 가용 영역에 있는 두 공개 서브넷, 가용 영역에 있는 두 비공개 서브넷, 인터넷 게이트웨이, NAT 게이트웨이, 라우팅 테이블 연결, 점프 서버를 포함하는 Virtual Private Cloud(VPC)

제품 버전

  • Windows Server 2012 R2와 Microsoft SQL Server 2016

아키텍처

소스 기술 스택

  • 공용 드라이브를 사용하는 온프레미스 SQL Server

대상 기술 스택

  • AWS EC2 인스턴스

  • Amazon FSx for Windows File Server

  • AWS Systems Manager Automation 런북

  • 네트워크 구성(VPC, 서브넷, 인터넷 게이트웨이, NAT 게이트웨이, 점프 서버, 보안 그룹)

  • AWS Secrets Manager

  • AWS Managed Microsoft AD

  • 아마존 EventBridge

  • AWS Identity and Access Management(IAM)

대상 아키텍처

다음 다이어그램은 가용 영역 두 개, NAT 게이트웨이가 있는 공개 서브넷 두 개, 첫 번째 공개 서브넷의 점프 서버 한 개, 비공개 서브넷 두 개(각각 노드 보안 그룹의 SQL Server 노드용 EC2 인스턴스 포함), 각 SQL Server 노드에 연결되는 Amazon FSx 파일 시스템을 포함하는 VPC가 있는 단일 AWS 리전의 AWS 계정을 보여줍니다. AWS 디렉토리 서비스, 아마존 EventBridge, AWS Secrets Manager 및 AWS Systems Manager도 포함됩니다.

퍼블릭 및 프라이빗 서브넷의 리소스와 노드 보안 그룹을 포함하는 다중 AZ 아키텍처.

자동화 및 규모 조정

  • AWS Systems Manager를 사용하여 AWS Managed Microsoft AD에 조인하고 SQL 서버 설치를 수행할 수 있습니다.

도구

서비스

  • AWS는 AWS CloudFormation 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 전체 AWS 계정 및 지역의 수명 주기 전반에 걸쳐 리소스를 관리할 수 있도록 지원합니다.

  • AWS Directory Service는 Amazon Elastic Compute Cloud(Amazon EC2), Amazon Relational Database Service(RDS) for SQL Server, Amazon FSx for Windows File Server 등의 기타 AWS Service와 함께 Microsoft Active Directory(AD)를 사용할 수 있는 다양한 방법을 제공합니다.

  • Amazon Elastic Compute Cloud(Amazon EC2)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.

  • EventBridgeAmazon은 다양한 소스의 실시간 데이터와 애플리케이션을 연결하는 데 도움이 되는 서버리스 이벤트 버스 서비스입니다. AWS Lambda 함수, API 대상을 사용하는 HTTP 간접 호출 엔드포인트 또는 다른 AWS 계정의 이벤트 버스를 예로 들 수 있습니다.

  • AWS Identity and Access Management(IAM)를 이용하면 사용자에 대해 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.

  • AWS Secrets Manager를 사용하면 코드에 하드코딩된 보안 인증 정보(암호 등)를Secrets Manager에 대한 API 직접 호출로 바꾸어 프로그래밍 방식으로 보안 암호를 검색할 수 있습니다.

  • AWS Systems Manager는 AWS 클라우드에서 실행되는 애플리케이션과 인프라를 관리하는 데 도움이 됩니다. 애플리케이션 및 리소스 관리를 간소화하고, 운영 문제의 감지 및 해결 시간을 단축하며, AWS 리소스를 규모에 따라 안전하게 관리하는 데 도움이 됩니다.

기타 도구

  • PowerShellWindows, Linux 및 macOS에서 실행되는 Microsoft 자동화 및 구성 관리 프로그램입니다. 이 패턴은 PowerShell 스크립트를 사용합니다.

코드 리포지토리

이 패턴의 코드는 GitHub aws-windows-failover-cluster-automation 저장소에서 사용할 수 있습니다.

모범 사례

에픽

작업설명필요한 기술

Systems Manager CloudFormation 스택을 배포합니다.

  1. AWS 계정에 로그인하고 AWS Management Console을 엽니다.

  2. CloudFormation 콘솔로 이동하여 ssm.yaml 템플릿을 업로드하여 Systems Manager CloudFormation 스택을 생성합니다. 다음 매개변수 값을 입력합니다.

    • StateUnJoinAssociationLoggingBucketName— 템플릿이 로깅을 위해 생성할 S3 버킷의 이름을 입력합니다.

    • SSM AssociationAD UnjoinName — 리소스의 이름을 제공합니다. AWS::SSM::Association

    • SSM AutomationDocumentName — Systems Manager 자동화 런북의 이름을 제공합니다.

    • EventBridgeName— EventBridge 이벤트 버스의 이름을 입력합니다.

  3. ssm.yaml CloudFormation 템플릿을 실행하여 Systems Manager CloudFormation 스택을 배포합니다. 템플릿은 태그 ADJoined: FSXADD가 있는 새 EC2 인스턴스가 시작될 때 시작되는 Systems Manager Automation 런북을 생성합니다. Automation 런북은 AWS Managed Microsoft AD 디렉터리에 인스턴스를 추가합니다.

AWS DevOps, DevOps 엔지니어

인프라 스택을 배포합니다.

Systems Manager 스택을 성공적으로 배포한 후 EC2 인스턴스 노드, 보안 그룹, Amazon FSx for Windows File Server 파일 시스템 및 IAM 역할을 포함하는 infra 스택을 생성합니다.

  1. CloudFormation 콘솔로 이동하여 infra-cf.yaml 템플릿을 실행합니다. 이 스택을 배포하려면 다음의 파라미터가 필요합니다.

    • ActiveDirectoryId-AWS Managed Microsoft AD의 ID

    • ADDnsIpAddresses1-AWS Managed Microsoft AD의 기본 DNS IP 주소

    • ADDnsIpAddresses2-AWS Managed Microsoft AD의 보조 DNS IP 주소

    • FSxSecurityGroupName-Amazon FSx 보안 그룹의 이름

    • FSxWindowsFileSystemName-Amazon FSx 드라이브 이름

    • ImageID-SQL 서버 인스턴스 노드를 생성하는 데 사용된 기본 Windows 2012 R2 이미지 또는 Amazon Machine Image(AMI)의 ID

    • KeyPairName-액세스를 위해 EC2 인스턴스 노드에 연결할 키-값 페어

    • Node1SecurityGroupName-첫 번째 노드 보안 그룹의 이름

    • Node2SecurityGroupName-두 번째 노드 보안 그룹의 이름

    • OUSecretName-AWS Managed Microsoft AD 정보가 들어 있는 보안 암호의 이름

    • PrivateSubnet1-첫 번째 비공개 서브넷의 ID

    • PrivateSubnet2-두 번째 비공개 서브넷의 ID

    • SqlFSxFCIName-기본 및 보조 노드와 Amazon FSx에 적용되는 태그의 이름.

    • SqlFSxServerNetBIOSName1-기본 EC2 인스턴스 노드의 이름(최대 15자)

    • SqlFSxServerNetBIOSName2-보조 EC2 인스턴스 노드의 이름(최대 15자)

    • VPC-VPC ID

    • WorkloadInstanceType-EC2 인스턴스 유형

    infra 스택을 배포합니다. 스택은 Windows SQL Server FCI를 설정하는 데 필요한 모든 인프라 구성 요소를 생성합니다.

  2. EC2 인스턴스 노드가 시작되면 Systems Manager Automation 문서를 간접적으로 호출하여 이러한 인스턴스를 AWS Managed Microsoft AD에 조인합니다. Systems Manager 콘솔 자동화 페이지에서 진행 상황을 추적할 수 있습니다.

AWS DevOps, DevOps 엔지니어
작업설명필요한 기술

윈도우 도구를 설치합니다.

  1. 기본 EC2 인스턴스(노드 1)에 로그인합니다. Windows 기능 (액티브 디렉터리 및 FCI 도구) 을 설치하려면 다음 PowerShell 스크립트를 실행합니다.

    Install-WindowsFeature -Name RSAT-AD-Powershell,Failover-Clustering -IncludeManagementTools Install-WindowsFeature -Name RSAT-Clustering,RSAT-ADDS-Tools,RSAT-AD-Powershell,RSAT-DHCP,RSAT-DNS-Server
  2. 보조 EC2 인스턴스(노드 2)에 로그인하고 동일한 스크립트를 실행하여 노드 2에서 기능을 활성화합니다.

AWS DevOps, DevOps 엔지니어, DBA

Active Directory Domain Services에서 클러스터 컴퓨터 객체를 사전 준비합니다.

Active Directory Domain Services(AD DS)에서 클러스터 이름 개체(CNO)를 사전 준비하고 클러스터된 역할을 위해 가상 컴퓨터 개체(VCO)를 사전 준비하려면 Windows Server 설명서의 지침을 따릅니다.

AWS DevOps, DBA, 엔지니어 DevOps

WSFC를 생성합니다.

Windows Server Failover Clustering(WSFC) 클러스터를 만들려면 다음과 같이 합니다.

  1. 기본 EC2 인스턴스(노드 1)에 로그인합니다. Amazon FSx 파일 공유를 생성하고 나열된 AD 서비스 계정에 대한 전체 액세스 권한을 부여하려면 다음 코드를 실행합니다.

    Invoke-Command -ComputerName "<FSx Windows Remote PowerShell Endpoint>" -ConfigurationName FSxRemoteAdmin -scriptblock { New-FSxSmbShare -Name "SQLDB" -Path "D:\share" -Description "SQL Databases Share" -ContinuouslyAvailable $true -FolderEnumerationMode AccessBased -EncryptData $true grant-fsxsmbshareaccess -name SQLDB -AccountName "<domain\user>" -accessRight Full }

    또한 이 명령을 실행하면 지속적으로 사용 가능한(CA) 파일 공유가 만들어지는데, 이 공유는 Microsoft SQL Server에서 사용하도록 최적화되어 있습니다.

  2. 기본 인스턴스(노드 1)에 장애 조치 클러스터를 만들려면 다음 명령을 실행합니다.

    New-Cluster -Name <CNO Name> -Node  <Node1 Name>, <Node2 Name> -StaticAddress <Node1 Secondary Private IP>, <Node2 Secondary Private IP>

    명령은 다음 파라미터를 필요로 합니다.

    • Name-클러스터의 이름(CNO)

    • Node-기본 노드와 보조 노드의 이름 각각

    • StaticAddress-기본 노드와 보조 노드의 보조 IP 주소 각각

    중요: Windows Server Failover Clustering(WSFC) 클러스터를 만들려면 도메인 관리자 또는 일반 사용자에게 두 노드 모두에 대한 관리자 권한이 있어야 합니다. 그렇지 않으면 이전 명령이 실패하고 You do not have administrator privilege on servers라는 메시지가 반환됩니다.

  3. 클러스터가 생성된 후 다음 명령을 실행하여 파일 공유 감시를 연결합니다.

    Set-ClusterQuorum -FileShareWitness \\<FSx Windows Remote PowerShell Endpoint>\share\witness
AWS DevOps, DBA, 엔지니어 DevOps

SQL Server 장애 조치 클러스터를 설치합니다.

WSFC 클러스터를 설정한 후 기본 인스턴스(노드1)에 SQL Server 클러스터를 설치합니다.

  1. 두 노드의 T 드라이브에 tempdb log 폴더를 생성합니다. 폴더는 PowerShell 명령에 사용됩니다.

  2. SQL Server 설치용 SQL Server 미디어 파일을 두 노드에 복사한 후 노드 1에서 다음 PowerShell 명령을 실행하여 노드 1에 SQL Server를 설치합니다.

D:\setup.exe /Q ` /ACTION=InstallFailoverCluster ` /IACCEPTSQLSERVERLICENSETERMS ` /FEATURES="SQL,IS,BC,Conn" ` /INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server” ` /INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server" ` /RSINSTALLMODE="FilesOnlyMode" ` /INSTANCEID="MSSQLSERVER" ` /INSTANCENAME="MSSQLSERVER" ` /FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)" ` /FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node1>;Cluster Network 1;<subnet mask>" ` /FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>" ` /INSTANCEDIR="C:\Program Files\Microsoft SQL Server" ` /ENU="True" ` /ERRORREPORTING=0 ` /SQMREPORTING=0 ` /SAPWD=“<Domain User password>” ` /SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS" ` /SQLSYSADMINACCOUNTS="<domain\username>" ` /SQLSVCACCOUNT="<domain\username>" /SQLSVCPASSWORD="<Domain User password>" ` /AGTSVCACCOUNT="<domain\username>" /AGTSVCPASSWORD="<Domain User password>" ` /ISSVCACCOUNT="<domain\username>" /ISSVCPASSWORD="<Domain User password>" ` /FTSVCACCOUNT="NT Service\MSSQLFDLauncher" ` /INSTALLSQLDATADIR="\\<FSX DNS name>\share\Program Files\Microsoft SQL Server" ` /SQLUSERDBDIR="\\<FSX DNS name>\share\data" ` /SQLUSERDBLOGDIR="\\<FSX DNS name>\share\log" ` /SQLTEMPDBDIR="T:\tempdb" ` /SQLTEMPDBLOGDIR="T:\log" ` /SQLBACKUPDIR="\\<FSX DNS name>\share\SQLBackup" ` /SkipRules=Cluster_VerifyForErrors ` /INDICATEPROGRESS
AWS DevOps, DBA, 엔지니어 DevOps

클러스터에 보조 노드를 추가합니다.

보조 노드 (노드 2) 에 SQL Server를 추가하려면 다음 PowerShell 명령을 실행합니다.

D:\setup.exe /Q ` /ACTION=AddNode ` /IACCEPTSQLSERVERLICENSETERMS ` /INSTANCENAME="MSSQLSERVER" ` /FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)" ` /FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node2>;Cluster Network 2;<subnet mask>" ` /FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>" ` /CONFIRMIPDEPENDENCYCHANGE=1 ` /SQLSVCACCOUNT="<domain\username>" /SQLSVCPASSWORD="<Domain User password>" ` /AGTSVCACCOUNT="domain\username>" /AGTSVCPASSWORD="<Domain User password>" ` /FTSVCACCOUNT="NT Service\MSSQLFDLauncher" ` /SkipRules=Cluster_VerifyForErrors ` /INDICATEPROGRESS
AWS DevOps, DBA, 엔지니어 DevOps

SQL 서버 FCI를 테스트합니다.

  1. 노드 중 하나에 대한 Windows 인스턴스의 관리 도구에서 장애 조치 클러스터 관리자를 시작합니다.

  2. 노드로 이동하여 노드 상태가 실행 상태인지 확인합니다.

  3. 역할을 선택하고 SQL Serve(MSSQLSERVER)의 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 연 다음 이동 및 노드 선택을 선택합니다.

  4. 노드를 선택한 후에는 다른 노드에서 SQL Server가 실행되고 있어야 합니다.

DBA, 엔지니어 DevOps
작업설명필요한 기술

리소스를 정리하십시오.

리소스를 정리하려면 AWS CloudFormation 스택 삭제 프로세스를 사용하십시오.

  1. AWS CloudFormation 콘솔을 엽니다.

  2. 스택 페이지에서 infra 스택을 선택합니다. 스택이 현재 실행 중이어야 합니다.

  3. 스택 세부 정보 창에서 삭제를 선택합니다.

  4. 메시지가 나타나면 스택 삭제를 선택하세요.

  5. ssm 스택에 대해 2~4단계를 반복합니다.

스택 삭제가 완료되면 스택의 상태가 DELETE_COMPLETE으로 바뀝니다. DELETE_COMPLETE상태에 있는 스택은 기본적으로 CloudFormation 콘솔에 표시되지 않습니다. 삭제된 스택을 표시하려면 AWS CloudFormation 콘솔에서 삭제된 스택 보기에 설명된 대로 스택 보기 필터를 변경해야 합니다.

삭제에 실패하면 스택이 DELETE_FAILED 상태가 됩니다. 해결 방법은 설명서의 스택 삭제 실패를 CloudFormation 참조하십시오.

AWS DevOps, DBA, 엔지니어 DevOps

문제 해결

문제Solution

AWS CloudFormation 템플릿 실패

배포 중에 CloudFormation 템플릿이 실패하는 경우 다음을 수행하십시오.

  1. AWS CloudFormation 콘솔을 엽니다.

  2. CloudFormation 콘솔의 스택 페이지에서 스택을 선택합니다.

  3. 이벤트를 선택하고 스택 상태를 확인합니다.

AWS Managed Microsoft AD 조인 실패

조인 문제를 해결하려면 다음 단계를 수행하세요.

  1. Systems Manager 콘솔을 엽니다.

  2. 배포 리전을 선택합니다.

  3. 왼쪽 창에서 자동화를 선택하고 실패한 자동화 런북을 찾습니다.

  4. 자동화 런북을 열고 실행 상태 및 실행 단계를 확인합니다.

  5. 실패한 단계의 세부 정보를 조사하여 정확한 오류 또는 실패를 확인합니다.

관련 리소스