Delen via


Een flexibel beleid voor automatische failover configureren voor een AlwaysOn-beschikbaarheidsgroep

Van toepassing op:SQL Server - alleen Windows

In dit onderwerp wordt beschreven hoe u het flexibele failoverbeleid voor een AlwaysOn-beschikbaarheidsgroep configureert met behulp van Transact-SQL of PowerShell in SQL Server. Een flexibel failoverbeleid biedt gedetailleerde controle over de voorwaarden die automatische failover voor een beschikbaarheidsgroep veroorzaken. Door de foutvoorwaarden te wijzigen die een automatische failover en de frequentie van statuscontroles activeren, kunt u de kans op een automatische failover verhogen of verkleinen om uw SLA te ondersteunen voor hoge beschikbaarheid.

Het flexibele failoverbeleid van een beschikbaarheidsgroep wordt bepaald door het niveau van de faalvoorwaarde en de time-outdrempel voor de gezondheidscontrole. Bij het detecteren dat een beschikbaarheidsgroep zijn foutconditieniveau of zijn timeoutdrempel voor statuscontrole heeft overschreden, reageert de DLL van de beschikbaarheidsgroep op het WSFC-cluster (Windows Server Failover Clustering). Het WSFC-cluster initieert vervolgens een automatische failover naar de secundaire replica.

Opmerking

Het flexibele failoverbeleid van een beschikbaarheidsgroep kan niet worden geconfigureerd met behulp van SQL Server Management Studio.

Beperkingen voor automatische failovers

  • Voor een automatische failover moeten de huidige primaire replica en één secundaire replica worden geconfigureerd voor de beschikbaarheidsmodus 'synchronous-commit' met automatische failover, en moet de secundaire replica gesynchroniseerd zijn met de primaire replica.

  • SQL Server 2019 (15.x) heeft het maximum aantal synchrone replica's verhoogd naar 5, tot 3 in SQL Server 2017 (14.x). U kunt deze groep van vijf replica's configureren voor automatische failover binnen de groep. Er is één primaire replica, plus vier synchrone secundaire replica's.

  • Als een beschikbaarheidsgroep de WSFC-foutdrempel overschrijdt, probeert het WSFC-cluster geen automatische failover voor de beschikbaarheidsgroep uit te voeren. Bovendien blijft de WSFC-resourcegroep van de beschikbaarheidsgroep in een mislukte status totdat de clusterbeheerder de mislukte resourcegroep handmatig online brengt of de databasebeheerder een handmatige failover van de beschikbaarheidsgroep uitvoert. De WSFC-foutdrempel wordt gedefinieerd als het maximum aantal fouten dat gedurende een bepaalde periode wordt ondersteund voor de beschikbaarheidsgroep. De standaardperiode is zes uur en de standaardwaarde voor het maximum aantal fouten tijdens deze periode is n-1, waarbij n het aantal WSFC-knooppunten is. Als u de drempelwaarden voor fouten voor een bepaalde beschikbaarheidsgroep wilt wijzigen, gebruikt u de WSFC Failover Manager-console.

Vereiste voorwaarden

  • U moet verbonden zijn met de serverinstantie waarop de primaire replica gehost is.

Machtigingen

Opdracht Machtigingen
Het flexibele failoverbeleid voor een nieuwe beschikbaarheidsgroep configureren Vereist lidmaatschap van de sysadmin vaste serverfunctie en de servermachtiging CREATE AVAILABILITY GROUP, de machtiging ALTER ANY AVAILABILITY GROUP, of de machtiging CONTROL SERVER.
Het beleid van een bestaande beschikbaarheidsgroep wijzigen Hiervoor is de ALTER AVAILABILITY GROUP-machtiging vereist voor de beschikbaarheidsgroep, de CONTROL AVAILABILITY GROUP-machtiging, de ALTER ANY AVAILABILITY GROUP-machtiging of de CONTROL SERVER-machtiging.

Time-outdrempel voor Health-Check

WSFC-resource-DLL van de beschikbaarheidsgroep voert een statuscontrole van de primaire replica uit door de sp_server_diagnostics opgeslagen procedure aan te roepen op het exemplaar van SQL Server dat als host fungeert voor de primaire replica. sp_server_diagnostics retourneert resultaten met een interval dat gelijk is aan 1/3 van de time-outdrempel voor statuscontrole voor de beschikbaarheidsgroep. De standaard time-outdrempel voor statuscontrole is 30 seconden, waardoor sp_server_diagnostics wordt geretourneerd met een interval van 10 seconden. Als sp_server_diagnostics traag is of geen informatie retourneert, wacht de bron-DLL op het volledige interval van de time-outdrempel voor statuscontrole voordat wordt vastgesteld dat de primaire replica niet reageert. Als de primaire replica niet reageert, wordt er een automatische failover geïnitieerd als deze momenteel wordt ondersteund.

Belangrijk

sp_server_diagnostics voert geen statuscontroles uit op databaseniveau.

Failure-Condition niveau

Of de diagnostische gegevens en statusgegevens die door sp_server_diagnostics worden geretourneerd, een automatische failover rechtvaardigt, is afhankelijk van het niveau van de foutvoorwaarde van de beschikbaarheidsgroep. Het niveau van de foutvoorwaarde geeft aan welke foutvoorwaarden een automatische failover activeren. Er zijn vijf foutniveaus, die variëren van de minst restrictieve (niveau één) tot de meest restrictieve (niveau vijf). Een bepaald niveau omvat de minder beperkende niveaus. Het strengste niveau, vijf, omvat dus de vier minder beperkende voorwaarden, enzovoort.

Belangrijk

Beschadigde databases en verdachte databases worden door geen enkel foutvoorwaarde niveau gedetecteerd. Daarom zorgt een database die beschadigd of verdacht is, hetzij door een hardwarefout, gegevensbeschadiging of een ander probleem, nooit voor een automatische failover.

In de volgende tabel wordt de foutvoorwaarde beschreven die overeenkomt met elk niveau.

Niveau Foutvoorwaarde Transact-SQL Waarde PowerShell-waarde
Eén Op de server naar beneden. Hiermee geeft u op dat een automatische failover wordt gestart wanneer een van de volgende situaties plaatsvindt:

De SQL Server-service is niet beschikbaar.

De lease van de beschikbaarheidsgroep voor het maken van verbinding met het WSFC-cluster verloopt omdat er geen ACK van het serverexemplaren wordt ontvangen. Zie How It Works: SQL Server AlwaysOn Lease Timeoutvoor meer informatie.



Dit is het minst beperkende niveau.
1 OnServerDown
Twee De server reageert niet. Hiermee geeft u op dat een automatische failover wordt gestart wanneer een van de volgende situaties plaatsvindt:

Het exemplaar van SQL Server maakt geen verbinding met het cluster en de door de gebruiker opgegeven time-outdrempel voor statuscontrole van de beschikbaarheidsgroep wordt overschreden.

De beschikbaarheidsreplica heeft de status Mislukt.
2 OnServerUnresponsive
Drie Bij kritieke serverfout. Hiermee geeft u op dat een automatische failover wordt gestart op kritieke interne SQL Server-fouten, zoals zwevende spinlocks, ernstige schendingen van schrijftoegang of te veel geheugendumps die in een korte periode zijn gegenereerd.

Dit is het standaardniveau.
3 OnCriticalServerError
Vier Bij een gemiddelde serverfout. Hiermee geeft u op dat een automatische failover wordt gestart bij matige interne SQL Server-fouten, zoals een aanhoudende out-of-memory situatie in de interne resources-pool van SQL Server. 4 OnModerateServerError
Vijf Bij eventuele omstandigheden voor gekwalificeerde fouten. Hiermee wordt aangegeven dat een automatische failover wordt gestart bij elke gekwalificeerde storing, waaronder:

Detectie van de impasse van Scheduler.

Detectie van een onoplosbare impasse.



Dit is het meest beperkende niveau.
5 BijElkeGekwalificeerdeFaalvoorwaarden

Opmerking

Gebrek aan reactie door een exemplaar van SQL Server op clientaanvragen is niet relevant voor beschikbaarheidsgroepen.

Transact-SQL gebruiken

Het flexibele failoverbeleid configureren

  1. Maak verbinding met het serverexemplaar waarop de primaire replica wordt gehost.

  2. Gebruik de instructie CREATE AVAILABILITY GROUPTransact-SQL voor een nieuwe beschikbaarheidsgroep. Als u een bestaande beschikbaarheidsgroep wijzigt, gebruikt u de instructie ALTER AVAILABILITY GROUPTransact-SQL.

    • Als u het niveau van de failovervoorwaarde wilt instellen, gebruikt u de optie FAILURE_CONDITION_LEVEL = n , waarbij n een geheel getal is van 1 tot 5.

      Met de volgende Transact-SQL-instructie wordt bijvoorbeeld het storingvoorwaardenniveau van een bestaande beschikbaarheidsgroep gewijzigd naar niveau AG1:

      
      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);  
      

      De relatie tussen deze gehele getallen en de niveaus van foutvoorwaarden is als volgt:

      Transact-SQL Waarde Niveau Automatisch wordt een failover geïnitieerd wanneer...
      1 Eén Op de server naar beneden. De SQL Server-service stopt vanwege een failover of opnieuw opstarten.
      2 Twee De server reageert niet. Aan een voorwaarde met een lagere waarde wordt voldaan, de SQL Server-service is verbonden met het cluster en de time-outdrempel voor statuscontrole wordt overschreden of de huidige primaire replica heeft de status Mislukt.
      3 Drie Bij kritieke serverfout. Aan een voorwaarde met een lagere waarde wordt voldaan of er treedt een interne kritieke serverfout op.

      Dit is het standaardniveau.
      4 Vier Bij een gemiddelde serverfout. Aan een voorwaarde met een lagere waarde wordt voldaan of er treedt een gemiddelde serverfout op.
      5 Vijf Bij eventuele omstandigheden voor gekwalificeerde fouten. Aan een voorwaarde met een lagere waarde wordt voldaan of er treedt een in aanmerking komende foutvoorwaarde op.

      Zie voor meer informatie over de failoverconditieniveaus Flexibel failoverbeleid voor automatische failover van een beschikbaarheidsgroep (SQL Server).

    • Als u de time-outdrempel voor statuscontrole wilt configureren, gebruikt u de optie HEALTH_CHECK_TIMEOUT = n , waarbij n een geheel getal is van 15000 milliseconden (15 seconden) tot 4294967295 milliseconden. De standaardwaarde is 30000 milliseconden (30 seconden)

      Met de volgende Transact-SQL instructie wordt bijvoorbeeld de time-outdrempel voor statuscontrole van een bestaande beschikbaarheidsgroep gewijzigd in AG160.000 milliseconden (één minuut).

      
      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

PowerShell gebruiken

Het flexibele failoverbeleid configureren

  1. Stel de standaardinstelling (cd-) in op het serverexemplaren waarop de primaire replica wordt gehost.

  2. Wanneer u een beschikbaarheidsreplica toevoegt aan een beschikbaarheidsgroep, gebruikt u de cmdlet New-SqlAvailabilityGroup . Wanneer u een bestaande beschikbaarheidsreplica wijzigt, gebruikt u de cmdlet Set-SqlAvailabilityGroup .

    • Als u het niveau van de failovervoorwaarde wilt instellen, gebruikt u de parameter FailureConditionLevel-niveau, waarbij niveau een van de volgende waarden is:

      Waarde Niveau Automatisch wordt een failover geïnitieerd wanneer...
      OnServerDown Eén Op de server naar beneden. De SQL Server-service stopt vanwege een failover of opnieuw opstarten.
      OnServerUnresponsive Twee De server reageert niet. Aan een voorwaarde met een lagere waarde wordt voldaan, de SQL Server-service is verbonden met het cluster en de time-outdrempel voor statuscontrole wordt overschreden of de huidige primaire replica heeft de status Mislukt.
      OnCriticalServerError Drie Bij kritieke serverfout. Aan een voorwaarde met een lagere waarde wordt voldaan of er treedt een interne kritieke serverfout op.

      Dit is het standaardniveau.
      OnModerateServerError Vier Bij een gemiddelde serverfout. Aan een voorwaarde met een lagere waarde wordt voldaan of er treedt een gemiddelde serverfout op.
      BijElkeGekwalificeerdeFaalvoorwaarden Vijf Bij eventuele omstandigheden voor gekwalificeerde fouten. Aan een voorwaarde met een lagere waarde wordt voldaan of er treedt een in aanmerking komende foutvoorwaarde op.

      Zie voor meer informatie over de failoverconditieniveaus Flexibel failoverbeleid voor automatische failover van een beschikbaarheidsgroep (SQL Server).

      Met de volgende opdracht wordt bijvoorbeeld het niveau van de foutvoorwaarde van een bestaande beschikbaarheidsgroep gewijzigd in AG1niveau één.

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg `   
      -FailureConditionLevel OnServerDown  
      
    • Als u de time-outdrempel voor statuscontrole wilt instellen, gebruikt u de parameter HealthCheckTimeoutn , waarbij n een geheel getal is van 15000 milliseconden (15 seconden) tot 4294967295 milliseconden. De standaardwaarde is 30000 milliseconden (30 seconden).

      Met de volgende opdracht wordt bijvoorbeeld de time-outdrempel voor statuscontrole van een bestaande beschikbaarheidsgroep gewijzigd in AG1120.000 milliseconden (twee minuten).

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

Opmerking

Als u de syntaxis van een cmdlet wilt weergeven, gebruikt u de Get-Help--cmdlet in de SQL Server PowerShell-omgeving. Voor meer informatie, zie Get Help SQL Server PowerShell.

De SQL Server PowerShell-provider instellen en gebruiken

Gerelateerde taken

Het configureren van automatische failover

Verwante inhoud

Zie ook

overzicht van AlwaysOn-beschikbaarheidsgroepen (SQL Server)
Beschikbaarheidsmodi (Always On-beschikbaarheidsgroepen)
Failover en Failover-modi (Always On-beschikbaarheidsgroepen)
Windows Server Failover Clustering (WSFC) met SQL Server
Failoverbeleid voor exemplaren van failoverclusters
sp_server_diagnostics (Transact-SQL)