Случайная потеря пакетов между интерфейсами моста

Случайная потеря пакетов между интерфейсами моста

У меня есть два сервера виртуализации на основе libvirt и KVM. И иногда я вижу, как пакеты теряются на одной конкретной виртуальной машине. После перезапуска хоста виртуализации эта проблема решается, но помогает на некоторое время.

Я сделал фильтры в iptraph-ng и вижу, что пакеты теряются между интерфейсами моста.

Вы можете видеть это здесь::

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

При отсутствии потери пакетов:

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

Настройки виртуального интерфейса:

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>

Когда пакеты теряются, я не вижу никаких ошибок RX/TX или сбрасываний на интерфейсе моста, связанном интерфейсе vlan или интерфейсе tap (ifconfig br121 and etc.). Я не вижу никакого увеличения счетчиков с virsh domifstat vm-rep vnet18. Я переключился с linuxbridge на openvSwitch, но это не помогло, и если я запускаю ovs-ofctl dump-ports ovsbr121, я не вижу никаких ошибок или сбрасываний. Я включил уровень отладки в openvSwitch и также не вижу никаких ошибок или сбрасываний на интерфейсах моста.

Эта виртуальная машина является репозиторием на nginx и имеет блочное устройство rbd на Serh и никакой нагрузки на память/процессор/блочное устройство. Хост виртуализации также не загружен, в topя не вижу высоких значений в wa, hi, si, stили в значении средней нагрузки. Idle почти всегда 96. На хосте всего 17 виртуальных машин.

В логах хостов виртуализации и ВМ я не увидел причин такого поведения. Я не понимаю, как можно выяснить причину потери пакетов. Похоже на кратковременное зависание ВМ.

Среда:

  • Rocky Linux 8.5 на хосте виртуализации и виртуальной машине.
  • libvirtd (libvirt) 6.0.0
  • Эмулятор QEMU версии 4.2.0 (qemu-kvm-4.2.0-60.module+el8.5.0+772+743bb337.2)
  • ядро 4.18.0-348.23.1.el8_5.x86_64
  • virt-install 2.2.1

Виртуальная машина была создана с помощью 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"

Иногда такие потери пакетов происходят и с другими ВМ, но с этой чаще всего. Перезагрузка ВМ не помогает, только перезагрузка хоста виртуализации.

Есть ли способ отследить/сбросить или хотя бы как-то увидеть, что происходит с потерянными пакетами?

решение1

В моем случае это была проблема с multihoming в фабрике EVPN/VXLAN и таблицей FDB в мосте на KVM. Что произошло: виртуальные машины отправляли запросы arp или другой широковещательный/многоадресный трафик. Такой кадр попадал в bridge -> bond -> one of the physical interfaces -> ip fabric.Разделенный горизонт/назначенный экспедитортогда неправильно работало бы в фабрике EVPN/VXLAN, и этот кадр возвращался бы на другой физический интерфейс сервера KVM к той же связи, а затем к мосту, тем самым изменяя соотношение интерфейса к mac-адресу виртуальной машины в таблице FDB к интерфейсу связи. В качестве обходного пути мы перешли на macvtap, который исключает таблицу FDB, но после решения проблемы с множественной адресацией мы вернулись к мостам.

введите описание изображения здесь

Связанный контент