Convidados do Windows Server 2016 no cluster WSFC colocados em quarentena aleatoriamente devido à queda de rotas de pulsação

Convidados do Windows Server 2016 no cluster WSFC colocados em quarentena aleatoriamente devido à queda de rotas de pulsação

Ter 2 sistemas operacionais Windows Server 2016 convidados hospedados pelo Hyper-V Server 2016. O cluster de sistema operacional convidado não é confiável e um dos nós fica constantemente em quarentena (várias vezes por dia).

Eu também tenho cluster do Windows Server 2012R2. Eles são hospedados pelos mesmos hosts Hyper-V e não apresentam nenhum problema. Isso significa que tenho a mesma rede e infraestrutura Hyper-V entre 2012R2 e 2016.

Configuração adicional para hosts de 2016:

  1. Em Conexões de Rede, TCP/IPv6 está desmarcado para todos os adaptadores.Estou ciente de que isso realmente não desativa o IPv6 para Clusterpois usa adaptador de rede oculto da NetFT e aí encapsula IPv6 em IPv4 para pulsações. Eu tenho a mesma configuração em bons hosts 2012R2.
  2. Embora o cluster 2012R2 funcionasse como eu queria sem o Witness, inicialmente configurei 2016 da mesma forma. Tentando solucionar esses problemas, adicionei o File Share Witness ao cluster de 2016 - sem alterações.
  3. O relatório de validação de rede foi concluído com êxito

Eu seiO QUEacontece, mas não seiPOR QUE. OO QUE:

  1. O cluster joga pingue-pongue com pacotes UDP de pulsação por meio de múltiplas interfaces entre ambos os nós na porta 3343. Os pacotes são enviados aprox. cada segundo.
  2. De repente, um nó para de jogar pingue-pongue e não responde. Um nó ainda tenta entregar pulsação.
  3. Bem, eu li o arquivo de log do cluster para descobrir que o nó removeu o conhecimento das informações de roteamento:
000026d0.000028b0::2019/06/20-10:58:06.832 ERR   [CHANNEL fe80::7902:e234:93bd:db76%6:~3343~]/recv: Failed to retrieve the results of overlapped I/O: 10060
000026d0.000028b0::2019/06/20-10:58:06.909 ERR   [NODE] Node 1: Connection to Node 2 is broken. Reason (10060)' because of 'channel to remote endpoint fe80::7902:e234:93bd:db76%6:~3343~ has failed with status 10060'
...
000026d0.000028b0::2019/06/20-10:58:06.909 WARN  [NODE] Node 1: Initiating reconnect with n2.
000026d0.000028b0::2019/06/20-10:58:06.909 INFO  [MQ-...SQL2] Pausing
000026d0.000028b0::2019/06/20-10:58:06.910 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 00.000 so far.
000026d0.00000900::2019/06/20-10:58:08.910 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 02.000 so far.
000026d0.00002210::2019/06/20-10:58:10.910 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 04.000 so far.
000026d0.00002fc0::2019/06/20-10:58:12.910 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 06.000 so far.
...
000026d0.00001c54::2019/06/20-10:59:06.911 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 1:00.000 so far.
000026d0.00001c54::2019/06/20-10:59:06.911 WARN  [Reconnector-...SQL2] Timed out, issuing failure report.
...
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO  [RouteDb] Cleaning all routes for route (virtual) local fe80::e087:77ce:57b4:e56c:~0~ to remote fe80::7902:e234:93bd:db76:~0~
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO    <realLocal>10.250.2.10:~3343~</realLocal>
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO    <realRemote>10.250.2.11:~3343~</realRemote>
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO    <virtualLocal>fe80::e087:77ce:57b4:e56c:~0~</virtualLocal>
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO    <virtualRemote>fe80::7902:e234:93bd:db76:~0~</virtualRemote>

Agora a parte POR QUE... Por que isso acontece? Não sei. Note que um minuto antes ele reclama: Failed to retrieve the results of overlapped I/O. Mas ainda consigo ver pacotes UDP sendo enviados/recebidos

Wireshark

até que a rota foi removida às 10:59:06 e apenas 1 nó faz ping, mas não tem pongs. Como visto no wireshark, não há IP 10.0.0.19 e 10.250.2.10 na coluna de origem.

Wireshark 2

A rota é adicionada novamente após cerca de 35 segundos, mas isso não ajuda - o nó já está em quarentena por 3 horas.

O que estou perdendo aqui?

Responder1

Acabei de ter o mesmo problema com um cluster de failover do Windows Server 2019 (para Hyper-V 2019). Normalmente também desabilito o IPv6 em meus servidores e isso causou problemas. O cluster gerou muitos erros críticos e às vezes fazia um failover difícil, embora uma testemunha de compartilhamento de arquivos também estivesse instalada e funcionando (?!).

Erros e avisos que observei no log de eventos foram:

IDs de evento de cluster de failover:

  • 1135 (o nó do cluster '....' foi removido da associação ativa do cluster de failover)
  • 1146 (O processo do Resource Hosting Subsystem (RHS) do cluster foi encerrado e será reiniciado)
  • 1673 (o nó do cluster '....' entrou no estado isolado.)
  • 1681 (As máquinas virtuais no nó '....' entraram em um estado não monitorado.)

IDs de evento do Gerenciador de controle de serviço:

  • 7024 (Um quorum de nós do cluster não estava presente para formar um cluster.)
  • 7031 (O serviço Cluster Service foi encerrado inesperadamente.)

Cliente de Clustering de Failover

  • 81 (informações estendidas de erro de RPC)

Graças à sua pesquisa, recebi uma pista importante: o adaptador oculto ainda usa IPv6. Como o artigo ao qual você vinculou dizia que não era recomendado ou comum desabilitar o IPv6 no adaptador oculto, mas desativá-lo em todos os outros adaptadores foi suportado e testado, fiquei me perguntando o que o impediu de funcionar.

Usando o seguinte comando, extraí os logs do cluster (também obrigado pela dica! Não conhecia este comando útil):

# -Destination (Folder) in my case changed to be not on the "C:\" SATADOM (this thing is slow and has few write cycles)
# -TimeSpan (in minutes) limited to one of the Failovers because these logs get HUGE otherwise.
Get-ClusterLog -Destination "E:\" -TimeSpan 5

Infelizmente, tive as mesmas entradas de log que você já postou.

Reativei o IPv6 em todos os adaptadores e reverti meus adaptadores/configuração relacionados ao túnel com:

Set-Net6to4Configuration -State Default
Set-NetTeredoConfiguration -Type Default
Set-NetIsatapConfiguration -State Default

Isso não funcionou... Olhando mais adiante, notei que eu também sempre desativo "aquelas regras de firewall relacionadas ao IPv6" desnecessárias... E essa parecia ser a mudança realmente importante! Essas regras parecem afetar também o adaptador invisível.

A questão parece ser: o IPv6 não usa ARP para encontrar os endereços MAC de seus parceiros de comunicação. Ele usa o protocolo de descoberta de vizinho. E este protocolo não funciona se você desabilitar as regras de firewall associadas. Embora você possa verificar as entradas ARP IPv4 com:

arp -a

Isso não mostrará os endereços MAC dos endereços IPv6. Para aqueles você pode usar:

netsh interface ipv6 show neighbors level=verbose

Se desejar, você pode filtrar a saída para os endereços do adaptador IPv6 assim:

netsh interface ipv6 show neighbors level=verbose | sls ".*fe80::1337:1337:1234:4321.*" -Context 4 |%{$_.Line,$_.Context.PostContext,""}

Fazendo isso descobri que essas entradas parecem ter vida muito curta. O estado da entrada do endereço local do link "Failover Cluster Virtual Adapter" da Microsoft do parceiro de cluster estava sempre alternando entre "Acessível" e "Sonda". Não entendi o momento em que estava "Inacessível", mas depois de reativar as regras IPv6, o problema desapareceu:

Get-NetFirewallRule -ID "CoreNet-ICMP6-*" | Enable-NetFirewallRule

De alguma forma, este endereço MAC parece ser trocado de outra forma entre os parceiros do cluster (provavelmente porque é o endereço "remoto virtual" e não real?). Portanto, ele continua reaparecendo, levando a esses estados selvagens de failover/quarentena/isolado.

Provavelmente desabilitar o IPv6 no adaptador invisível também teria ajudado, mas como isso não é recomendado, decidi parar de desabilitar completamente as coisas relacionadas ao IPv6. De qualquer forma, é o futuro :-)

Espero que isso ajude outro colega desabilitador de IPv6!

informação relacionada