Esercizio - Gruppi di failover automatici con distribuzione geografica e scalabilità in lettura
Nell'unità precedente sono stati illustrati la replica geografica e i gruppi di failover automatico. In questo esercizio verranno configurati i gruppi di failover automatico per il database SQL di Azure. Verrà quindi avviato un failover e si visualizzeranno i risultati.
Gruppi di failover automatico in Azure SQL
Per configurare i gruppi di failover automatico per uno o più database e visualizzare i risultati, è necessario completare i passaggi seguenti:
- Configurare l'ambiente.
- Creare un server di database SQL di Azure vuoto nell'area di failover.
- Creare un gruppo di failover tra i server.
- Configurare la rete.
- Aggiungere uno o più database al gruppo di failover.
- Configurare le applicazioni del prompt dei comandi.
- Ottenere informazioni sulle applicazioni in esecuzione.
- Avviare un failover.
- Eseguire il failback.
Questo esercizio illustra dettagliatamente la configurazione dei gruppi di failover automatico per il database AdventureWorks. Si userà quindi una semplice applicazione della riga di comando per comprendere dove si verificano le letture e le scritture e l'importanza della logica di ripetizione dei tentativi nelle applicazioni. Infine, si svolgerà un esercizio divertente per determinare il numero di repliche in lettura associate a un database business critical che dispone anche un gruppo di failover automatico.
Configurare l'ambiente
Copiare il codice seguente in Blocco note o in un altro editor di testo. Fornire le informazioni richieste. Aggiungere la password di autenticazione SQL. Per
$drLocation
specificare l'area in cui si vuole posizionare il gruppo di failover. Idealmente, scegliere un'area associata a quella del server corrente. È possibile fare riferimento all'elenco di aree associate. Come minimo, non scegliere la stessa area in cui si trova il database originale. Aggiungere infine l'indirizzo IP del computer locale. Se è necessario determinare l'indirizzo IP, aprire PowerShell nel computer locale ed eseguire(Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content
.# Add your info $password = "password" $drLocation = "westus2" $ipAddress = "xx.xx.xx.xx"
Eseguire il comando aggiornato in Azure Cloud Shell, a destra di questa pagina.
Eseguire questo script in Azure Cloud Shell per configurare le variabili per i passaggi seguenti:
$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"
Creare un server di database SQL di Azure vuoto nell'area di failover eseguendo questo script in 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"
Creare un gruppo di failover tra i server eseguendo questo script 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"
Configurare la rete eseguendo questo script in 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;
Per illustrare i gruppi di failover automatico, questa configurazione di rete è sufficiente. In un ambiente aziendale la configurazione sarà leggermente diversa. In un ambiente aziendale il computer per cui è necessario l'accesso sarà probabilmente un set di risorse che costituiscono un tipo di applicazione. In caso di failover del database, può essere necessario eseguire anche il failover dell'applicazione, delle macchine virtuali o di altre risorse nella nuova area. Entrambi i set di risorse dovranno accedere alle risorse, ai server e ai database nell'altra area. A tale scopo, è possibile usare il peering di reti virtuali, le connessioni da rete virtuale a rete virtuale o anche altri strumenti, ad esempio Azure ExpressRoute. Dipende dal proprio scenario.
Aggiungere al gruppo di failover uno o più database eseguendo questo script in 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"
L'esecuzione dello script richiede del tempo. Si sta ripristinando il database nell'altra area e questa operazione comporta la copia dei dati dall'area originale all'area di ripristino di emergenza. È possibile eseguire i passaggi nella sezione successiva e quindi verificare se lo script è stato completato.
Il gruppo di failover automatico per il database AdventureWorks è ora stato distribuito e configurato.
Configurare le applicazioni del prompt dei comandi
In questa sezione si useranno due carichi di lavoro di ostress per verificare la caratteristica Updateability
, ovvero se un database si trova nello stato ReadWrite
o ReadOnly
, dei server primari e secondari nel gruppo di failover. Questo scenario ha lo scopo di simulare un'applicazione per la quale sono presenti carichi di lavoro di lettura e scrittura.
Aprire due finestre del prompt dei comandi distinte. Configurare le finestre in modo che sia possibile visualizzare contemporaneamente questa finestra, ovvero il browser, ed entrambe le finestre del prompt dei comandi.
In entrambe le finestre del prompt dei comandi passare alla cartella Availability, come negli esercizi precedenti. Usare ad esempio questo comando:
cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
La prima finestra del prompt dei comandi verrà usata per controllare lo stato del server primario nel gruppo di failover creato. Eseguire questo comando, usando il nome del server e la password appropriati:
.\ostress.exe -S"<server-name>-fg.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -oprimary
Nota
Con i gruppi di failover automatico è possibile connettersi al nome del gruppo di failover, che è l'astrazione per il database.
La seconda finestra del prompt dei comandi verrà usata per controllare lo stato del server secondario nel gruppo di failover creato. Eseguire questo comando, usando il nome del server e la password appropriati:
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
Il risultato del primo comando sarà READ_WRITE
perché viene controllato il server del gruppo di failover primario e non è stato avviato alcun failover.
Il risultato del secondo comando sarà READ_ONLY
perché viene controllato il server di ripristino di emergenza o secondario configurato. Sarà possibile scrivere solo da uno dei server alla volta.
Nei passaggi successivi verrà illustrato cosa accade a entrambi i server quando si verifica un failover.
Avviare un failover e visualizzare i risultati
Usare il terminale di Azure Cloud Shell a destra di questa pagina per controllare lo stato del server secondario:
(Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup ` -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
Il risultato indica se il server secondario nel gruppo di failover automatico è in uso come database primario o secondario.
È ora possibile vedere cosa accade quando si verifica un failover. Avviare un failover manuale immettendo questi comandi di Azure PowerShell nel terminale di Azure Cloud Shell:
Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup ` -ServerName $drServer -FailoverGroupName $failoverGroup
Quando si verifica il failover, è possibile notare che le connessioni vengono eliminate per un momento, ma poiché l'app continua a riprovare, l'applicazione non si conclude del tutto con un esito negativo. Al termine del failover, saranno di nuovo presenti i risultati
READ_WRITE
eREAD_ONLY
, che non cambiano.Uno dei vantaggi dei gruppi di failover automatico nel database SQL di Azure e in Istanza gestita di SQL di Azure è che dopo un failover non è necessario aggiornare le stringhe di connessione. Si continua a connettersi al database primario (
<failover-group>.database.windows.net
) per i carichi di lavoro di scrittura e al database secondario (<failover-group>.secondary.database.windows.net
) per i carichi di lavoro di lettura. Azure esegue il routing al database appropriato nell'area e nel server corrispondente.Controllare lo stato del server secondario eseguendo questo script in Azure Cloud Shell:
(Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup ` -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
Il server avrà ora il ruolo primario.
Eseguire il failback tramite questo script in Azure Cloud Shell:
Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup ` -ServerName $server -FailoverGroupName $failoverGroup
Infine, è possibile controllare di nuovo lo stato del server secondario. Eseguire questo script in Azure Cloud Shell:
(Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup ` -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
È ora possibile chiudere entrambe le finestre del prompt dei comandi e ingrandire la finestra del browser di Microsoft Learn.
In questo esercizio si è appreso come distribuire e configurare i gruppi di failover automatico. Si è appreso anche cosa significa dal punto di vista di un'applicazione. I gruppi di failover automatico sono solo uno dei modi per usare altre opzioni di disponibilità e scalabilità in lettura in Azure SQL.