我注意到我创建的 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-带有
microk8s
Kubernetes 的Ubuntu Server 22.04 - VM2 - 带有 PostGIS 的 Ubuntu Server 22.04(带有 GIS 扩展的 PostgreSQL 数据库)
- VM3 - OpenSUSE Tumbleweed 和 KDE Plasma(我的同事使用)
在这三者中,VM3(OpenSUSE)是通过桥接器访问时没有网络问题的。
当涉及到桥接连接时,VM2 会遭受数据包丢失(如上所述),而 VM3 则完全“出局”(最多 90% 以上的数据包丢失)。
我正在使用netplan
Ubuntu 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(正常):