Configurare criteri flessibili per il failover automatico di un gruppo di disponibilità Always On

Si applica a:SQL Server su Windows

In questo argomento verrà descritto come configurare i criteri di failover flessibili per un gruppo di disponibilità AlwaysOn tramite Transact-SQL o PowerShell in SQL Server. Con i criteri di failover flessibili viene garantito un controllo granulare delle condizioni che causano un failover automatico per un gruppo di disponibilità. Modificando le condizioni di guasto che attivano un failover automatico e la frequenza dei controlli di integrità, è possibile aumentare o diminuire la probabilità di un failover automatico per soddisfare il tuo SLA per l'alta disponibilità.

Il criterio di failover flessibile di un gruppo di disponibilità è definito dal livello delle condizioni di errore e dalla soglia di timeout del controllo di integrità. Quando viene rilevato che un gruppo di disponibilità ha superato il livello della condizione di errore o la soglia di timeout del controllo integrità, la DLL della risorsa del gruppo di disponibilità invia una risposta al cluster WSFC (Windows Server Failover Clustering). Il cluster WSFC avvia quindi un failover automatico alla replica secondaria.

Nota

Non è possibile configurare i criteri di failover flessibili di un gruppo di disponibilità tramite SQL Server Management Studio.

Limitazioni sui failover automatici

  • Affinché si verifichi un failover automatico, la replica primaria corrente e una replica secondaria devono essere configurate per la modalità di disponibilità con commit sincrono e failover automatico e la replica secondaria deve essere sincronizzata con quella primaria.

  • SQL Server 2019 (15.x) ha aumentato il numero massimo di repliche sincrone a 5, rispetto a 3 in SQL Server 2017 (14.x). È possibile configurare questo gruppo di cinque repliche per il failover automatico all'interno del gruppo. Sono presenti una replica primaria e 4 repliche secondarie sincrone.

  • Se un gruppo di disponibilità supera la soglia di errore del WSFC, il cluster WSFC non tenterà un failover automatico per il gruppo di disponibilità. Inoltre, il gruppo di risorse WSFC del gruppo di disponibilità rimarrà in uno stato di errore finché l'amministratore del cluster non porterà manualmente online il gruppo di risorse con errori o l'amministratore del database non eseguirà un failover manuale del gruppo di disponibilità. La soglia di errore WSFC è definita come il numero massimo di errori supportati per il gruppo di disponibilità durante un determinato periodo di tempo. Il periodo di tempo predefinito è sei ore e il valore predefinito per il numero massimo di errori durante questo periodo è n-1, dove n è il numero di nodi WSFC. Per modificare i valori della soglia di errore per un determinato gruppo di disponibilità, utilizzare la console Gestione cluster di failover di WSFC.

Prerequisiti

  • È necessario essere connessi all'istanza del server che ospita la replica primaria.

Autorizzazioni

Attività Autorizzazioni
Per configurare i criteri di failover flessibili per un nuovo gruppo di disponibilità Richiede l'appartenenza al ruolo predefinito del server sysadmin e una delle seguenti autorizzazioni: CREATE AVAILABILITY GROUP a livello di server, ALTER ANY AVAILABILITY GROUP o CONTROL SERVER.
Per modificare i criteri di un gruppo di disponibilità esistente È richiesta ALTER AVAILABILITY GROUP l'autorizzazione per il gruppo di disponibilità, l'autorizzazione CONTROL AVAILABILITY GROUP , l'autorizzazione ALTER ANY AVAILABILITY GROUP o l'autorizzazione CONTROL SERVER.

Soglia di timeout del controllo di integrità

La DLL risorse di WSFC del gruppo di disponibilità esegue un controllo di integrità della replica primaria chiamando la stored procedure sp_server_diagnostics sull'istanza di SQL Server che ospita la replica primaria. sp_server_diagnostics restituisce risultati a un intervallo pari a 1/3 della soglia di timeout del controllo di integrità per il gruppo di disponibilità. La soglia di timeout controllo integrità predefinita è 30 secondi, in base alla quale i risultati di sp_server_diagnostics vengono restituiti a intervalli di 10 secondi. Se la stored procedure sp_server_diagnostics è lenta o non restituisce informazioni, la DLL di risorsa attenderà l'intero intervallo della soglia di timeout del controllo di integrità prima di stabilire che la replica primaria non risponde. Se la replica primaria non risponde, viene avviato un failover automatico, se tale funzionalità è attualmente supportata.

Importante

sp_server_diagnostics non esegue controlli di integrità a livello di database.

Livello della condizione di errore

Se i dati di diagnostica e le informazioni sullo stato di integrità restituiti da sp_server_diagnostics giustifichino un failover automatico dipende dal livello della condizione di errore del gruppo di disponibilità. Il livello di condizione di errore specifica quale condizione di errore attiverà un failover automatico. I livelli delle condizioni di errore sono 5 e vanno dal livello meno restrittivo (livello 1), al livello più restrittivo (livello 5). Un determinato livello comprende anche i livelli meno restrittivi. Il livello più restrittivo, il livello 5, include le quattro condizioni meno restrittive e così via.

Importante

I database danneggiati e quelli sospetti non vengono rilevati da alcun livello della condizione di errore. Pertanto, un database danneggiato o sospetto (che sia dovuto a un guasto hardware, a un danneggiamento dei dati o a un altro problema) non attiva mai un failover automatico.

Nella tabella seguente viene descritta la condizione di errore che corrisponde a ciascun livello.

Livello Condizione di errore Valore Transact-SQL Valore PowerShell
Uno In caso di server inaccessibile. Specifica che viene avviato un failover automatico quando si verifica una delle condizioni seguenti:

Indisponibilità del servizio SQL Server.

Il lease del gruppo di disponibilità per la connessione al cluster WSFC è scaduto perché non viene ricevuto alcun ACK dall'istanza del server. Per altre informazioni, vedere Come funziona: timeout del lease di SQL Server Always On.



Si tratta del livello meno restrittivo.
1 OnServerDown
Due In caso di mancata risposta del server. Specifica che viene avviato un failover automatico quando si verifica una delle condizioni seguenti:

L'istanza di SQL Server non si connette al cluster e viene superata la soglia di timeout del controllo di integrità del gruppo di disponibilità specificata dall'utente.

La replica di disponibilità è in stato di errore.
2 OnServerUnresponsive
3 In caso di errori critici del server. Specifica che un failover automatico viene avviato in presenza di errori interni critici di SQL Server, ad esempio spinlock orfani, gravi violazioni dell'accesso in scrittura o troppi dump della memoria generati in un breve lasso di tempo.

Si tratta del livello predefinito del .
3 OnCriticalServerError
4 In caso di errore moderato del server. Specifica che viene avviato un failover automatico in caso di errori interni di SQL Server con gravità moderata, ad esempio una condizione persistente di memoria insufficiente nel pool di risorse interno di SQL Server. 4 OnModerateServerError
Cinque In presenza di qualsiasi condizione di errore qualificata. Specifica che viene avviato un failover automatico in caso di qualsiasi condizione di errore qualificata, tra cui:

Rilevamento di un deadlock nell'utilità di pianificazione.

Rilevamento di un deadlock irrisolvibile.



Si tratta del livello più restrittivo.
5 CondizioniQualificateDiFallimento

Nota

La mancata risposta da parte di un'istanza di SQL Server alle richieste client non è rilevante per gruppi di disponibilità.

Utilizzo di Transact-SQL

Per configurare i criteri di failover flessibili

  1. Connettersi all'istanza del server che ospita la replica primaria.

  2. Per un nuovo gruppo di disponibilità, usare l'istruzione CREATE AVAILABILITY GROUPTransact-SQL. Se si modifica un gruppo di disponibilità esistente, usare l'istruzione ALTER AVAILABILITY GROUPTransact-SQL.

    • Per impostare il livello di condizione del failover, usare l'opzione FAILURE_CONDITION_LEVEL = n dove n è un numero intero da 1 a 5.

      Ad esempio, l'istruzione Transact-SQL seguente modifica il livello di condizione di errore di un gruppo di disponibilità esistente, AG1, nel livello uno:

      
      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);  
      

      La relazione di questi valori interi con i livelli di condizione di errore è la seguente:

      Valore Transact-SQL Livello Quando viene avviato il failover automatico...
      1 Uno In caso di server inaccessibile. Il servizio SQL Server viene arrestato a causa di un failover o un riavvio.
      2 Due In caso di mancata risposta del server. È soddisfatta una qualsiasi condizione di valore inferiore, il servizio SQL Server è connesso al cluster e viene superata la soglia di timeout del controllo di integrità, oppure la replica primaria corrente si trova in stato di errore.
      3 3 In caso di errori critici del server. Viene soddisfatta qualsiasi condizione di valore inferiore o si verifica un errore critico interno del server.

      Si tratta del livello predefinito del .
      4 4 In caso di errore moderato del server. Viene soddisfatta qualsiasi condizione di valore inferiore o si verifica un errore non critico del server.
      5 Cinque In presenza di qualsiasi condizione di errore qualificata. È soddisfatta qualsiasi condizione di livello inferiore oppure si verifica una condizione di errore qualificante.

      Per ulteriori informazioni sui livelli delle condizioni di failover, vedere Criterio di failover flessibile per il failover automatico di un gruppo di disponibilità (SQL Server).

    • Per configurare la soglia di Timeout controllo integrità, usare l'opzione HEALTH_CHECK_TIMEOUT = n dove n è un numero intero compreso tra 15000 millisecondi (15 secondi) e 4294967295 millisecondi. Il valore predefinito è 30000 millisecondi (30 secondi)

      Ad esempio, l'istruzione Transact-SQL seguente modifica la soglia di timeout del controllo di integrità di un gruppo di disponibilità esistente, AG1, portandola a 60.000 millisecondi (un minuto).

      
      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

Uso di PowerShell

Per configurare i criteri di failover flessibili

  1. Impostare il valore predefinito (cd) sull'istanza del server che ospita la replica primaria.

  2. Quando si aggiunge una replica di disponibilità a un gruppo di disponibilità, usare il cmdlet New-SqlAvailabilityGroup . Quando si modifica una replica di disponibilità esistente, usare il cmdlet Set-SqlAvailabilityGroup .

    • Per impostare il livello delle condizioni di failover, usare il parametro FailureConditionLevellevel , dove level è uno dei valori seguenti:

      Valore Livello Quando viene avviato il failover automatico...
      OnServerDown Uno In caso di server inaccessibile. Il servizio SQL Server viene arrestato a causa di un failover o un riavvio.
      OnServerUnresponsive Due In caso di mancata risposta del server. È soddisfatta una qualsiasi condizione di valore inferiore, il servizio SQL Server è connesso al cluster e viene superata la soglia di timeout del controllo di integrità, oppure la replica primaria corrente si trova in stato di errore.
      OnCriticalServerError 3 In caso di errori critici del server. Viene soddisfatta qualsiasi condizione di valore inferiore o si verifica un errore critico interno del server.

      Si tratta del livello predefinito del .
      OnModerateServerError 4 In caso di errore moderato del server. Viene soddisfatta qualsiasi condizione di valore inferiore o si verifica un errore non critico del server.
      CondizioniQualificateDiFallimento Cinque In presenza di qualsiasi condizione di errore qualificata. È soddisfatta una qualsiasi condizione di valore inferiore oppure si verifica una condizione di errore qualificante.

      Per altre informazioni sui livelli delle condizioni di failover, vedere Criterio di failover flessibile per il failover automatico di un gruppo di disponibilità (SQL Server).

      Ad esempio, il comando seguente modifica il livello di condizione di errore di un gruppo di disponibilità esistente, AG1, nel livello uno:

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg `   
      -FailureConditionLevel OnServerDown  
      
    • Per impostare la soglia di Timeout controllo integrità, usare il parametro HealthCheckTimeoutn , dove n è un intero compreso tra 15000 millisecondi (15 secondi) e 4294967295 millisecondi. Il valore predefinito è 30000 millisecondi (30 secondi).

      Ad esempio, il comando seguente modifica la soglia del timeout del controllo di integrità di un gruppo di disponibilità esistente, AG1, impostandola su 120.000 millisecondi (due minuti).

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAG `   
      -HealthCheckTimeout 120000  
      

Nota

Per visualizzare la sintassi di un cmdlet, usare il cmdlet Get-Help nell'ambiente SQL Server PowerShell. Per altre informazioni, vedere Get Help SQL Server PowerShell.

Per impostare e utilizzare il provider PowerShell per SQL Server

Attività correlate

Per configurare il failover automatico

Contenuto correlato

Vedi anche

Panoramica di Gruppi di disponibilità AlwaysOn (SQL Server)
Modalità di disponibilità (gruppi di disponibilità Always On)
Failover e modalità di failover (Gruppi di disponibilità Always On)
WSFC (Windows Server Failover Clustering) con SQL Server
Criteri di failover per istanze del cluster di failover
sp_server_diagnostics (Transact-SQL)