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

Si applica a: SQL Server - Solo 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 errore che attivano un failover automatico e la frequenza di controlli di integrità, è possibile aumentare o diminuire la probabilità di un failover automatico per supportare il Contratto di servizio per la disponibilità elevata.

I criteri di failover flessibili di un gruppo di disponibilità vengono definiti in base al relativo livello delle condizioni di errore e alla soglia di Timeout controllo integrità. Quando viene rilevato che un gruppo di disponibilità ha superato il livello di condizione di errore o la soglia di Timeout controllo integrità, la DLL risorse del gruppo di disponibilità risponde al cluster WSFC (Windows Server Failover Clustering). Tramite il cluster WSFC viene quindi iniziato 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 relativa soglia di errore WSFC, non verrà effettuato il tentativo di failover automatico per il gruppo di disponibilità da parte del cluster WSFC. 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 soglia dell'errore per un determinato gruppo di disponibilità, utilizzare la console di Gestione cluster di failover 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à Sono necessarie l'appartenenza al ruolo predefinito del server sysadmin e l'autorizzazione server CREATE AVAILABILITY GROUP oppure l'autorizzazione ALTER ANY AVAILABILITY GROUP o CONTROL SERVER.
Per modificare i criteri di un gruppo di disponibilità esistente Sono necessarie l'autorizzazione ALTER AVAILABILITY GROUP nel gruppo di disponibilità, l'autorizzazione CONTROL AVAILABILITY GROUP permission, l'autorizzazione ALTER ANY AVAILABILITY GROUP o l'autorizzazione CONTROL SERVER.

Soglia di Timeout controllo 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 i risultati in un intervallo uguale a 1/3 della soglia di timeout controllo 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 risulta lenta o non restituisce informazioni, la DLL risorse attenderà per l'intero intervallo della soglia di timeout controllo integrità prima di determinare che la replica primaria non risponde. Se la replica primaria non risponde, viene avviato un failover automatico, se è attualmente supportato.

Importante

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

Livello delle condizioni di errore

La possibilità che i dati di diagnostica e le informazioni sull'integrità restituiti da sp_server_diagnostics assicurino un failover automatico dipende dal livello di 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 dato livello di condizione include tutti 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, di un database danneggiato o sospetto, per un errore hardware, un danneggiamento dati o per altro problema, non viene mai attivato 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 scade poiché non viene ricevuto alcun acknowledgement dall'istanza del server. Per altre informazioni, vedere Funzionamento: timeout 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 del timeout di controllo integrità specificata dall'utente del gruppo di disponibilità.

La replica di disponibilità si trova in uno stato di errore.
2 OnServerUnresponsive
3 In caso di errori critici del server. Specifica che viene avviato un failover automatico in caso di errori interni di SQL Server critici, ad esempio spinlock orfani, gravi violazioni dell'accesso in scrittura o dumping eccessivi della memoria in un breve periodo di tempo.

Si tratta del livello predefinito del .
3 OnCriticalServerError
4 In caso di errori con gravità moderata 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 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 OnAnyQualifiedFailureConditions

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 Transact-SQL CREATE AVAILABILITY GROUP. Se si modifica un gruppo di disponibilità esistente, usare l'istruzione Transact-SQL ALTER AVAILABILITY GROUP.

    • 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 Il failover automatico viene avviato...
      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. Viene soddisfatta qualsiasi condizione di valore inferiore, il servizio SQL Server è connesso al cluster e viene superata la soglia di Timeout controllo integrità o la replica primaria corrente si trova in uno 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 errori con gravità moderata del server. Viene soddisfatta qualsiasi condizione di valore inferiore o si verifica un errore non critico del server.
      5 Cinque In qualsiasi condizione di errore qualificata. Viene soddisfatta qualsiasi condizione di valore inferiore o si verifica una condizione di errore appropriata.

      Per altre informazioni sui livelli di condizione del failover, vedere Criteri di failover flessibili per 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 modificata la soglia di Timeout controllo integrità di un gruppo di disponibilità esistente, AG1, in 60.000 millisecondi (un minuto).

      
      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

Con 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 Il failover automatico viene avviato...
      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. Viene soddisfatta qualsiasi condizione di valore inferiore, il servizio SQL Server è connesso al cluster e viene superata la soglia di Timeout controllo integrità o la replica primaria corrente si trova in uno 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 errori con gravità moderata del server. Viene soddisfatta qualsiasi condizione di valore inferiore o si verifica un errore non critico del server.
      OnAnyQualifiedFailureConditions Cinque In qualsiasi condizione di errore qualificata. Viene soddisfatta qualsiasi condizione di valore inferiore o si verifica una condizione di errore appropriata.

      Per altre informazioni sui livelli di condizione del failover, vedere Criteri di failover flessibili per 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 di Timeout controllo integrità di un gruppo di disponibilità esistente, AG1, in 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

To configure automatic failover

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)