Pérdida ocasional de paquetes entre interfaces de puente

Pérdida ocasional de paquetes entre interfaces de puente

Tengo dos servidores de virtualización basados ​​en libvirt y KVM. Y a veces veo que los paquetes se pierden en una máquina virtual en particular. Después de reiniciar el host de virtualización, este problema se resuelve, pero ayuda por un tiempo.

He realizado filtros en iptraph-ng y veo que se pierden paquetes entre las interfaces del puente.

Puedes verlo 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

Cuando no hay pérdida de paquetes:

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

Configuración de la interfaz 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>

Cuando se pierden paquetes, no veo ningún error RX/TX ni caídas en la interfaz del puente, la interfaz vlan vinculada o la interfaz tap (ifconfig br121 and etc.). No veo ningún aumento en los contadores con virsh domifstat vm-rep vnet18. Cambié de linuxbridge a openvSwitch, pero eso no ayudó, y si ejecuto ovs-ofctl dump-ports ovsbr121, no veo ningún error ni caída. Habilité el nivel de depuración en openvSwitch y tampoco veo ningún error ni caída en las interfaces del puente.

Esta máquina virtual es un repositorio en nginx y tiene un dispositivo de bloque rbd en Serh y no tiene carga de memoria/procesador/dispositivo de bloque. El host de virtualización tampoco está cargado, topno veo valores altos en wa, hi, si, stni en el valor promedio de carga. El estado inactivo casi siempre es 96. Solo hay 17 máquinas virtuales en el host.

En los registros de los hosts de virtualización y la máquina virtual, no vi ninguna razón para este comportamiento. No entiendo cómo puedo descubrir la causa de la pérdida de paquetes. Parece una congelación de VM a corto plazo.

Ambiente:

  • Rocky Linux 8.5 en host de virtualización y VM.
  • libvirtd (libvirt) 6.0.0
  • Emulador QEMU versión 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
  • instalación virt 2.2.1

La VM fue creada con 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"

A veces, estas pérdidas de paquetes ocurren en otras máquinas virtuales, pero ésta es la que ocurre con mayor frecuencia. Reiniciar la VM no ayuda, solo reiniciar el host de virtualización.

¿Hay alguna forma de rastrear/volcar o al menos ver de alguna manera qué sucede con los paquetes perdidos?

Respuesta1

En mi caso, fue un problema de conexión múltiple en la estructura EVPN/VXLAN y la tabla FDB en el puente del KVM. Qué sucedió: las máquinas virtuales enviaron solicitudes arp u otro tráfico de transmisión/multidifusión. Un marco así afectaría al bridge -> bond -> one of the physical interfaces -> ip fabric.Horizonte dividido/reenviador designadoentonces funcionaría incorrectamente en la estructura EVPN/VXLAN, y esa trama regresaría a otra interfaz física del servidor KVM al mismo enlace y luego al puente, cambiando así la relación de la interfaz a la dirección mac de la VM en la tabla FDB a la interfaz de bonos. Como solución alternativa, cambiamos a macvtap, que excluye la tabla FDB, pero después de resolver el problema de multihoming, volvimos a los puentes.

ingrese la descripción de la imagen aquí

información relacionada