Exercício – Grupos de failover automático distribuídos geograficamente com escala de leitura

Concluído

Você aprendeu sobre a replicação geográfica e os grupos de failover automático na unidade anterior. Neste exercício, você vai configurar grupos de failover automático para seu banco de dados SQL do Azure. Em seguida, você iniciará um failover e exibirá os resultados.

Grupos de failover automático no SQL do Azure

Para configurar grupos de failover automático para um ou mais bancos de dados e exibir os resultados, você precisa concluir estas etapas:

  1. Configurar o ambiente.
  2. Criar um servidor do Banco de Dados SQL do Azure vazio na região de failover.
  3. Criar um grupo de failover entre os servidores.
  4. Configurar a rede.
  5. Adicionar um ou mais bancos de dados ao grupo de failover.
  6. Configurar seus aplicativos de prompt de comando.
  7. Compreender os aplicativos em execução.
  8. Iniciar um failover.
  9. Fazer failback.

Esse exercício vai orientar você ao longo da configuração de grupos de failover automático para seu banco de dados AdventureWorks. Em seguida, você usará um aplicativo de linha de comando simples para entender em que local ocorrem leituras e gravações e a importância da lógica de repetição em seus aplicativos. Por fim, você fará um exercício divertido para determinar quantas réplicas de leitura estão associadas a um banco de dados Comercialmente Crítico que também tem um grupo de failover automático.

Configurar o ambiente

  1. Copie o código a seguir no bloco de notas ou em outro editor de texto. Forneça suas informações. Adicione sua senha de autenticação do SQL. Para $drLocation, forneça a região em que deseja que o grupo de failover fique. Idealmente, escolha uma região associada à região do seu servidor atual. Você pode verificar a lista de regiões emparelhadas. Como requisito mínimo, ela não pode ser a região em que o banco de dados original está. Por fim, adicione o endereço IP do computador local. Se você precisar determinar o endereço IP, abra o PowerShell no computador local e execute (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content.

    # Add your info
    $password = "password"
    $drLocation = "westus2"
    $ipAddress = "xx.xx.xx.xx"
    
  2. Execute o comando atualizado no Azure Cloud Shell (no lado direito desta página).

  3. Execute este script no Azure Cloud Shell para configurar suas variáveis para as etapas a seguir:

    $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. Crie um servidor do Banco de Dados SQL do Azure vazio na região de failover executando este script no Azure Cloud Shell:

    # 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. Crie um grupo de failover entre os servidores executando este script no 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. Configure a rede executando este script no 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;
    

    Para a finalidade de ilustrar grupos de failover automático, essa configuração de rede é suficiente. É um pouco diferente do que você faria em um ambiente corporativo. Em um ambiente corporativo, o computador que precisa de acesso provavelmente será um conjunto de recursos que compõe algum tipo de aplicativo. Se o banco de dados fizer failover, talvez você também queira fazer failover de seu aplicativo, VMs ou outros recursos para a nova região. Os dois conjuntos de recursos precisarão acessar os recursos, servidores e bancos de dados na outra região. Para fazer isso, você pode usar o emparelhamento de rede virtual, a rede virtual para conexões de rede virtual ou, potencialmente, outra coisa (como o Azure ExpressRoute). Isso depende do seu cenário.

  7. Adicione um ou mais bancos de dados ao grupo de failover executando este script no 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"
    

    Levará algum tempo para que esse script seja executado. Você está restaurando o banco de dados na outra região, o que envolve a cópia da região original para a região de recuperação de desastres. Você pode trabalhar nas etapas na próxima seção e, em seguida, verificar novamente se esse script foi concluído.

Agora você implantou e configurou um grupo de failover automático para o banco de dados da AdventureWorks.

Configurar seus aplicativos de prompt de comando

Nesta seção, você usará duas cargas de trabalho ostress para verificar a Updateability (se um banco de dados está em um estado de ReadWrite ou ReadOnly) dos servidores primários e secundários em seu grupo de failover. O objetivo desse cenário é simular um aplicativo para o qual você tem cargas de trabalho de leitura e gravação.

  1. Abra duas janelas de Prompt de Comando separadas. Configure as janelas para que você possa ver esta janela (o navegador) e ambas as janelas de Prompt de Comando.

  2. Em ambas as janelas de Prompt de Comando, vá para a pasta de disponibilidade como você fez nos exercícios anteriores. Por exemplo, você pode usar este comando:

    cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
    
  3. Você usará a primeira janela do prompt de comando para verificar o status do seu servidor primário no grupo de failover que você criou. Execute este comando usando o nome do servidor e a senha:

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

    Observação

    Com os grupos de failover automático, você se conecta ao nome do grupo de failover, que é a abstração do banco de dados.

  4. Você usará a segunda janela do prompt de comando para verificar o status do seu servidor secundário no grupo de failover que você criou. Execute este comando usando o nome do servidor e a senha:

    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
    

O resultado do primeiro comando deve ser READ_WRITE porque verifica o servidor do grupo de failover primário e você não iniciou nenhum failover.

O resultado do segundo comando deve ser READ_ONLY porque verifica a recuperação de desastres ou o servidor secundário que você configurou. Você só deve ser capaz de gravar de um dos servidores em qualquer determinado momento.

Nas próximas etapas, você verá o que acontece com ambos os servidores quando ocorrer um failover.

Iniciar um failover e exibir os resultados

  1. Use o terminal do Azure Cloud Shell no lado direito dessa página para verificar o status do servidor secundário:

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

    O resultado informa se o servidor secundário no grupo de failover automático está sendo usado como o banco de dados primário ou secundário.

  2. Agora você pode ver o que acontece quando ocorre um failover. Inicie um failover manual inserindo estes comandos do Azure PowerShell no terminal do Azure Cloud Shell:

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

    Quando o failover ocorrer, você talvez perceba que as conexões são removidas por um momento, mas devido ao fato de continuar retentando, o aplicativo não falha totalmente. Após a conclusão do failover, você deve observar que os resultados de READ_WRITE e READ_ONLY são retomados e não mudam.

    Um dos benefícios dos grupos de failover automático no Banco de Dados SQL do Azure e da Instância Gerenciada de SQL do Azure é que você não precisa atualizar as cadeias de conexão após um failover. Você continua a se conectar ao primário (<failover-group>.database.windows.net) para cargas de trabalho de gravação e ao secundário (<failover-group>.secondary.database.windows.net) para cargas de trabalho de leitura. O Azure faz o roteamento para o banco de dados apropriado na região/servidor correspondente.

  3. Verifique o status do servidor secundário executando este script no Azure Cloud Shell:

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

    Agora, esse servidor deve estar na função primária.

  4. Faça failback executando este script no Azure Cloud Shell:

    Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
     -ServerName $server -FailoverGroupName $failoverGroup
    
  5. Por fim, você pode verificar o status do servidor secundário mais uma vez. Execute este script no Azure Cloud Shell:

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    
  6. Agora você pode fechar ambas as janelas de Prompt de Comando e maximizar a janela do navegador do Microsoft Learn.

Neste exercício, você aprendeu a implantar e configurar grupos de failover automático. Você também aprendeu o que isso significa de uma perspectiva de aplicativo. Os grupos de failover automático são apenas um modo de continuar com a disponibilidade e a escala de leitura no SQL do Azure.