
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:
- 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.
- 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.
- O relatório de validação de rede foi concluído com êxito
Eu seiO QUEacontece, mas não seiPOR QUE. OO QUE:
- 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.
- De repente, um nó para de jogar pingue-pongue e não responde. Um nó ainda tenta entregar pulsação.
- 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
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.
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!