O Failover automático do grupo de disponibilidade AlwaysOn não funciona

10

Jogando com a configuração do AG Eu tenho o WSFC instalado e configurado com dois nós em um grupo de disponibilidade chamado DevClusterOnline. Os dois nós (DEV-AWEB5 primário e DEV-AWEB6 secundário) estão executando o Windows Server 2008 R2.

Se eu verificar a integridade do meu AG, recebo o seguinte:

Descrição da integridade do grupo de disponibilidade

A execução da consulta abaixo retornará este conjunto de resultados: Confirmação síncrona e configuração automática de failover

select
    ar.replica_server_name,
    availability_group_name = ag.name,
    ar.availability_mode_desc,
    ar.failover_mode_desc
from sys.availability_replicas ar
inner join sys.availability_groups ag
on ar.group_id = ag.group_id
order by availability_group_name, replica_server_name;

Se eu desconectar o DEV-AWEB5, não consigo conectar-me ao Ouvinte de Grupo (DevListener), mas posso fazer o ping e ele responderá ao meu ping. A réplica - DEV-AWEB6 entra em um estado RESOLVING e meu DB está inacessível. No entanto, posso entrar manualmente no Management Studio e definir o Failover como DEV-AWEB6 e, em seguida, voltar a funcionar e o DevListener aceitará novamente as conexões.

Considerando que esses fatos confirmam que o failover realmente funciona, que eu sincronizei confirmações e configurei o failover automático, não tenho idéia do que está apresentando mau funcionamento em minha instalação.

Quando eu desconecto o DEV-AWEB5, espero que minha réplica retenha a conexão e, portanto, o DevListener também. Espero que o failover automático permita que eu me conecte ao ouvinte da AG de forma transparente. Da perspectiva do usuário final, usando um sistema da Web, não deve ser notado que um dos servidores de banco de dados está inoperante.

Estou preso aqui, alguém pode me esclarecer o que estou fazendo de errado?

Marcus
fonte
11
Como é o seu modelo de quorum? É uma maioria de nós simples? Nesse caso, esse pode ser seu problema. Em technet.microsoft.com/en-us/library/cc731739.aspx , esse modelo de quorum pode sustentar apenas uma perda de (metade dos nós no cluster) -1. Portanto, se você tiver um cluster de dois nós com quorum de maioria de nós, poderá sustentar falhas de 0 nós.
precisa saber é o seguinte
2
@BenThul Se o cluster perder quorum, o OP não poderá executar failover manualmente.
Thomas Stringer

Respostas:

6

Se eu desconectar o DEV-AWEB5

Defina "desconectar", se desejar. Meu palpite é que você manteve a caixa aberta, mas derrubou o SQL Server.

Não consigo me conectar ao ouvinte de grupo (DevListener), mas posso fazer ping e ele responderá ao meu ping

Isso ocorre porque o ouvinte é apenas um nome de rede virtual (VNN) no grupo de recursos de cluster do WSFC para o grupo de disponibilidade representado. Seu nó DEV_AWEB5 ainda possui o grupo de recursos de cluster, mas é apenas o recurso de cluster AG que provavelmente está em um estado com falha. O VNN ainda deve estar online (comportamento esperado). Ele está simplesmente apontando para qualquer nó que possua esse grupo de recursos (neste caso, DEV-AWEB5). De fato, se você tivesse o PowerShell Remoting ativado, e executasse o seguinte:

Invoke-Command -ComputerName "YourListenerName" -ScriptBlock { $env:computername }

Da mesma forma, se você puder fazer o RDP no DEV-AWEB5 (desde que você tenha capacidade e acessibilidade etc.), poderá fazer o RDP usando o nome do ouvinte ( mstsc /v:YourListenerName). É apenas um VNN.

O retorno disso seria o nome do computador do seu nó proprietário.

Por todos os seus sintomas, eu apostaria que você atingiu seu limite de failover. O limite de failover determina quantas vezes o cluster tentará fazer failover do seu grupo de recursos em um período especificado. O padrão desses valores máx. Failovers n - 1 (em que n é a contagem de nós) em um período de 6 horas . Você pode ver isso através do seguinte comando do WSFC PowerShell:

Get-ClusterGroup -Name "YourAgName" |
    Select-Object Name, FailoverThreshold, FailoverPeriod

Isso apenas fornece as configurações (que você pode modificar, se quiser, é claro).

A melhor maneira de provar que esse é o seu caso, você precisaria gerar o log do cluster (os logs de eventos do sistema só entram em detalhes na medida em que "falhou" ou algo parecido).

Get-ClusterLog -Node "YourClusterNode" -TimeSpan <amount_of_minutes_since_failure>

Por padrão, isso é colocado na pasta "C: \ Windows \ Cluster \ Reports" e o arquivo é chamado "Cluster.log".

Se você abrir esse log de cluster, poderá encontrar a seguinte cadeia de caracteres, indicando exatamente o que aconteceu e por que aconteceu:

Não falha no grupo [YourClusterGroupName] , failoverCount [# de failovers] , limite de failover [valor do limite de failover] , nodeAvailCount [contagem disponível do nó ].

A mensagem acima é simplesmente o WSFC informando que não ocorrerá failover no seu grupo porque aconteceu muito (você atingiu o limite).

Por que isso acontece? Simplesmente para impedir que o efeito Ping-Pong dos recursos do cluster seja alternado com muita frequência entre os nós.

Embora seja comum atingir esses limites nos testes de failover, na produção, normalmente indica um problema que deve ser investigado.

Thomas Stringer
fonte
2
Obrigado por sua ajuda, segui suas instruções, mas finalmente descobri que esse não era o problema. O motivo pelo qual não consegui fazer com que o AG fizesse failover automaticamente foi porque eu não havia configurado as dependências do WSFC corretamente. Acontece que eu precisava adicionar o MSSQL como um recurso de cluster (Serviço Genérico) e adicioná-lo como uma dependência no Gerenciador de Cluster de Failover junto com o ouvinte de AG. Além disso, é necessário marcar a caixa de seleção 'Se a reinicialização não for bem-sucedida, faça failover de todos os recursos deste serviço ou aplicativo'. Tenho certeza que você teve a impressão de que eu já tinha feito isso.
Marcus
1

Adicionar MSSQL como um recurso de serviço genérico não é a resposta.

Isso apenas colocará o Cluster Manager no serviço do SQL Server, OK, sim, ele fará failover automaticamente, mas você notará no SQL Server Configuration Manager que seus serviços estão agora definidos como "Manual", indicando que o Cluster Manager está agora no controle do seu serviço do servidor SQL.

Você está colocando o Cluster Manager no comando de um aplicativo não clusterizado.

Isso terminará em lágrimas.

A abordagem correta para configurar corretamente os grupos de disponibilidade do SQL Server de acordo com a documentação da MS.

Além disso, verifique se você não está excedendo os parâmetros de failover conforme definido na guia Cluster Manager> Funções> guia Failover.

Se você estiver excedendo esses limites, o cluster não fará o failover de seus recursos e um erro será postado no log de eventos do aplicativo.

Keiran Grogan
fonte