Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: SQL Server em 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 controle granular sobre as condições que causam failover automático para um grupo de disponibilidade. Ao alterar as condições de falha que acionam um failover automático e a frequência das verificações de integridade, você pode aumentar ou diminuir a probabilidade de um failover automático para dar suporte ao SLA para alta disponibilidade.
A política de failover flexível de um grupo de disponibilidade é definida por seu nível de condição de falha e limite de tempo limite de verificação de integridade. Ao detetar que um grupo de disponibilidade excedeu seu nível de condição de falha ou seu limite de tempo limite de verificação de integridade, a DLL de recursos do grupo de disponibilidade responde de volta ao cluster WSFC (Cluster de Failover do Windows Server). Em seguida, o cluster WSFC inicia um processo de 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 em falhas automáticas
Para que ocorra um failover automático, a réplica primária atual e uma réplica secundária devem ser configuradas para o modo de disponibilidade de confirmação síncrona com failover automático e a réplica secundária deve 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, contra 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 mais 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 WSFC do grupo de disponibilidade permanece em um estado de falha até que o administrador do cluster coloque manualmente o grupo de recursos com falha online ou o administrador do banco de dados execute um failover manual do grupo de disponibilidade. O limite de falha do WSFC é definido como o número máximo de falhas suportadas para o grupo de disponibilidade durante um determinado período de tempo. O período de tempo padrão é de seis horas, e o valor padrão para o número máximo de falhas durante esse período é n-1, onde n é o número de nós WSFC. Para alterar os valores de limite de falha para um determinado grupo de disponibilidade, use o Console do Gerenciador de Failover do 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 flexível de failover para um novo grupo de disponibilidade | Requer associação à função de servidor fixa sysadmin e uma das seguintes permissões: permissão de servidor CREATE AVAILABILITY GROUP, permissão ALTER ANY AVAILABILITY GROUP ou permissão CONTROL SERVER. |
| Para modificar a política de um grupo de disponibilidade existente | É necessário ter permissão ALTER AVAILABILITY GROUP no grupo de disponibilidade, permissão CONTROL AVAILABILITY GROUP, permissão ALTER ANY AVAILABILITY GROUP ou permissão CONTROL SERVER. |
Health-Check Limiar de Tempo de Espera
A DLL do recurso 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 a um intervalo igual a 1/3 do limite de tempo de comprovação de integridade para o grupo de disponibilidade. O limite de tempo limite padrão da verificação de integridade é de 30 segundos, o que faz com que sp_server_diagnostics retorne em um intervalo de 10 segundos. Se sp_server_diagnostics estiver lento ou não estiver retornando informações, a DLL do 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 houver suporte no momento.
Importante
sp_server_diagnostics não executa verificações de integridade no nível do banco de dados.
Nível Failure-Condition
Se os dados de diagnóstico e as informações de integridade retornados pelo sp_server_diagnostics indicam a necessidade de um failover automático, isso depende do nível de condição de falha do grupo de disponibilidade. O nível de condição de falha especifica quais condições de falha acionam um failover automático. Existem cinco níveis de condição de falha, que variam do menos restritivo (nível um) ao mais restritivo (nível cinco). Um determinado nível engloba os níveis menos restritivos. Assim, o nível mais rigoroso, cinco, inclui as quatro condições menos restritivas, e assim por diante.
Importante
Bancos de dados danificados e bancos de dados suspeitos não são detetados por nenhum nível de condição de falha. Portanto, um banco de dados danificado ou suspeito (seja devido a uma falha 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 Transact-SQL | Valor do PowerShell |
|---|---|---|---|
| Um | Servidor indisponível. Especifica que um failover automático é iniciado quando ocorre uma das seguintes situações: O serviço do SQL Server está inativo. A concessão do grupo de disponibilidade para conexão com o cluster WSFC expira porque nenhum ACK é recebido da instância do servidor. Para obter mais informações, consulte Como funciona: Tempo limite de concessão Always On do SQL Server. Este é o nível menos restritivo. |
1 | OnServerDown |
| Dois | Servidor não está respondendo. Especifica que um failover automático é iniciado quando ocorre uma das seguintes situações: A instância do SQL Server não se conecta ao cluster e o limite de tempo limite de verificação de integridade especificado pelo usuário do grupo de disponibilidade é excedido. A réplica de disponibilidade está em estado de falha. |
2 | OnServerUnresponsive |
| Três | Em erro crítico do servidor. Especifica que um failover automático é iniciado quando ocorrem erros internos críticos do SQL Server, como spinlocks órfãos, violações graves de acesso de escrita ou a geração de demasiados dumps de memória num curto período de tempo. Este é o nível padrão. |
3 | OnCriticalServerError |
| Quatro | Quando ocorrer um erro moderado no servidor. Especifica que um failover automático é iniciado em erros internos moderados do SQL Server, como uma condição persistente de falta de memória no pool de recursos internos do SQL Server. | 4 | OnModerateServerError |
| Cinco | Sob quaisquer condições qualificadas de falha. Especifica que um failover automático é iniciado em quaisquer condições qualificadas de falha, incluindo: Deteção de deadlock do Scheduler. Deteção de um impasse insolúvel. Este é o nível mais restritivo. |
5 | EmQualquerCondiçãoDeFalhaQualificada |
Observação
A falta de resposta de uma instância do SQL Server às solicitações do cliente é irrelevante para os grupos de disponibilidade.
Usando Transact-SQL
Para configurar a política de failover flexível
Conecte-se à instância do servidor que hospeda a réplica primária.
Para um novo grupo de disponibilidade, use a instrução Transact-SQL CREATE AVAILABILITY GROUP . Se estiver a modificar um grupo de disponibilidade existente, utilize a instrução ALTER AVAILABILITY GROUPTransact-SQL.
Para definir o nível de condição de failover, use a opção FAILURE_CONDITION_LEVEL = n , onde n é um inteiro de 1 a 5.
Por exemplo, a instrução Transact-SQL a seguir altera o nível de 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 desses valores inteiros com os níveis de condição de falha é a seguinte:
Valor Transact-SQL Nível A ativação automática do failover ocorre quando... 1 Um Servidor indisponível. O serviço do SQL Server para devido a um failover ou reinicialização. 2 Dois Servidor não está respondendo. Qualquer condição de valor inferior é satisfeita, o serviço do SQL Server está conectado ao cluster e o limite de tempo limite da verificação de integridade é excedido ou a réplica primária atual está em um estado de falha. 3 Três Em erro crítico do servidor. Qualquer condição de valor inferior é satisfeita ou ocorre um erro crítico interno do servidor.
Este é o nível padrão.4 Quatro Quando ocorrer um erro moderado no servidor. Qualquer condição de valor mais baixo é satisfeita ou ocorre um erro moderado do servidor. 5 Cinco Sob quaisquer condições qualificadas de falha. Qualquer condição de menor valor é satisfeita ou ocorre uma condição de falha qualificante. 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 limite de tempo limite de verificação de integridade, use a opção HEALTH_CHECK_TIMEOUT = n , onde 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
Defina o padrão (cd) para a instância do servidor que hospeda a réplica primária.
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 de nívelFailureConditionLevel, onde level é um dos seguintes valores:
Valor Nível A ativação automática do failover ocorre quando... OnServerDown Um Servidor indisponível. O serviço do SQL Server para devido a um failover ou reinicialização. OnServerUnresponsive Dois Servidor não está respondendo. Qualquer condição de valor inferior é satisfeita, o serviço do SQL Server está conectado ao cluster e o limite de tempo limite da verificação de integridade é excedido ou a réplica primária atual está em um estado de falha. OnCriticalServerError Três Em erro crítico do servidor. Qualquer condição de valor inferior é satisfeita ou ocorre um erro crítico interno do servidor.
Este é o nível padrão.OnModerateServerError Quatro Quando ocorrer um erro moderado no servidor. Qualquer condição de valor mais baixo é satisfeita ou ocorre um erro moderado do servidor. EmQualquerCondiçãoDeFalhaQualificada Cinco Sob quaisquer condições qualificadas de falha. Qualquer condição de menor valor é satisfeita ou ocorre uma condição de falha qualificante. 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 de 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 OnServerDownPara definir o limite de tempo limite da verificação de integridade, use o parâmetro HealthCheckTimeoutn , onde 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 limite de 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 Obter Ajuda no SQL Server PowerShell.
Para configurar e usar o provedor do SQL Server PowerShell
Tarefas relacionadas
Para configurar o failover automático
Alterar o Modo de Disponibilidade de uma Réplica (SQL Server) (o failover automático requer o modo de confirmação síncrona)
Alterar o modo de failover de uma réplica de disponibilidade (SQL Server)
Conteúdo relacionado
Ver também
Visão geral dos grupos de disponibilidade Always On (SQL Server)
Modos de Disponibilidade (Grupos de Disponibilidade Always On)
Modo de Failover e Modos de Failover (Grupos de Disponibilidade Always On)
Windows Server Failover Clustering (WSFC) com SQL Server
Política de failover para instâncias de cluster de failover
sp_server_diagnostics (Transact-SQL)