연습 - 범용 고가용성
이전 단원에서는 Azure SQL의 고가용성 아키텍처에 대해 알아보았습니다. 이 연습에서는 Azure SQL Database의 범용 계층이 온-프레미스의 장애 조치(failover) 클러스터 인스턴스와 어떻게 비슷하게 동작하는지 학습합니다. 이 기능은 온-프레미스에서 설정하기 까다롭거나 시간이 오래 걸릴 수 있지만 Azure SQL에서는 바로 사용할 수 있습니다.
이 연습에서는 이전 모듈에서 워크로드를 만드는 데 사용한 ostress 도구를 사용합니다. 그런 다음, Azure Cloud Shell에서 Azure PowerShell 모듈을 사용하여 장애 조치를 시작합니다. 마지막으로, 장애 조치가 ostress 워크로드에 미치는 영향을 확인합니다.
Azure SQL 범용 서비스 계층의 기본 고가용성
이 연습에서는 다음 단계를 완료합니다.
- ostress 워크로드를 실행합니다.
- 환경이 제대로 구성되었는지 확인합니다.
- PowerShell을 사용하여 Azure SQL Database의 장애 조치를 시작합니다.
- ostress에서 결과를 확인합니다.
- 장애 조치가 발생한 징후를 포털에서 찾습니다.
ostress 워크로드 실행
첫 번째 단계는 장기 실행 워크로드를 만드는 것입니다. 이 워크로드를 사용하면 장애 조치가 데이터를 읽고 쓰는 기능에 미치는 영향 및 Azure SQL Database의 범용 서비스 계층에서 장애 조치가 수행되는 기간을 확인할 수 있습니다. ostress를 사용합니다.
로컬 컴퓨터에서 새 명령 프롬프트 창을 엽니다.
cd
를 사용하여 이전에 복제하거나 다운로드한 리포지토리에서 가용성 모듈이 있는 디렉터리로 이동합니다. 예를 들어 다음 명령을 사용할 수 있습니다.cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
ostress 실행 파일이 이 폴더에 있습니다. (작습니다.) ostress 워크로드는 단순 쿼리를 50,000번 연결하고 실행합니다.
다음 ostress 스크립트를 사용하여 워크로드를 실행합니다.
serverName
을 Azure SQL Database 논리 서버의 이름으로 바꿉니다.password
를 암호로 바꿉니다..\ostress.exe -S"serverName.database.windows.net" -Q"SELECT COUNT(*) FROM SalesLT.Customer" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r50000
워크로드가 제대로 실행되는 경우 쿼리의 결과
847
이 명령 프롬프트 창에 반복적으로 표시됩니다.ostress 워크로드 실행을 완료 전에 중지하려는 경우에는 터미널에서 Ctrl+C를 선택할 수 있습니다.
워크로드를 다시 실행하려는 경우 명령을 다시 실행할 수 있습니다.
Azure Cloud Shell에서 PowerShell을 사용하여 장애 조치 시작 및 결과 살펴보기
이 페이지의 오른쪽에 있는 Azure Cloud Shell 터미널에서 이 PowerShell 스크립트를 실행하여 환경을 구성합니다.
$resourceGroup = "<rgn>[sandbox resource group name]</rgn>" $database = "AdventureWorks" $server = Get-AzureRmSqlServer -ResourceGroupName $resourceGroup $server = $server.ServerName # Specify your default resource group and Azure SQL Database logical server az configure --defaults group=$resourceGroup sql-server=$server # Confirm the defaults are set az configure --list-defaults
이 브라우저와 명령 프롬프트 창을 동시에 볼 수 있도록 창을 구성합니다.
Azure Cloud Shell 터미널에서 이 코드를 실행합니다.
# Create a failover Invoke-AzSqlDatabaseFailover -ResourceGroupName $resourceGroup ` -ServerName $server ` -DatabaseName $database
명령 프롬프트 창에서 ostress의 결과를 살펴봅니다. 명령이 실행되는 동안 명령 프롬프트 창에 표시되는 모든 변경 내용을 확인해야 합니다. 장애 조치가 발생하는 동안에는 데이터베이스에 액세스할 수 없습니다. 장애 조치가 약 30초 후에 완료되고 워크로드가 다시 실행되는 것을 볼 수 있습니다. 애플리케이션에서는 재시도 논리가 매우 중요합니다. Azure가 (여러 이유로 인해) 장애 조치를 수행하는 경우 장애 조치가 발생하는 데 소요되는 시간보다 오랫동안 애플리케이션이 다운되거나 가동 중지되기를 원하지 않기 때문입니다.
명령에서 장애 조치를 만드는 이 기능은 특정 시나리오에서 유용할 수 있습니다. 서비스에서는 너무 자주 이 기능을 수행하지 못하도록 제한합니다. 다음 명령을 실행하여 다른 장애 조치를 시도하세요.
# Create a failover again Invoke-AzSqlDatabaseFailover -ResourceGroupName $resourceGroup ` -ServerName $server ` -DatabaseName $database
다음과 유사한 오류가 표시됩니다.
Invoke-AzSqlDatabaseFailover: Long running operation failed with status 'Failed'. Additional Info:'There was a recent failover on the database or pool if database belongs in an elastic pool. At least 15 minutes must pass between database failovers.'
이제 명령 프롬프트 창에서 워크로드를 중지할 수 있습니다. 창을 선택한 다음 Ctrl+C를 선택하면 됩니다. 다음 연습에서 동일한 워크로드를 사용할 예정이므로 창을 열어 둬도 됩니다.
장애 조치가 발생했는지 여부를 확인하는 방법이 있는지 궁금하실 수 있습니다. 현재는 “장애 조치가 발생함”이라는 분명한 메시지가 없지만, Resource Health가 좋은 지표가 될 수 있습니다.
Azure Portal에서 Azure SQL 데이터베이스로 이동합니다. 왼쪽 창의 도움말에서 Resource Health를 선택합니다. 장애 조치 후 5분에서 15분 사이에 다음 스크린샷에 나온 것과 유사한 상태 이벤트가 표시될 수 있습니다. 이 이벤트는 여러 사항을 나타낼 수 있지만 한 가지 가능성은 문제가 발생했고 Azure가 장애 조치를 수행했음을 나타냅니다.