연습 - 읽기 확장을 사용하는 지리적으로 분산된 자동 장애 조치(failover) 그룹

완료됨

이전 단원에서는 지역에서 복제 및 자동 장애 조치 그룹에 대해 알아보았습니다. 연습에서는 Azure SQL 데이터베이스의 자동 장애 조치 그룹을 구성합니다. 그런 다음, 장애 조치를 시작하고 결과를 확인합니다.

Azure SQL의 자동 장애 조치 그룹

하나 이상의 데이터베이스에 대해 자동 장애 조치 그룹을 구성하고 결과를 보려면 다음 단계를 완료해야 합니다.

  1. 환경을 구성합니다.
  2. 장애 조치 영역에 빈 Azure SQL Database 서버를 만듭니다.
  3. 서버 간 장애 조치 그룹을 만듭니다.
  4. 네트워크를 구성합니다.
  5. 장애 조치 그룹에 하나 이상의 데이터베이스를 추가합니다.
  6. 명령 프롬프트 애플리케이션을 구성합니다.
  7. 실행 중인 애플리케이션을 이해합니다.
  8. 장애 조치를 시작합니다.
  9. 장애 복구(failback)를 수행합니다.

이 연습에서는 AdventureWorks 데이터베이스에 대한 자동 장애 조치(failover) 그룹을 구성하는 과정을 안내합니다. 그런 다음, 간단한 명령줄 애플리케이션을 사용하여 읽기 및 쓰기가 발생하는 위치 및 애플리케이션에서 재시도 논리의 중요성을 알아봅니다. 마지막으로, 자동 장애 조치 그룹도 포함하는 중요 비즈니스용 데이터베이스와 연결된 읽기 복제본 수를 확인하는 흥미로운 연습을 수행합니다.

환경 구성

  1. 다음 코드를 메모장 또는 다른 텍스트 편집기에 복사합니다. 정보를 제공합니다. SQL 인증 암호를 추가합니다. $drLocation의 경우 장애 조치 그룹을 배치할 영역을 입력합니다. 이상적으로는 현재 서버 지역과 쌍을 이루는 지역을 선택합니다. 쌍을 이루는 영역의 목록을 확인할 수 있습니다. 최소한, 원래 데이터베이스가 위치한 영역은 선택할 수 없습니다. 마지막으로, 로컬 컴퓨터의 IP 주소를 추가합니다. IP 주소를 확인해야 하는 경우 로컬 컴퓨터에서 PowerShell을 열고 (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content를 실행합니다.

    # Add your info
    $password = "password"
    $drLocation = "westus2"
    $ipAddress = "xx.xx.xx.xx"
    
  2. 업데이트된 명령을 이 페이지의 오른쪽에 있는 Azure Cloud Shell에서 실행합니다.

  3. Azure Cloud Shell에서 다음 스크립트를 실행하여 이후 단계를 위한 변수를 구성합니다.

    $admin = "cloudadmin"
    $resourceGroup = Get-AzResourceGroup | Where ResourceGroupName -like <rgn>Sandbox resource group name</rgn>
    $location = $resourceGroup.Location
    $resourceGroup = $resourceGroup.ResourceGroupName
    $database = "AdventureWorks"
    $server = Get-AzureRmSqlServer -ResourceGroupName $resourceGroup
    $server = $server.ServerName
    $drServer = "$($server)-dr"
    $failoverGroup = "$($server)-fg"
    $firewallRule = "AllowMyIp"
    Write-Host "Variables Received"
    
  4. Azure Cloud Shell에서 다음 스크립트를 실행하여 장애 조치 영역에 빈 Azure SQL Database 서버를 만듭니다.

    # Create a backup server in the failover region
    New-AzSqlServer -ResourceGroupName $resourceGroup `
        -ServerName $drServer `
        -Location $drLocation `
        -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential `
        -ArgumentList $admin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
    Write-Host "New Azure SQL Database logical server Created in different region"
    
  5. Azure Cloud Shell에서 다음 스크립트를 실행하여 서버 간에 장애 조치 그룹을 만듭니다.

    # Create a failover group between the servers
    New-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -PartnerServerName $drServer `
        -FailoverGroupName $failoverGroup 
    Write-Host "New auto-failover group created between the two Azure SQL Database logical servers"
    
  6. Azure Cloud Shell에서 다음 스크립트를 실행하여 네트워크를 구성합니다.

    # Add a firewall rule that gives your VM access to the new server
    New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroup `
        -ServerName $drServer `
        -FirewallRuleName $firewallRule `
        -StartIpAddress $ipAddress `
        -EndIpAddress $ipAddress;
    

    자동 장애 조치 그룹을 보여 줄 용도로 이 네트워크 설정만으로 충분합니다. 이 설정은 엔터프라이즈 환경에서 수행하는 설정과 약간 다릅니다. 엔터프라이즈 환경에서 액세스해야 하는 머신은 특정 유형의 애플리케이션을 구성하는 리소스 세트일 수 있습니다. 데이터베이스가 장애 조치되면 애플리케이션, VM 또는 다른 리소스도 새 영역으로 장애 조치하는 것이 좋습니다. 두 리소스 세트는 모두 다른 영역의 리소스, 서버 및 데이터베이스에 액세스해야 합니다. 그러기 위해 가상 네트워크 피어링, 가상 네트워크 간 연결 또는 잠재적인 다른 항목(예: Azure ExpressRoute)을 사용할 수 있습니다. 시나리오에 따라 다릅니다.

  7. Azure Cloud Shell에서 다음 스크립트를 실행하여 장애 조치 그룹에 하나 이상의 데이터베이스를 추가합니다.

    # Add the database or databases to the failover group
    Get-AzSqlDatabase -ResourceGroupName $resourceGroup `
        -ServerName $server -DatabaseName $database | `
        Add-AzSqlDatabaseToFailoverGroup -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -FailoverGroupName $failoverGroup
    Write-Host "AdventureWorks database added to the auto-failover group"
    

    이 스크립트를 실행하는 데 시간이 좀 걸립니다. 다른 영역에서 데이터베이스를 복원하며, 이 경우 원래 영역에서 재해 복구 영역으로 데이터를 복사해야 하기 때문입니다. 다음 섹션의 단계를 수행한 후 이 스크립트가 완료되었는지 다시 확인할 수 있습니다.

이제 AdventureWorks 데이터베이스의 자동 장애 조치 그룹을 배포하고 구성했습니다.

명령 프롬프트 애플리케이션 구성

이 섹션에서는 두 개의 ostress 워크로드를 사용하여 장애 조치 그룹에서 주 서버 및 보조 서버의 Updateability(데이터베이스가 ReadWrite 또는 ReadOnly 상태인지 여부)를 확인합니다. 이 시나리오는 읽기 및 쓰기 워크로드를 포함하는 애플리케이션을 시뮬레이트하기 위한 것입니다.

  1. 두 개의 개별 명령 프롬프트 창을 엽니다. 이 창(브라우저)과 두 개의 명령 프롬프트 창을 모두 볼 수 있도록 창을 설정합니다.

  2. 두 명령 프롬프트 창에서 모두, 이전 연습에서 했듯이 Availability 폴더로 이동합니다. 예를 들어 다음 명령을 사용할 수 있습니다.

    cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
    
  3. 첫 번째 명령 프롬프트 창은 만든 장애 조치 그룹에서 주 서버의 상태를 확인하는 데 사용됩니다. 서버 이름 및 암호를 사용하여 다음 명령을 실행합니다.

    .\ostress.exe -S"<server-name>-fg.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -oprimary
    

    참고

    자동 장애 조치 그룹을 사용하여 데이터베이스의 추상적 개념인 장애 조치 그룹 이름에 연결합니다.

  4. 두 번째 명령 프롬프트 창은 사용자가 장애 조치 그룹에서 보조 서버의 상태를 확인하는 데 사용됩니다. 서버 이름 및 암호를 사용하여 다음 명령을 실행합니다.

    ostress.exe -S"<server-name>-fg.secondary.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -osecondary
    

주 장애 조치 그룹 서버를 점검하는 명령이며 장애 조치를 시작하지 않았기 때문에 첫 번째 명령의 결과는 READ_WRITE입니다.

구성한 재해 복구 또는 보조 서버를 점검하기 때문에 두 번째 명령의 결과는 READ_ONLY입니다. 지정된 시간에 서버 중 하나에서만 쓸 수 있어야 합니다.

다음 단계에서는 장애 조치 발생 시 두 서버에서 모두 발생하는 작업을 확인합니다.

장애 조치 시작 및 결과 보기

  1. 이 페이지 오른쪽에 있는 Azure Cloud Shell 터미널을 사용하여 보조 서버의 상태를 확인합니다.

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    

    결과에서 자동 장애 조치 그룹의 보조 서버가 주 데이터베이스 또는 보조 데이터베이스로 사용되고 있는지 알 수 있습니다.

  2. 이제 장애 조치가 발생하면 어떻게 되는지 확인할 수 있습니다. Azure Cloud Shell 터미널에 다음 Azure PowerShell 명령을 입력하여 수동 장애 조치를 시작합니다.

    Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
     -ServerName $drServer -FailoverGroupName $failoverGroup
    

    장애 조치(failover)가 발생하면 연결이 잠시 끊어지는 것을 확인할 수 있지만 앱이 계속 다시 시도하므로 애플리케이션이 완전히 실패하지는 않습니다. 장애 조치가 완료되면 READ_WRITEREAD_ONLY 결과가 다시 시작되며 변경되지 않은 것을 볼 수 있습니다.

    Azure SQL Database 및 Azure SQL Managed Instance에서 자동 장애 조치 그룹의 이점 중 하나는 장애 조치 후에 연결 문자열을 업데이트할 필요가 없다는 것입니다. 계속해서 쓰기 워크로드용으로 주 그룹(<failover-group>.database.windows.net)에 연결하고 읽기 워크로드용으로 보조 그룹(<failover-group>.secondary.database.windows.net)에 연결합니다. Azure에서는 해당 영역/서버의 적절한 데이터베이스로 작업자를 라우팅합니다.

  3. Azure Cloud Shell에서 다음 스크립트를 실행하여 보조 서버의 상태를 확인합니다.

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    

    이 서버가 이제 주 역할에 속합니다.

  4. Azure Cloud Shell에서 다음 스크립트를 실행하여 장애 복구를 수행합니다.

    Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
     -ServerName $server -FailoverGroupName $failoverGroup
    
  5. 마지막으로, 보조 서버의 상태를 다시 확인할 수 있습니다. Azure Cloud Shell에서 다음 스크립트를 실행합니다.

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    
  6. 이제 두 명령 프롬프트 창을 모두 닫고 Microsoft Learn 브라우저 창을 최대화할 수 있습니다.

이 연습에서는 자동 장애 조치 그룹을 배포하고 구성하는 방법을 배웠고 애플리케이션 관점에서의 의미도 알아봤습니다. 자동 장애 조치 그룹은 Azure SQL에서 가용성을 높이고 읽기 확장을 향상하기 위한 하나의 방법입니다.