Failover do grupo de disponibilidade Always On no Linux
Aplica-se a: SQL Server – Linux
Dentro do contexto de um grupo de disponibilidade (AG), as funções primária e secundária das réplicas de disponibilidade, normalmente, são intercambiáveis em um processo conhecido como failover. Existem três formas de failover: failover automático (sem perda de dados), failover manual planejado (sem perda de dados) e failover manual forçado (com possível perda de dados), geralmente chamado de failover forçado. Os failovers automáticos e manuais planejados preservam todos os seus dados. Um AG faz failover no nível da réplica de disponibilidade. Ou seja, um AG faz failover em uma de suas réplicas secundárias (o destino de failover atual).
Para obter informações sobre failover, confira Failover e modos de failover (grupos de disponibilidade Always On).
Failover manual
Use as ferramentas de gerenciamento de clusters para fazer failover de um AG gerenciado por um gerenciador de clusters externo. Por exemplo, se uma solução usar o Pacemaker para gerenciar um cluster do Linux, use pcs
para executar failovers manuais no Red Hat Enterprise Linux (RHEL) ou no Ubuntu. No SUSE Linux Enterprise Server (SLES), use crm
.
Importante
Em operações normais, não faça failover com as ferramentas de gerenciamento do Transact-SQL ou do SQL Server, como o SSMS ou o PowerShell. Quando CLUSTER_TYPE = EXTERNAL
, o único valor aceitável para FAILOVER_MODE
é EXTERNAL
. Com essas configurações, todas as ações de failover manual ou automático são executadas pelo gerenciador de clusters externo. Para obter instruções para forçar o failover com possível perda de dados, confira Forçar o failover.
Etapas do failover manual
Para fazer failover, a réplica secundária que se tornará a réplica primária deve ser síncrona. Se uma réplica secundária for assíncrona, altere o modo de disponibilidade.
Faça failover manualmente em duas etapas.
Primeiro, fazer failover manualmente movendo o recurso de AG do nó de cluster que tem os recursos para um novo nó.
O cluster faz failover do recurso do AG e adiciona uma restrição de localização. Essa restrição configura o recurso para ser executado no novo nó. Remova essa restrição para fazer failover com sucesso no futuro.
Segundo, remover a restrição de localização.
Etapa 1. Fazer failover manualmente movendo o recurso do grupo de disponibilidade
Para fazer failover manual de um recurso do AG denominado ag_cluster
para o nó de cluster denominado nodeName2, execute o comando apropriado para a sua distribuição:
Exemplo do RHEL/Ubuntu
sudo pcs resource move ag_cluster-master nodeName2 --master --lifetime=30S
Exemplo do SLES
crm resource migrate ag_cluster nodeName2 --lifetime=30S
Quando você usa a opção --lifetime
, a restrição de local criada para mover o recurso é temporária por natureza e válida por 30 segundos no exemplo anterior.
Observe que a restrição temporária não é limpa automaticamente e pode aparecer na lista de restrições, mas como uma restrição expirada. As restrições expiradas não afetam o comportamento de failover do cluster pacemaker. Se você não usar a opção --lifetime
ao mover o recurso, deverá remover uma restrição de local que é adicionada automaticamente, conforme indicado na seção seguinte.
Etapa 2. Remover a restrição de local
Durante um failover manual, o comando move
do pcs
ou o comando migrate
do crm
adiciona uma restrição de localização ao recurso a ser colocado no novo nó de destino. Para ver a nova restrição, execute o comando a seguir depois de mover manualmente o recurso:
Exemplo do RHEL/Ubuntu
sudo pcs constraint list --full
Exemplo do SLES
crm config show
Esse é um exemplo da restrição, que foi criada devido a um failover manual.
Enabled on: Node1 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-master)
Observação
O nome do recurso do AG em clusters Pacemaker no Red Hat Enterprise Linux 8.x e no Ubuntu 18.04 pode se parecer com ag_cluster clone, pois a nomenclatura relacionada aos recursos tem evoluído para usar o clone passível de promoção.
Exemplo do RHEL/Ubuntu
No comando a seguir,
cli-prefer-ag_cluster-master
é a ID da restrição que precisa ser removida.sudo pcs constraint list --full
retorna essa ID.sudo pcs resource clear ag_cluster-master
Ou
sudo pcs constraint remove cli-prefer-ag_cluster-master
Como alternativa, você pode executar a movimentação e a limpeza das restrições geradas automaticamente em uma só linha, da maneira exibida a seguir. O exemplo a seguir usa a terminologia clonar, de acordo com o Red Hat Enterprise Linux 8.x.
sudo pcs resource move ag_cluster-clone --master nodeName2 && sleep 30 && sudo pcs resource clear ag_cluster-clone
Exemplo do SLES
No comando a seguir,
cli-prefer-ms-ag_cluster
é a ID da restrição.crm config show
retorna essa ID.crm configure delete cli-prefer-ms-ag_cluster commit
Observação
O failover automático não adiciona uma restrição de local, de modo que nenhuma limpeza é necessária.
Para mais informações:
- Red Hat – gerenciamento de recursos de cluster
- Pacemaker – mover recursos manualmente
- Guia de Administração do SLES - gerenciamento de recursos de cluster
Forçar o failover
Um failover forçado destina-se estritamente à recuperação de desastre. Nesse caso, não é possível fazer failover com as ferramentas de gerenciamento de cluster porque o datacenter primário está inativo. Se você forçar o failover em uma réplica secundária não sincronizada, talvez ocorra alguma perda de dados. Só force o failover se for preciso restaurar imediatamente o serviço para o AG e se estiver disposto a correr o risco de perder dados.
Se você não puder usar as ferramentas de gerenciamento de cluster para interagir com o cluster (por exemplo, se o cluster não estiver respondendo devido a um evento de desastre no data center primário), talvez seja necessário forçar o failover para ignorar o gerenciador de clusters externo. Esse procedimento não é recomendado para operações regulares porque oferece o risco de perda de dados. Use-o quando as ferramentas de gerenciamento de cluster falharem ao executar a ação de failover. Funcionalmente, esse procedimento é semelhante a executar um failover manual forçado em um AG em Windows.
Esse processo para forçar o failover é específico para o SQL Server em Linux.
Verifique se o cluster não gerencia mais o recurso do AG.
Configure o recurso para o modo não gerenciado no nó de cluster de destino. Esse comando sinaliza ao agente de recurso para interromper o monitoramento e o gerenciamento de recursos. Por exemplo:
sudo pcs resource unmanage <resourceName>
Se a tentativa de configurar o modo de recurso como modo não gerenciado falhar, exclua o recurso. Por exemplo:
sudo pcs resource delete <resourceName>
Observação
Quando você exclui um recurso, ele também exclui todas as restrições associadas.
Na instância do SQL Server que hospeda a réplica secundária, defina a variável de contexto
external_cluster
da sessão.EXEC sp_set_session_context @key = N'external_cluster', @value = N'yes';
Faça failover do AG com o Transact-SQL. No exemplo a seguir, substitua
<MyAg>
pelo nome do seu AG. Conecte-se à instância do SQL Server que hospeda a réplica secundária de destino e execute o comando a seguir:ALTER AVAILABILITY GROUP <MyAg> FORCE_FAILOVER_ALLOW_DATA_LOSS;
Após um failover forçado, traga o AG para um estado íntegro antes de reiniciar o monitoramento e o gerenciamento dos recursos de cluster ou de recriar o recurso do AG. Examine as Tarefas essenciais após um failover forçado.
Reinicie o monitoramento e o gerenciamento de recursos de cluster:
Para reiniciar o monitoramento e o gerenciamento de recursos de cluster, execute o comando a seguir:
sudo pcs resource manage <resourceName> sudo pcs resource cleanup <resourceName>
Caso tenha excluído o recurso de cluster, recrie-o. Para recriar o recurso de cluster, siga as instruções em Criar recurso do grupo de disponibilidade.
Importante
Não use as etapas anteriores para análises de recuperação de desastre porque elas oferecem o risco de perda de dados. Em vez disso, altere a réplica assíncrona para síncrona e as instruções para failover manual normal.
Monitoramento em nível de banco de dados e gatilho de failover
Para CLUSTER_TYPE=EXTERNAL
, as semânticas do gatilho de failover são diferentes em comparação com o WSFC. Quando o AG está em uma instância do SQL Server em um WSFC, a transição para fora do estado ONLINE
do banco de dados faz com que a integridade do AG relate uma falha. Em resposta a isso, o gerenciador de clusters dispara uma ação de failover. No Linux, a instância do SQL Server não pode se comunicar com o cluster. O monitoramento da integridade do banco de dados é feito de fora para dentro. Se o usuário optou por failover e monitoramento de failover em nível de banco de dados (configurando a opção DB_FAILOVER=ON
ao criar o AG), o cluster verificará se o estado do banco de dados é ONLINE
sempre que executar uma ação de monitoramento. O cluster consulta o estado em sys.databases
. Para qualquer estado diferente de ONLINE
, ele disparará um failover automaticamente (se as condições de failover automático forem atendidas). O tempo real do failover depende da frequência da ação de monitoramento, bem como do estado do banco de dados que está sendo atualizado em sys.databases.
O failover automático requer pelo menos uma réplica síncrona.
Conteúdo relacionado
- Configurar o cluster do Red Hat Enterprise Linux para recursos de cluster do grupo de disponibilidade do SQL Server
- Configurar o cluster do SUSE Linux Enterprise Server para recursos de cluster do grupo de disponibilidade do SQL Server
- Configurar o cluster do Ubuntu para recursos de cluster do grupo de disponibilidade do SQL Server
Contribua com a documentação do SQL
Você sabia que pode editar conteúdo do SQL por conta própria? Ao fazer isso, além de melhorar nossa documentação, você também será creditado como um colaborador da página.
Para obter mais informações, confira Como contribuir para a documentação do SQL Server