Perda ocasional de pacotes entre interfaces de ponte

Perda ocasional de pacotes entre interfaces de ponte

Tenho dois servidores de virtualização baseados em libvirt e KVM. E às vezes vejo pacotes se perderem em uma máquina virtual específica. Depois de reiniciar o host de virtualização esse problema é resolvido, mas ajuda por um tempo.

Fiz filtros no iptraph-ng e vejo que os pacotes são perdidos entre interfaces de ponte.

Você pode vê-lo aqui::

Fri Mar  3 00:21:43 2023; ICMP; ens3f0; 84 bytes; from 10.10.10.68 to 10.10.11.23;      echo req
Fri Mar  3 00:21:43 2023; ICMP; bond1; 84 bytes; from 10.10.10.68 to 10.10.11.23;       echo req
Fri Mar  3 00:21:43 2023; ICMP; bond1.121; 84 bytes; from 10.10.10.68 to 10.10.11.23;   echo req
Fri Mar  3 00:21:43 2023; ICMP; ens3f0; 84 bytes; from 10.10.10.68 to 10.10.11.23;      echo req
Fri Mar  3 00:21:43 2023; ICMP; bond1; 84 bytes; from 10.10.10.68 to 10.10.11.23;       echo req
Fri Mar  3 00:21:43 2023; ICMP; bond1.121; 84 bytes; from 10.10.10.68 to 10.10.11.23;   echo req

Quando não há perda de pacotes:

Fri Mar  3 00:21:43 2023; ICMP; ens3f0; 84 bytes; from 10.10.10.68 to 10.10.11.23;      echo req
Fri Mar  3 00:21:43 2023; ICMP; bond1; 84 bytes; from 10.10.10.68 to 10.10.11.23;       echo req
Fri Mar  3 00:21:43 2023; ICMP; bond1.121; 84 bytes; from 10.10.10.68 to 10.10.11.23;   echo req
Fri Mar  3 00:21:43 2023; ICMP; vnet18; 84 bytes; from 10.10.10.68 to 10.10.11.23;      echo req
Fri Mar  3 00:21:43 2023; ICMP; vnet18; 84 bytes; from 10.10.11.23 to 10.10.10.68;      echo rply
Fri Mar  3 00:21:43 2023; ICMP; bond1.121; 84 bytes; from 10.10.11.23 to 10.10.10.68;   echo rply
Fri Mar  3 00:21:43 2023; ICMP; bond1; 84 bytes; from 10.10.11.23 to 10.10.10.68;       echo rply
Fri Mar  3 00:21:43 2023; ICMP; ens3f0; 84 bytes; from 10.10.11.23 to 10.10.10.68;      echo rply

Configurações da interface virtual:

virsh dumpxml vm-rep |xmllint -xpath ///interface -
<interface type="bridge">
      <mac address="52:54:00:2b:35:b4"/>
      <source bridge="br121"/>
      <target dev="vnet18"/>
      <model type="virtio"/>
      <alias name="net0"/>
      <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>

Quando os pacotes são perdidos, não vejo nenhum erro RX/TX ou quedas na interface bridge, bonded vlan interface ou tap interface (ifconfig br121 and etc.). Não vejo nenhum aumento nos contadores com virsh domifstat vm-rep vnet18. Mudei do linuxbridge para o openvSwitch, mas isso não ajudou, e se eu executar ovs-ofctl dump-ports ovsbr121, não vejo nenhum erro ou queda. Habilitei o nível de depuração no openvSwitch e também não vejo nenhum erro ou queda nas interfaces da ponte.

Esta máquina virtual é um repositório no nginx e possui um dispositivo de bloco rbd no Serh e nenhuma carga de memória/processador/dispositivo de bloco. O host de virtualização também não está carregado, topnão vejo valores altos wa, hi, si, stou no valor médio de carga. Ocioso é quase sempre 96. Existem apenas 17 máquinas virtuais no host.

Nos logs dos hosts de virtualização e da VM, não vi motivo para esse comportamento. Não entendo como posso descobrir a causa da perda de pacotes. Parece um congelamento de VM de curto prazo.

Ambiente:

  • Rocky Linux 8.5 em host de virtualização e VM.
  • libvirtd (libvirt) 6.0.0
  • Emulador QEMU versão 4.2.0 (qemu-kvm-4.2.0-60.module+el8.5.0+772+743bb337.2)
  • núcleo 4.18.0-348.23.1.el8_5.x86_64
  • virt-install 2.2.1

A VM foi criada com virt-install:

virt-install \
      --machine q35 \
      --name vm-rep \
      --memory=16384 \
      --vcpus=8 \
      --os-variant rocky8.5 \
      --disk size=20,bus=virtio \
      --network bridge=br121,model=virtio \
      --graphics=vnc \
      --boot hd,cdrom \
      --noautoconsole \
      --autostart \
      --channel unix,mode=bind,path=/var/lib/libvirt/qemu/vm-rep.agent,target_type=virtio,name=org.qemu.guest_agent.0 \
      --location /var/lib/libvirt/isos/Rocky-8.5-x86_64-minimal.iso \
      --initrd-inject=ks.cfg \
      --extra-args "inst.ks=file:/ks.cfg console=ttyS0,115200n8"

Às vezes, essas perdas de pacotes ocorrem para outras VMs, mas esta é mais frequente. Reiniciar a VM não ajuda, apenas reinicializar o host de virtualização.

Existe alguma maneira de rastrear/despejar ou pelo menos ver de alguma forma o que acontece com os pacotes perdidos?

Responder1

No meu caso, foi um problema de multihoming na estrutura EVPN/VXLAN e na tabela FDB na ponte do KVM. O que aconteceu: as VMs enviaram solicitações arp ou outro tráfego de transmissão/multicast. Tal quadro atingiria o bridge -> bond -> one of the physical interfaces -> ip fabric.Split Horizon/Remetente Designadofuncionaria incorretamente na malha EVPN/VXLAN, e esse quadro voltaria em outra interface física do servidor KVM para o mesmo vínculo e depois para a ponte, alterando assim a proporção da interface para o endereço MAC da VM em a tabela FDB para a interface de ligação. Como solução alternativa, mudamos para macvtap, que exclui a tabela FDB, mas depois de resolver o problema de multihoming, voltamos para bridges.

insira a descrição da imagem aqui

informação relacionada