You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

多台KVM虚拟机通过桥接物理网卡访问时网络性能差异巨大的问题排查求助

多台KVM虚拟机通过桥接物理网卡访问时网络性能差异巨大的问题排查求助

我最近碰到一个非常诡异的问题:我在一台Dell服务器上创建了3台KVM虚拟机,它们通过桥接物理网卡访问公司内网时,网络表现天差地别:

  • VM3(OpenSUSE Tumbleweed)完全正常,没有任何网络问题
  • VM2(Ubuntu Server 22.04)丢包率在50%-100%之间,用4次ping测试的话通常是75%丢包,但能通的包响应时间和正常VM差不多(约30ms)
  • VM1(Ubuntu Server 22.04)最严重,完全ping不通,丢包率90%以上

而且我试过禁用正常的VM3,对另外两台的网络状况没有任何改善。

服务器硬件与物理网卡配置

这台Dell服务器配有2个10Gbps和2个1Gbps以太网口,其中3个已经投入使用,用途分别是:

  • eno1(10Gbps):被我创建的自定义网桥br-kvm绑定,用于将VM暴露到公司内网,VM通过公司DHCP获取IP,同时可以访问互联网,主要用于VM访问私有云、数据库等内部服务
  • eno2(10Gbps):静态IP配置,直接连接到存储服务器,用于数据备份
  • eno3(1Gbps):DHCP获取IP,仅用于宿主机的SSH管理,同时也能访问互联网(作为宿主机访问外网的冗余通道,比如更新包)

KVM网络桥接配置

除了KVM默认提供的NAT模式网桥virbr0(网段192.168.122.x),我还创建了绑定eno1的自定义网桥br-kvm

自定义网桥br-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>

虚拟机网卡配置

所有三台VM都配置了两个虚拟网卡,并且都使用virtio驱动:

  • 第一个网卡(默认):连接到virbr0,用NAT模式,主要用于VM之间的内部通信(比如K8s服务访问数据库)
  • 第二个网卡(ext):连接到自定义网桥br-kvm,用于访问公司内网

三台VM的系统分别是:

  • VM1:Ubuntu Server 22.04 + MicroK8s Kubernetes
  • VM2:Ubuntu Server 22.04 + PostGIS(带GIS扩展的PostgreSQL)
  • VM3:OpenSUSE Tumbleweed + KDE Plasma(同事使用)

其中VM1和VM2用Netplan配置网络,YAML内容如下(两台配置完全一致):

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

注:enp1s0是连接virbr0的NAT网卡,enp7s0是连接br-kvm的桥接网卡。

VM3则是用YaST配置的网络,我没深入研究SUSE的配置方式,但它的网络完全正常。

已尝试的排查步骤

  1. 一开始我怀疑是VM1和VM2的系统配置问题,但两台Ubuntu的Netplan配置完全一致,却出现不同程度的网络问题,这点让我很困惑
  2. 我尝试调整宿主机上br-kvm的网桥参数,修改后的配置如下:
bridges:
br-kvm:
interfaces:
- eno1
parameters:
stp: false
ageing-time: 250
forward-delay: true
hello-time: 1
max-age: 10
priority: 10

但修改后没有任何改善
3. 我考虑过virtio网卡的性能问题,因为virtio是通过虚拟总线在内存中转发数据包,单线程CPU性能和内存速度会影响网络表现。不过服务器配备了两颗Intel Xeon E5-4650 v4(最高2.8GHz),理论上应该能满足需求

补充发现

我在Virtual Manager的GUI里注意到,有问题的VM1和VM2,它们连接br-kvm的网卡都没有显示IP地址;而正常的VM3,对应的网卡IP显示正常。


备注:内容来源于stack exchange,提问作者rbaleksandar

火山引擎 最新活动