多个 KVM 虚拟机访问桥接物理接口时网络性能存在巨大差异

多个 KVM 虚拟机访问桥接物理接口时网络性能存在巨大差异

我注意到我创建的 3 个虚拟机的网络速度存在非常奇怪的差异。对于一个虚拟机,网络工作正常,没有任何问题。对于下一个虚拟机,数据包丢失率在 50% 到 100% 之间,通常为 75%(通过发送 4 个 ping 请求来测量)。最后一个是最糟糕的 - 没有 ping 通。禁用第一个虚拟机似乎对其余虚拟机没有任何影响。

我安装的戴尔服务器配备 2 个 10gbps 和 2 个 1gbps 以太网端口。4 个端口中有 3 个已连接并用于特定用途:

  • eno1(10gbps)- 由我的自定义网桥控制,用于将虚拟机暴露给公司的本地网络。在这里,所有虚拟机都通过公司的 DHCP 分配一个 IP。也可以访问互联网。它将(在内部)用于访问私有云、数据库和其他与项目相关的东西,所有这些都驻留在各自的虚拟机中
  • eno2(10gbps)-静态,直接连接到数据存储服务器,我的服务器使用该服务器将数据转储到
  • eno3(1gbps)-DHCP,仅用于主机的 SSH 管理,也可以访问互联网(我希望在访问在线内容时具有冗余,例如用于更新主机的包)

除了使用 NAT(192.168.122.x)的虚拟化 KVM/QEMU 提供的默认设置外virbr0,我还设置了另一个从属桥eno1

bridges:
  br-kvm:
     interfaces:
     - eno1

它的 KVM 配置 XML 是

<network connections="3">
  <name>br-kvm</name>
  <uuid>****************</uuid>
  <forward mode="bridge"/>
  <bridge name="br-kvm"/>
</network>

默认virbr0有以下配置XML:

<network connections="3">
  <name>default</name>
  <uuid>*****************</uuid>
  <forward mode="nat">
    <nat>
      <port start="1024" end="65535"/>
    </nat>
  </forward>
  <bridge name="virbr0" stp="on" delay="0"/>
  <mac address="52:54:00:3b:71:33"/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254"/>
    </dhcp>
  </ip>
</network>

我的所有虚拟机都有两个虚拟网卡:

  • NIC(默认)- 使用默认网桥,因此 NAT 也将用于虚拟机间联网(例如,一个虚拟机中的云服务从另一个虚拟机上的数据库查询信息)
  • NIC(外部)- 使用我的eno1桥接器

所有虚拟网卡都使用虚拟司机。

虚拟机包括:

  • VM1-带有microk8sKubernetes 的Ubuntu Server 22.04
  • VM2 - 带有 PostGIS 的 Ubuntu Server 22.04(带有 GIS 扩展的 PostgreSQL 数据库)
  • VM3 - OpenSUSE Tumbleweed 和 KDE Plasma(我的同事使用)

在这三者中,VM3(OpenSUSE)是通过桥接器访问时没有网络问题的。

当涉及到桥接连接时,VM2 会遭受数据包丢失(如上所述),而 VM3 则完全“出局”(最多 90% 以上的数据包丢失)。

我正在使用netplanUbuntu Server VM,对于 OpenSUSE 我使用了 YaST(我的真正目标并不是学习如何使用 SUSE)。

netplan两个有问题的虚拟机的 YAML 配置是:

network:
  ethernets:
    enp1s0:
      dhcp4: true
      nameservers:
        addresses:
        - 10.22.1.2
        search:
        - my.company.com
    enp7s0:
      dhcp4: true
  version: 2

这里enp1s0始终是 NATed 默认桥接器,而enp7s0使用我的自定义桥接器。

起初我以为是 2 个虚拟机的配置问题。虽然确实如此,但我不明白两个具有相同操作系统和相同网络配置(就其 NIC 而言)的虚拟机怎么会出现这样的行为。我不是虚拟化专家,尤其是网络方面的专家。此外,虽然 VM2 的数据包被丢弃,但响应时间与 VM1 相同(大约 30 毫秒)。

我还尝试(在主机上)使用自定义桥接器的各种参数:

bridges:
    br-kvm:
      interfaces:
      - eno1
      parameters:
        stp: false
        ageing-time: 250
        forward-delay: true
        hello-time: 1
        max-age: 10
        priority: 10

我读到过,在使用虚拟网卡时,CPU 会影响网络虚拟驱动程序,因为 NIC 实际上连接到驻留在 RAM 中的虚拟总线,因此数据包必须先经过 RAM,然后才能到达物理 NIC。这也具有虚拟机间联网速度极快的优势。特别是单线程性能至关重要,因此 RAM 和 CPU 越快,虚拟机间连接速度就越快。该服务器有两个 Intel Xeon E5-4650 v4,频率高达 2.8GHz,所以我希望所有这些都能在来回复制时提供足够的速度。

更新:

我注意到,在虚拟管理器的 GUI 中,有问题的虚拟机都没有各自 NIC(连接到我的自定义网桥的 NIC)的 IP:

VM1(严重残疾)

在此处输入图片描述

VM2(有些残缺)

在此处输入图片描述

VM3(正常)

在此处输入图片描述

相关内容