Oefening: geografisch gedistribueerde groepen voor automatische failover met lezen-schalen

Voltooid

In de vorige les hebt u geleerd over geo-replicatie en groepen voor automatische failover. In deze oefening gaat u groepen voor automatische failover configureren voor uw Azure SQL-database. U initieert vervolgens een failover en bekijkt de resultaten.

Groepen voor automatische failover in Azure SQL

Om groepen voor automatische failover te configureren voor een of meer databases en de resultaten weer te geven, moet u deze stappen voltooien:

  1. Configureer de omgeving.
  2. Maak een lege Azure SQL Database-server in de failover-regio.
  3. Maak een failover-groep tussen de servers.
  4. Configureer het netwerk.
  5. Voeg een of meer databases toe aan de failover-groep.
  6. Configureer de opdrachtprompttoepassingen.
  7. Begrijp wat de toepassingen doen.
  8. Initieer een failover.
  9. Voer een failback uit.

In deze oefening wordt u begeleid bij het configureren van groepen voor automatische failover voor uw AdventureWorks-database. U gaat een eenvoudige opdrachtregeltoepassing gebruiken om te begrijpen waar lees-en schrijfbewerkingen plaatsvinden, evenals wat het belang is van logica voor opnieuw proberen in uw toepassingen. Ter afsluiting gaan we een oefening doen om te bepalen hoeveel leesreplica's er zijn gekoppeld aan een Bedrijfskritieke database die ook een groep voor automatische failover heeft.

De omgeving configureren

  1. Kopieer de volgende code naar Kladblok of een andere teksteditor. Geef uw gegevens op. Voeg uw wachtwoord voor SQL-verificatie toe. Geef voor $drLocation de gewenste regio op voor de failovergroep. Kies idealiter een regio die is gekoppeld aan de regio van uw huidige server. Hiervoor kunt u de lijst met gekoppelde regio's raadplegen. Een minimale vereiste is dat de regio niet dezelfde regio kan zijn waarin de oorspronkelijke database zich bevindt. Ten slotte voegt u het IP-adres van uw lokale computer toe. Als u het IP-adres moet bepalen, moet u PowerShell openen op de lokale computer en (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content uitvoeren.

    # Add your info
    $password = "password"
    $drLocation = "westus2"
    $ipAddress = "xx.xx.xx.xx"
    
  2. Voer de bijgewerkte opdracht uit in Azure Cloud Shell (aan de rechterkant van deze pagina).

  3. Voer dit script uit in Azure Cloud Shell om uw variabelen te configureren voor de volgende stappen:

    $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. Maak een lege Azure SQL Database-server in de failover-regio door dit script in Azure Cloud Shell uit te voeren:

    # 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. Maak een failovergroep tussen de servers door dit script uit te voeren in 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. Configureer het netwerk door dit script in Azure Cloud Shell uit te voeren:

    # 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;
    

    Om groepen voor automatische failover te demonstreren, is deze netwerkinstallatie afdoende. Dit wijkt enigszins af van wat u zou doen in een bedrijfsomgeving. In een bedrijfsomgeving is de computer die toegang nodig heeft, hoogstwaarschijnlijk een set resources die deel uitmaken van een bepaald type toepassing. Als er een failover voor uw database wordt uitgevoerd, wilt u misschien ook een failover naar de nieuwe regio uitvoeren voor uw toepassing, VM's of andere resources. Beide sets resources moeten toegang hebben tot de resources, servers en databases in de andere regio. Dit kunt u doen via peering van virtuele netwerken, verbindingen tussen virtuele netwerken of misschien nog iets anders (zoals Azure ExpressRoute). Dit hangt af van uw scenario.

  7. Voeg een of meer databases toe aan de failovergroep door dit script in Azure Cloud Shell uit te voeren:

    # 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"
    

    Het duurt even voordat dit script is uitgevoerd. U herstelt de database in de andere regio, waarbij u de gegevens van de oorspronkelijke regio naar de regio voor herstel na noodgeval kopieert. U kunt de stappen in de volgende sectie gebruiken en vervolgens opnieuw controleren of dit script is voltooid.

U hebt nu een groep voor automatische failover geïmplementeerd en geconfigureerd voor uw AdventureWorks-database.

De opdrachtprompttoepassingen configureren

In dit gedeelte gebruikt u twee ostress-workloads om de Updateability te controleren (of een database de status ReadWrite of ReadOnly heeft) van de primaire en secundaire servers in uw failovergroep. Dit scenario is bedoeld voor het simuleren van een toepassing met werkbelastingen voor lezen en schrijven.

  1. Open twee afzonderlijke opdrachtpromptvensters. Stel de vensters zo in dat u dit venster (de browser) en beide opdrachtpromptvensters kunt zien.

  2. In beide opdrachtpromptvensters gaat u naar de map Beschikbaarheid, zoals u ook in de vorige oefeningen hebt gedaan. U kunt bijvoorbeeld deze opdracht gebruiken:

    cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
    
  3. U gebruikt het eerste opdrachtpromptvenster om de status van de primaire server te controleren in de failovergroep die u hebt gemaakt. Voer deze opdracht uit en gebruik hiervoor uw servernaam en wachtwoord:

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

    Notitie

    Met groepen voor automatische failover maakt u verbinding met de naam van de failovergroep. Deze is de abstractie voor de database.

  4. U gebruikt het tweede opdrachtpromptvenster om de status van de secundaire server te controleren in de failovergroep die u hebt gemaakt. Voer deze opdracht uit en gebruik hiervoor uw servernaam en wachtwoord:

    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
    

Het resultaat van de eerste opdracht moet zijn READ_WRITE, omdat hiermee de primaire failovergroepserver wordt gecontroleerd en u geen failovers hebt gestart.

Het resultaat van de tweede opdracht moet zijn READ_ONLY, omdat hiermee het herstel na noodgevallen of de secundaire server wordt gecontroleerd die u hebt geconfigureerd. U moet op elk gewenst moment alleen kunnen schrijven vanaf een van de servers.

In de volgende stappen ziet u wat er gebeurt met beide servers wanneer er een failover optreedt.

Initieer vervolgens een failover en bekijk de resultaten

  1. Gebruik de Azure Cloud Shell-terminal aan de rechterkant van deze pagina om de status van de secundaire server te controleren:

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

    Uit het resultaat blijkt of de secundaire server in de groep voor automatische failover als de primaire of secundaire database wordt gebruikt.

  2. U ziet nu wat er gebeurt wanneer een failover plaatsvindt. Start een handmatige failover door deze Azure PowerShell-opdrachten in te voeren in de Azure Cloud Shell-terminal:

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

    Wanneer de failover optreedt, merkt u mogelijk dat de verbindingen even worden verbroken, maar omdat de app steeds opnieuw probeert, mislukt de toepassing niet volledig. Nadat de failover is voltooid, ziet u dat de resultaten voor READ_WRITE en READ_ONLY worden hervat en dat ze niet veranderen.

    Een van de voordelen van groepen voor automatische failover in Azure SQL Database en Azure SQL Managed Instance is dat u de verbindingsreeksen niet hoeft bij te werken na een failover. U kunt verbinding blijven maken met de primaire server (<failover-group>.database.windows.net) voor schrijfworkloads en de secundaire server (<failover-group>.secondary.database.windows.net) voor leesworkloads. Azure zorgt voor routering naar de juiste database in de bijbehorende regio/server.

  3. Controleer de status van de secundaire server door dit script in Azure Cloud Shell uit te voeren:

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

    Deze server moet nu de primaire rol hebben.

  4. Voer een failback uit door dit script uit te voeren in Azure Cloud Shell:

    Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
     -ServerName $server -FailoverGroupName $failoverGroup
    
  5. Ten slotte kunt u de status van de secundaire server nogmaals controleren. Voer dit script uit in Azure Cloud Shell:

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    
  6. U kunt nu beide opdrachtpromptvensters sluiten en het Microsoft Learn-browservenster maximaliseren.

In deze oefening hebt u geleerd hoe u groepen voor automatische failover implementeert en configureert. U hebt ook geleerd wat dit inhoudt vanuit een toepassingsperspectief. Groepen voor automatische failover zijn slechts één van meerdere manieren om meer te doen met beschikbaarheid en leesschaal in Azure SQL.