Configurar uma política de failover automático flexível para um grupo de disponibilidade Always On

Aplica-se a:SQL Server – Somente Windows

Este tópico descreve como configurar a política de failover flexível para um grupo de disponibilidade Always On usando o Transact-SQL ou o PowerShell no SQL Server. Uma política de failover flexível fornece um controle granular das condições que causam um failover automático de um grupo de disponibilidade. Ao alterar as condições de falha que disparam um failover automático e a frequência de verificações de integridade, você pode aumentar ou diminuir a probabilidade de um failover automático para oferecer suporte ao seu SLA para alta disponibilidade.

A política de failover flexível de um grupo de disponibilidade é definida por seu nível da condição de falha e pelo limite de tempo limite da verificação de integridade. Ao detectar que um grupo de disponibilidade excedeu seu nível de condição de falha ou seu limite de tempo limite da verificação de integridade, a DLL de recurso do grupo de disponibilidade responde ao cluster WSFC (Windows Server Failover Clustering). O cluster WSFC inicia um failover automático para a réplica secundária.

Observação

A política de failover flexível de um grupo de disponibilidade não pode ser configurada usando o SQL Server Management Studio.

Limitações sobre failovers automáticos

  • Para que um failover automático ocorra, a réplica primária e uma réplica secundária deverão ser configuradas para o modo de disponibilidade de confirmação síncrona com failover automático e a réplica secundária deverá ser sincronizada com a réplica primária.

  • O SQL Server 2019 (15.x) aumentou o número máximo de réplicas síncronas para 5, um aumento com relação às 3 no SQL Server 2017 (14.x). Você pode configurar esse grupo de cinco réplicas para ter failover automático dentro do grupo. Há uma réplica primária, além de quatro réplicas secundárias síncronas.

  • Se um grupo de disponibilidade exceder seu limite de falha do WSFC, o cluster do WSFC não tentará um failover automático para o grupo de disponibilidade. Além disso, o grupo de recursos do WSFC do grupo de disponibilidade permanece em um estado com falha até o administrador de cluster manualmente colocar online o grupo de recursos com falha ou o administrador de banco de dados executar um failover manual do grupo de disponibilidade. O limite de falha do WSFC é definido como o número máximo de falhas com suporte para o grupo de disponibilidade durante um determinado período de tempo. O período padrão é de seis horas e o valor padrão para o número máximo de falhas durante este período é n-1, em que n é o número de nós do WSFC. Para alterar os valores do limite de failover para um determinado grupo de disponibilidade, use o Console de Gerenciador de Failover WSFC.

Pré-requisitos

  • Você deve estar conectado à instância do servidor que hospeda a réplica primária.

Permissões

Tarefa Permissões
Para configurar a política de failover flexível para um novo grupo de disponibilidade Requer a associação na função de servidor fixa sysadmin e a permissão de servidor CREATE AVAILABILITY GROUP, a permissão ALTER ANY AVAILABILITY GROUP ou a permissão CONTROL SERVER.
Para modificar a política de um grupo de disponibilidade existente Requer a permissão ALTER AVAILABILITY GROUP no grupo de disponibilidade, a permissão CONTROL AVAILABILITY GROUP, a permissão ALTER ANY AVAILABILITY GROUP ou a permissão CONTROL SERVER.

Limite do tempo limite da verificação de integridade

A DLL de recurso do WSFC do grupo de disponibilidade executa uma verificação de integridade da réplica primária, chamando o procedimento armazenado sp_server_diagnostics na instância do SQL Server que hospeda a réplica primária. sp_server_diagnostics retorna resultados em um intervalo 1/3 em relação ao limite do tempo limite da verificação de integridade para o grupo de disponibilidade. O limite do tempo limite da verificação de integridade padrão é de 30 segundos, levando sp_server_diagnostics a retornar em um intervalo de 10 segundos. Se sp_server_diagnostics for lento ou não estiver retornando informações, a DLL de recurso aguardará o intervalo completo do limite de tempo limite da verificação de integridade antes de determinar que a réplica primária não está respondendo. Se a réplica primária não estiver respondendo, um failover automático será iniciado, se tiver suporte no momento.

Importante

sp_server_diagnostics não realiza verificações de integridade no nível de banco de dados.

Nível da condição de falha

O nível da condição de falha do grupo de disponibilidade determina se os dados de diagnóstico e as informações de integridade retornadas por sp_server_diagnostics garantem um failover automático. O nível de condição de falha especifica as condições de falha que disparam um failover automático. Há cinco níveis da condição de falha que variam do menos restritivo (nível 1) até o mais restritivo (nível 5). Um nível específico abrange todos os níveis menos restritivos. Portanto, o nível mais rígido, cinco, inclui os quatro níveis de condições menos restritivos e assim por diante.

Importante

Bancos de dados danificados e bancos de dados suspeitos não são detectados por nenhum nível de condição de falha. Portanto, um banco de dados que esteja danificado ou suspeito (seja devido a um problema de hardware, corrupção de dados ou outro problema) nunca dispara um failover automático.

A tabela a seguir descreve a condição de falha que corresponde a cada nível.

Nível Condição de falha Valor do Transact-SQL Valor de PowerShell
Um Em servidor inativo. Especifica que um failover automático é iniciado quando uma destas condições ocorre:

O serviço SQL Server está inativo.

A concessão do grupo de disponibilidade para conexão com o cluster WSFC expira porque nenhum ACK foi recebido da instância de servidor. Para obter mais informações, confira Como funciona: Tempo limite de concessão do Always On do SQL Server.



Este é o nível menos restritivo.
1 OnServerDown
Dois Em servidor sem resposta. Especifica que um failover automático é iniciado quando uma destas condições ocorre:

A instância do SQL Server não se conecta ao cluster e o limite de tempo limite especificado pelo usuário do grupo de disponibilidade é excedido.

A réplica de disponibilidade está em estado de falha.
2 OnServerUnresponsive
Três Em erros críticos do servidor. Especifica que um failover automático é iniciado em erros internos críticos do SQL Server, como spinlocks órfãos, graves violações de acesso de gravação ou muitos despejos de memória gerados em um curto período de tempo.

Este é o nível padrão.
3 OnCriticalServerError
Quatro Em erros moderados do servidor. Especifica que um failover automático é iniciado em caso de erros internos moderados do SQL Server , como uma condição de memória insuficiente persistente no pool de recursos interno do SQL Server . 4 OnModerateServerError
Cinco Em qualquer condição de falha qualificada. Especifica que um failover automático é iniciado em qualquer condição de falha qualificada, incluindo:

Detecção de deadlock do Agendador.

Detecção de um deadlock insolúvel.



Este é o nível mais restritivo.
5 OnAnyQualifiedFailureConditions

Observação

A falta de resposta de uma instância do SQL Server para solicitações do cliente é irrelevante para grupos de disponibilidade.

Usando o Transact-SQL

Para configurar a política de failover flexível

  1. Conecte-se à instância de servidor que hospeda a réplica primária.

  2. Para um novo grupo de disponibilidade, use a instrução do Transact-SQL CREATE AVAILABILITY GROUP. Se você estiver modificando um grupo de disponibilidade existente, use a instrução do Transact-SQL ALTER AVAILABILITY GROUP.

    • Para definir o nível de condição de failover, use a opção FAILURE_CONDITION_LEVEL = n , em que n é um número inteiro de 1 a 5.

      Por exemplo, a instrução Transact-SQL a seguir altera o nível da condição de falha de um grupo de disponibilidade existente, AG1, para o nível um:

      
      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);  
      

      A relação destes valores inteiros para os níveis de condição de falha é a seguinte:

      Valor do Transact-SQL Nível Automático é o failover iniciado em caso de...
      1 Um Em servidor inativo. O serviço SQL Server é interrompido devido a um failover ou a uma reinicialização.
      2 Dois Em servidor sem resposta. Qualquer condição de valor inferior é atendida, o serviço SQL Server está conectado ao cluster e o tempo limite de verificação de integridade é excedido, ou a réplica primária atual está em um estado de falha.
      3 Três Em erros críticos do servidor. Qualquer condição de valor inferior é atendida ou há um erro crítico de servidor interno.

      Este é o nível padrão.
      4 Quatro Em erros moderados do servidor. Qualquer condição de valor inferior é atendida ou há um erro moderado de servidor.
      5 Cinco Em qualquer condição de falha qualificada. Qualquer condição de valor inferior é atendida ou há uma condição de falha qualificada.

      Para obter mais informações sobre os níveis de condição de failover, consulte Política de failover flexível para failover automático de um grupo de disponibilidade (SQL Server).

    • Para configurar o tempo limite de verificação de integridade, use a opção HEALTH_CHECK_TIMEOUT = n , em que n é um número inteiro de 15000 milissegundos (15 segundos) a 4294967295 milissegundos. O valor padrão é 30000 milissegundos (30 segundos).

      Por exemplo, a instrução Transact-SQL a seguir altera o limite de tempo limite de verificação de integridade de um grupo de disponibilidade existente, AG1, para 60.000 milissegundos (um minuto).

      
      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

Usando o PowerShell

Para configurar a política de failover flexível

  1. Defina o padrão (cd) como a instância de servidor que hospeda a réplica primária.

  2. Ao adicionar uma réplica de disponibilidade a um grupo de disponibilidade, use o cmdlet New-SqlAvailabilityGroup . Ao modificar uma réplica de disponibilidade existente, use o cmdlet Set-SqlAvailabilityGroup .

    • Para definir o nível de condição de failover, use o parâmetro FailureConditionLevellevel , onde level é um dos seguintes valores:

      Valor Nível Automático é o failover iniciado em caso de...
      OnServerDown Um Em servidor inativo. O serviço SQL Server é interrompido devido a um failover ou a uma reinicialização.
      OnServerUnresponsive Dois Em servidor sem resposta. Qualquer condição de valor inferior é atendida, o serviço SQL Server está conectado ao cluster e o tempo limite de verificação de integridade é excedido, ou a réplica primária atual está em um estado de falha.
      OnCriticalServerError Três Em erros críticos do servidor. Qualquer condição de valor inferior é atendida ou há um erro crítico de servidor interno.

      Este é o nível padrão.
      OnModerateServerError Quatro Em erros moderados do servidor. Qualquer condição de valor inferior é atendida ou há um erro moderado de servidor.
      OnAnyQualifiedFailureConditions Cinco Em qualquer condição de falha qualificada. Qualquer condição de valor inferior é atendida ou há uma condição de falha qualificada.

      Para obter mais informações sobre os níveis de condição de failover, consulte Política de failover flexível para failover automático de um grupo de disponibilidade (SQL Server).

      Por exemplo, o comando a seguir altera o nível da condição de falha de um grupo de disponibilidade existente, AG1, para o nível um.

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg `   
      -FailureConditionLevel OnServerDown  
      
    • Para definir o tempo limite de verificação de integridade, use o parâmetro HealthCheckTimeoutn , em que n é um número inteiro de 15000 milissegundos (15 segundos) a 4294967295 milissegundos. O valor padrão é 30000 milissegundos (30 segundos).

      Por exemplo, o comando a seguir altera o tempo limite de verificação de integridade de um grupo de disponibilidade existente, AG1, para 120.000 milissegundos (dois minutos).

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

Observação

Para exibir a sintaxe de um cmdlet, use o cmdlet Get-Help no ambiente do SQL Server PowerShell. Para obter mais informações, consulte Get Help SQL Server PowerShell.

Para configurar e usar o provedor do SQL Server PowerShell

Related Tasks

To configure automatic failover

Conteúdo relacionado

Consulte Também

Visão geral dos Grupos de Disponibilidade AlwaysOn (SQL Server)
Modos de disponibilidade (grupos de disponibilidade AlwaysOn)
Failover e modos de failover (Grupos de Disponibilidade AlwaysOn)
WSFC (Windows Server Failover Clustering) com o SQL Server
Failover Policy for Failover Cluster Instances
sp_server_diagnostics (Transact-SQL)