브리지 인터페이스 간의 간헐적인 패킷 손실

브리지 인터페이스 간의 간헐적인 패킷 손실

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>

패킷이 손실되면 브리지 인터페이스, 본딩 VLAN 인터페이스 또는 탭 인터페이스에 RX/TX 오류나 삭제가 표시되지 않습니다 (ifconfig br121 and etc.). 으로 카운터가 증가하는 것을 볼 수 없습니다 virsh domifstat vm-rep vnet18. linuxbridge에서 openvSwitch로 전환했지만 도움이 되지 않았고 을 실행해도 ovs-ofctl dump-ports ovsbr121오류나 삭제가 표시되지 않습니다. openvSwitch에서 디버그 수준을 활성화했는데 브리지 인터페이스에도 오류나 삭제가 표시되지 않습니다.

이 가상 머신은 nginx의 리포지토리이며 Serh에 블록 장치 rbd가 있고 메모리/프로세서/블록 장치 로드가 없습니다. 가상화 호스트도 로드되지 않습니다. 로드 평균 값에 top높은 값이 표시되지 않습니다 . wa, hi, si, st유휴 상태는 거의 항상 96입니다. 호스트에는 가상 머신이 17개만 있습니다.

가상화 호스트 및 VM의 로그에서 이러한 동작에 대한 이유를 찾을 수 없습니다. 패킷 손실의 원인을 어떻게 알 수 있는지 모르겠습니다. 단기적인 VM 정지처럼 보입니다.

환경:

  • 가상화 호스트 및 VM의 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
  • 가상 설치 2.2.1

VM은 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"

때때로 이러한 패킷 손실은 다른 VM에서 발생하지만 이 경우가 가장 자주 발생합니다. VM을 재부팅해도 도움이 되지 않으며 가상화 호스트만 재부팅하면 됩니다.

추적/덤프하거나 적어도 손실된 패킷에 어떤 일이 발생하는지 확인할 수 있는 방법이 있습니까?

답변1

제 경우에는 KVM 브리지에 있는 EVPN/VXLAN 패브릭과 FDB 테이블의 멀티호밍 문제였습니다. 발생한 상황: VM이 arp 요청 또는 기타 브로드캐스트/멀티캐스트 트래픽을 보냈습니다. 그러한 프레임은 bridge -> bond -> one of the physical interfaces -> ip fabric.분할 지평선/지정 전달자그러면 EVPN/VXLAN 패브릭에서 잘못 작동하고 해당 프레임은 KVM 서버의 다른 물리적 인터페이스에서 동일한 본드에 이어 브리지로 돌아가므로 인터페이스와 VM의 mac 주소 비율이 변경됩니다. FDB 테이블을 본드 인터페이스에 연결합니다. 해결 방법으로 FDB 테이블을 제외하는 macvtap으로 전환했으나, 멀티호밍 문제를 해결한 후 다시 브리지로 돌아갔습니다.

여기에 이미지 설명을 입력하세요

관련 정보