多台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的配置方式,但它的网络完全正常。
已尝试的排查步骤
- 一开始我怀疑是VM1和VM2的系统配置问题,但两台Ubuntu的Netplan配置完全一致,却出现不同程度的网络问题,这点让我很困惑
- 我尝试调整宿主机上
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




