
最近在折腾家庭实验室想把几台闲置的迷你PC利用起来搭建一个高可用的虚拟化环境。网上关于Proxmox VEPVE的教程很多但大多集中在单机部署对于如何利用迷你PC组建集群特别是配置万兆网络实现高速内部通信和存储共享资料比较零散实操中踩了不少坑。本文将完整记录从硬件选型、Proxmox VE安装、集群创建到万兆网络配置的全过程并附上详细的命令和配置截图。无论你是想搭建一个低成本的家庭实验平台还是为中小型项目构建一个可靠的虚拟化基础架构这套方案都能提供清晰的指引。1. 背景与核心概念在深入实操之前我们先理清几个核心概念这有助于理解整个方案的架构和设计思路。1.1 为什么选择迷你PC Proxmox VE传统的服务器体积大、功耗高、噪音响不适合家庭或小型办公环境。而现代迷你PC性能强劲通常搭载高性能移动端CPU如Intel NUC系列或AMD Ryzen平台功耗低、静音且价格相对低廉。将它们组合起来就能以较低的成本获得接近服务器的计算和网络能力。Proxmox VE 是一个基于 Debian 的开源企业级虚拟化平台它整合了 KVM用于虚拟机和 LXC用于容器两种虚拟化技术。其最大的优势在于管理简单提供友好的Web界面、功能完整支持高可用集群、软件定义存储、备份等并且完全免费对于大多数功能。对于个人学习和中小规模部署来说它是 VMware ESXi 和 Nutanix 等商业方案的绝佳替代品。1.2 什么是Proxmox集群Proxmox集群Proxmox Cluster是将多台独立的Proxmox VE物理服务器节点逻辑上组合成一个单一的管理实体。组建集群后你可以集中管理通过任意一个节点的Web界面管理集群内所有节点和其上的虚拟机/容器。迁移虚拟机在不关机需要存储支持或短暂关机的情况下将虚拟机从一个节点迁移到另一个节点便于维护或负载均衡。实现高可用HA当某个节点发生故障时其上受保护的虚拟机会自动在集群内其他健康节点上重启保障业务连续性。集群的核心是“票数”Quorum。通常集群需要超过半数的节点在线才能正常运作以防止“脑裂”Split-brain——即网络分区导致集群分裂成两个都认为自己是主集群的部分。对于双节点集群需要配置“仲裁设备”如QDevice来提供额外的票数。1.3 万兆网络在集群中的作用在虚拟化集群中网络流量主要分为几种管理流量Web界面访问、SSH、集群节点间心跳通信。对带宽要求不高千兆网络即可。虚拟机迁移流量迁移一个运行中的虚拟机需要将内存状态快速同步到目标主机。虚拟机内存越大对网络带宽和延迟要求越高。存储流量如果使用分布式存储如Ceph或网络共享存储如NFS、iSCSI所有的磁盘I/O都会经过网络。这是对网络带宽和延迟最敏感的部分。千兆网络1 Gbps的极限速度大约在110 MB/s左右这在迁移多台虚拟机或运行存储密集型应用时很容易成为瓶颈。万兆网络10 Gbps能提供接近1 GB/s的传输速度可以极大提升虚拟机迁移速度和存储性能是构建高性能虚拟化集群的关键。2. 环境与硬件准备本次实战基于三台迷你PC构建集群以实现基本的票数仲裁3节点天然有奇数票无需额外仲裁设备。2.1 硬件清单组件型号/规格数量备注迷你主机Intel NUC 13 Pro (i5-1340P)3台也可选用AMD Ryzen平台的迷你PC确保有至少两个M.2插槽或一个M.2一个PCIe扩展槽。内存DDR4/DDR5 SO-DIMM 32GB3条每台32GB建议频率匹配。内存越大能运行的虚拟机越多。系统盘NVMe SSD 512GB3块用于安装Proxmox VE系统和本地虚拟机磁盘。万兆网卡Mellanox ConnectX-3 (MCX311A)3块性价比极高的二手万兆网卡支持SFP光口。需通过PCIe转接卡M.2 Key M转PCIe x4连接到NUC。万兆光纤模块SFP SR 多模模块6个短距离如机房机柜内使用多模模块和LC-LC光纤跳线。万兆交换机MikroTik CRS305-1G-4SIN1台5口万兆交换机1个千兆电口4个SFP万兆光口非常适合小型集群。千兆交换机普通家用千兆交换机1台用于连接管理网络和外部互联网。光纤跳线LC-LC 多模 OM3/OM43根长度根据实际摆放位置决定。硬件连接拓扑图[Node1]万兆口 --- [万兆交换机] --- [Node2]万兆口 | | | 千兆口 千兆口(Uplink) 千兆口 | | | ------------------------------------------ | [千兆交换机/路由器] | [互联网]每台迷你PC的两个网口一个板载千兆一个万兆分别接入两个不同的网络。万兆网络用于集群内部高速通信迁移、存储。千兆网络用于管理Web访问、SSH和连接外网虚拟机更新、下载。2.2 软件与版本说明虚拟化平台Proxmox Virtual Environment 8.x操作系统基础基于 Debian 12 (Bookworm)管理方式Web GUI (https://节点IP:8006) 和 命令行 (pvesh,qm,pct)版本兼容性提示Proxmox VE 7.x 和 8.x 在集群和网络配置上核心逻辑相通。本文以 8.x 为例但步骤同样适用于 7.x部分软件包名称或配置文件路径可能略有差异请以官方文档为准。3. Proxmox VE 单节点安装与基础配置在组建集群前需要先在每台迷你PC上独立安装Proxmox VE。3.1 制作安装镜像并安装下载镜像从 Proxmox 官网下载最新的 ISO 安装镜像。制作启动盘使用 Rufus (Windows) 或dd命令 (Linux/Mac) 将 ISO 写入 U 盘。安装过程将U盘插入迷你PC启动并选择从U盘引导。安装过程图形化比较简单同意许可协议。选择目标硬盘你的NVMe SSD注意这会清空硬盘所有数据。设置国家、时区、键盘布局。设置管理员密码和邮箱邮箱用于接收通知重要。配置网络Management Interface选择板载的千兆网卡如enp1s0。设置一个固定的IP地址、网关、DNS服务器。例如为三台节点分别规划IP192.168.1.101,192.168.1.102,192.168.1.103子网掩码255.255.255.0网关192.168.1.1。确认配置并开始安装。安装完成后重启。3.2 安装后基础调优通过浏览器访问https://192.168.1.101:8006使用你设置的IP登录后首先进行一些基础配置。更新软件源并升级系统由于Proxmox默认使用企业源如果没有订阅需要替换为社区源。通过节点Shell或SSH登录执行# 备份原有源列表 cp /etc/apt/sources.list /etc/apt/sources.list.bak cp /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak # 注释掉企业源不删除文件即可 # sed -i s|^deb|#deb| /etc/apt/sources.list.d/pve-enterprise.list # 添加Proxmox社区源 (Debian 12) echo deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription /etc/apt/sources.list.d/pve-no-subscription.list # 更新并升级 apt update apt dist-upgrade -y移除未订阅提示登录Web界面时会有“未订阅”提示可以通过修改JS文件移除不影响功能# 这是一个常见方法但升级后可能需要重新操作 sed -Ezi.bak s/(Ext.Msg.show\(\{\stitle: gettext\(No valid sub)/void\(\{ \/\/\1/g /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js systemctl restart pveproxy在另外两台迷你PCNode2, Node3上重复以上3.1和3.2的所有步骤。确保它们都在同一个千兆局域网内并且IP地址不同、主机名不同安装时设置也可后期修改。4. 创建Proxmox集群现在我们有三台独立运行的Proxmox节点接下来将它们组成一个集群。我们将以pve-101(192.168.1.101) 作为创建集群的第一个节点。4.1 在第一个节点上创建集群在pve-101的Web界面点击左侧导航栏的“数据中心”然后选择“集群”标签页点击“创建集群”按钮。集群名称可以自定义如home-lab。链路模式保持默认的“单链路”即可因为我们目前只有一个网络管理网络用于集群通信。点击“创建”。创建成功后在“集群”页面会显示一个“加入信息”其中包含一个关键的join information它是一串包含集群名称、节点指纹和密钥的文本。复制这串信息或者点击“复制信息”按钮。稍后在其他节点上需要用到。你也可以通过命令行创建效果相同pvecm create home-lab4.2 将其他节点加入集群在pve-102(192.168.1.102) 的Web界面同样进入“数据中心”-“集群”点击“加入集群”按钮。将上一步复制的“加入信息”粘贴到输入框中。当前节点密码输入pve-102的root密码。对端主机IP地址填写pve-101的IP地址即192.168.1.101。点击“加入”。系统会开始验证指纹并加入集群。完成后pve-102会重启pve-cluster服务。稍等片刻刷新pve-101的Web界面你应该能在节点列表中看到pve-102。对pve-103(192.168.1.103) 重复完全相同的“加入集群”操作。命令行加入方式在pve-102和pve-103的Shell中执行# 将 join_info 替换为从 pve-101 复制的完整信息 pvecm add 192.168.1.101 -join join_info4.3 验证集群状态在所有节点都加入后可以在任意节点的Shell中检查集群状态pvecm status输出应类似如下显示所有节点均为在线状态并且拥有票数1Cluster information ------------------- Name: home-lab Config Version: 3 Transport: knet Secure auth: on Quorum information ------------------ Date: Tue May 21 10:00:00 2024 Quorum provider: corosync_votequorum Nodes: 3 Node ID: 0x00000001 Ring ID: 1.123a Quorate: Yes Votequorum information ---------------------- Expected votes: 3 Highest expected: 3 Total votes: 3 Quorum: 2 Flags: Quorate Membership information ---------------------- Nodeid Votes Name 0x00000001 1 192.168.1.101 0x00000002 1 192.168.1.102 (local) 0x00000003 1 192.168.1.103现在你可以在任意一个节点的Web界面左侧树形列表中看到所有三个节点并可以跨节点管理虚拟机了。5. 万兆网络配置实战集群搭建好了但节点间通信仍走千兆管理网络。接下来配置万兆网络专门用于高速数据传输。5.1 物理连接与驱动识别将万兆网卡通过转接卡安装到每台迷你PC的M.2插槽。使用LC-LC光纤跳线将每台机器的万兆网卡连接到万兆交换机的SFP端口。启动所有节点。Proxmox VE 基于 Debian通常自带 Mellanox 网卡的驱动mlx5_core。通过以下命令检查网卡是否被识别lspci | grep Mellanox # 应能看到类似 Ethernet controller: Mellanox Technologies MT27500 Family [ConnectX-3] 的信息 ip link show # 查看所有网络接口万兆网卡通常会显示为 enp4s0 或 ens1 等具体名称因系统而异我们假设为 enp4s0如果网卡未被识别可能需要安装驱动。对于ConnectX-3可以安装mlnx-ofed-all包但大多数情况下Debian 12内核已包含。5.2 配置专用集群通信链路Corosync为了让集群心跳和迁移流量走万兆网络我们需要为Corosync集群通信引擎配置第二个网络链路。在任意一个节点上操作即可配置会自动同步到集群。创建新的网络接口配置文件编辑/etc/pve/corosync.conf文件。这个文件是集群共享的在一处修改所有节点生效。配置双链路找到totem { ... }部分在interface { ... }块后面添加第二个interface块。修改后的配置节选如下# 文件/etc/pve/corosync.conf totem { version: 2 secauth: on cluster_name: home-lab config_version: 4 # 这个版本号会自动增加无需手动改 # 链路1千兆管理网络 (用于基础通信和回退) interface { linknumber: 0 link_priority: 2 # 优先级较低 knet_link_priority: 2 knet_ping_interval: 1000 knet_ping_timeout: 3000 knet_transport: udp mcastport: 5405 ringnumber: 0 } # 链路2万兆高速网络 (用于主要数据通信) interface { linknumber: 1 link_priority: 1 # 优先级较高 knet_link_priority: 1 knet_ping_interval: 500 knet_ping_timeout: 2000 knet_transport: udp mcastport: 5407 ringnumber: 1 } # ... 其他配置如 crypto_cipher, crypto_hash 等保持不变 } nodelist { node { name: pve-101 nodeid: 1 quorum_votes: 1 ring0_addr: 192.168.1.101 # 链路1地址 (千兆) ring1_addr: 10.10.10.101 # 链路2地址 (万兆需规划新网段) } node { name: pve-102 nodeid: 2 quorum_votes: 1 ring0_addr: 192.168.1.102 ring1_addr: 10.10.10.102 } node { name: pve-103 nodeid: 3 quorum_votes: 1 ring0_addr: 192.168.1.103 ring1_addr: 10.10.10.103 } }关键点解释link_priority: 数字越小优先级越高。我们将万兆链路 (linknumber: 1) 的优先级设为1千兆链路 (linknumber: 0) 设为2。Corosync会优先使用高优先级链路。ring0_addr,ring1_addr: 分别对应链路0和链路1的IP地址。ring0_addr我们已经有了管理IP。ring1_addr需要规划一个新的、独立的IP段如10.10.10.0/24并且仅用于万兆网络直连或通过万兆交换机可达。确保三台机器在这个新网段内能互相ping通。为万兆网卡配置静态IP我们需要在每个节点上为万兆网卡如enp4s0配置上面规划的ring1_addrIP。 在每个节点上创建或编辑网络配置文件以pve-101为例# 文件/etc/network/interfaces.d/enp4s0 # 在 pve-101 上 auto enp4s0 iface enp4s0 inet static address 10.10.10.101/24 # 注意这里不设置网关(gateway)和DNS因为这是一个纯内部网络。 # 如果你的万兆口也需访问外网不推荐混合则另当别论。 mtu 9000 # 启用巨帧提升大块数据传输效率启用巨帧Jumbo Framesmtu 9000将最大传输单元设置为9000字节远大于标准的1500字节能显著减少数据包开销提升万兆网络吞吐量。务必确保网络路径上所有设备网卡、交换机都支持并启用了相同MTU值的巨帧否则会导致网络问题。应用配置并重启网络# 重启网络服务使新IP生效 systemctl restart networking # 或者针对特定接口 ifdown enp4s0 ifup enp4s0 # 重启Corosync服务以应用新的集群配置 systemctl restart corosync systemctl restart pve-cluster # 有时也需要重启这个服务验证双链路配置等待几分钟让集群稳定然后检查状态pvecm status corosync-cmapctl | grep runtime.totem.links # 查看链路状态你应该能看到两条链路都处于ACTIVE状态。5.3 创建用于虚拟机迁移和存储的专用桥接网络虽然Corosync已经使用了万兆网络但虚拟机的迁移vmbr和存储网络如Ceph默认可能仍走管理网桥vmbr0绑定在千兆口上。我们需要创建一个新的Linux网桥绑定到万兆网卡上。注意我们不能简单地把万兆网卡直接给虚拟机用因为Corosync已经占用了它的IP。标准的做法是为万兆网卡创建VLAN感知的桥接或者添加一个子接口VLAN用于虚拟机网络。这里我们采用创建子接口并桥接的方式更清晰。创建VLAN子接口在万兆物理接口enp4s0上创建一个VLAN ID为 10 的子接口VLAN ID可自定义只要所有节点一致且交换机支持。 编辑每个节点的/etc/network/interfaces文件Proxmox的网络配置主要在这里# 文件/etc/network/interfaces (在 pve-101 上其他节点类推) # ... 前面是已有的 lo, vmbr0 配置 ... # 万兆物理接口 - 仅作为VLAN trunk端口不配IP auto enp4s0 iface enp4s0 inet manual mtu 9000 # VLAN 10 子接口用于高速数据网络迁移、存储 auto enp4s0.10 iface enp4s0.10 inet manual vlan-raw-device enp4s0 mtu 9000 # 创建新的桥接 vmbr1绑定到VLAN子接口 auto vmbr1 iface vmbr1 inet manual bridge-ports enp4s0.10 bridge-stp off bridge-fd 0 bridge-vlan-aware yes bridge-vids 2-4094 mtu 9000 # 注意这里不设置IP地址因为这个桥接是给虚拟机和存储流量用的不需要节点本身拥有IP。应用网络配置ifreload -a或者重启节点网络服务。在Web界面中验证登录Web界面点击节点 - “系统” - “网络”你应该能看到新创建的vmbr1桥接。5.4 配置存储和迁移使用新网络配置存储使用vmbr1如果你计划使用像Ceph这样的分布式存储在创建Ceph集群或添加OSD时可以在“网络”设置中指定使用vmbr1作为集群网络和公共网络。对于NFS或iSCSI存储在添加存储时可以指定其服务器地址为万兆网络IP10.10.10.x这样流量就会走万兆。配置迁移网络Proxmox的迁移功能默认使用集群通信网络现在是双链路了。但为了更精细的控制可以显式设置迁移网络。 在Web界面进入“数据中心” - “选项” - “迁移设置”。迁移网络可以填写万兆网络的CIDR例如10.10.10.0/24。这样迁移流量会优先尝试使用这个网段。迁移类型选择“安全网络”secure以使用SSH加密或“明文”insecure以获得更高速度仅限完全信任的内部网络。6. 测试与验证配置完成后必须进行测试以确保万兆网络工作正常并且性能有显著提升。6.1 网络连通性与速度测试基础连通性测试在每个节点上ping其他节点在万兆网络上的IP# 在 pve-101 上执行 ping -c 4 10.10.10.102 ping -c 4 10.10.10.103应能成功收到回复。带宽测试使用 iperf3在一台节点上启动服务器模式在另一台节点上作为客户端测试。在pve-102上启动 iperf3 服务器apt update apt install iperf3 -y iperf3 -s在pve-101上运行客户端测试指定万兆网络IPiperf3 -c 10.10.10.102 -t 30 -P 4-c: 客户端模式后接服务器IP。-t 30: 测试30秒。-P 4: 使用4个并行连接更能压满带宽。 观察输出中的[SUM]行速度应接近万兆的理论值约 9.4 Gbps 或 1.1 GB/s。如果速度远低于此检查MTU设置、网卡驱动、交换机端口或光纤模块。6.2 虚拟机迁移测试在pve-101上创建一个测试虚拟机如一个小的Alpine Linux。在Web界面右键点击该虚拟机 - “迁移”。选择目标主机为pve-102或pve-103。在“迁移选项”中可以观察“网络”选择。由于我们配置了迁移网络它应该会自动选择万兆网络段。开始迁移并观察“摘要”中的“数据传输速率”。你应该能看到速率显著高于千兆网络的理论上限约 100 MB/s达到数百MB/s甚至更高。6.3 存储性能测试如果配置了网络存储如果你配置了基于万兆网络的NFS或Ceph存储可以在虚拟机中挂载该存储并使用dd或fio工具测试读写速度对比之前千兆网络的性能。7. 常见问题与排查思路在配置过程中你可能会遇到以下问题问题现象可能原因排查步骤与解决方案节点无法加入集群1. 防火墙阻止端口TCP 8006, 22; UDP 5404-5405。2. 主机名解析问题。3. 复制/粘贴的加入信息有误或过期。1. 检查防火墙pve-firewall stop临时关闭测试。2. 确保/etc/hosts文件或DNS能解析对方主机名和IP。3. 在第一个节点上重新生成加入信息pvecm create -join 集群名会输出新信息。集群状态显示Not Quorate节点数少于在线节点半数如3节点集群只有1台在线。1. 检查其他节点是否关机或网络断开。2. 对于双节点集群必须配置QDevicepvecm qdevice setup QDevice主机IP。万兆网卡无法识别或没有ip link输出1. 驱动未加载。2. 硬件或转接卡问题。1. 检查内核模块lsmod配置万兆IP后节点失联1. IP冲突。2. 网络配置错误导致默认路由改变。3. MTU不匹配导致包丢弃。1.务必通过物理控制台显示器键盘或IPMI登录排查。2. 检查/etc/network/interfaces文件语法。3. 确保万兆网络配置中没有设置gateway除非你明确需要它作为出口。4. 暂时将MTU改回1500测试。虚拟机迁移速度没有提升1. 迁移流量仍走管理网络 (vmbr0)。2. 存储不在万兆网络上。3. 源或目标节点CPU/磁盘性能瓶颈。1. 在“迁移”对话框中确认使用的网络IP是万兆段的。2. 检查虚拟机的磁盘是否存储在万兆网络上的共享存储中。本地存储之间的迁移速度受限于源和目标节点的磁盘速度。3. 使用iperf3确认万兆网络带宽正常。创建vmbr1后网络服务重启失败/etc/network/interfaces文件语法错误或VLAN配置不支持。使用ifquery -a --check检查配置文件语法。使用ip link add link enp4s0 name enp4s0.10 type vlan id 10临时创建VLAN测试内核是否支持。8. 最佳实践与工程建议规划与文档在动手前画好网络拓扑图规划好所有节点的IP地址管理网、存储网、业务网、主机名、VLAN ID等。记录下所有配置便于日后维护和排错。逐步配置充分测试不要一次性修改所有网络配置。先配通管理网络和集群然后逐台配置万兆网络并测试连通性最后再修改存储和迁移设置。每步完成后都进行验证。备份配置文件在修改/etc/network/interfaces、/etc/pve/corosync.conf等关键文件前先进行备份。Proxmox的Web界面在应用网络更改时也会自动生成备份。使用绑定Bonding提高可靠性如果你的迷你PC有多个万兆口或千兆口可以考虑使用Linux Bonding将两个物理口绑定为一个逻辑口提供链路聚合或主备冗余。例如将两个千兆口绑定为bond0作为管理网络提高可靠性。监控与告警配置Proxmox的邮件通知以便在节点故障、存储空间不足、备份失败时收到告警。可以利用pveperf命令或安装netdata、prometheusgrafana进行更细致的性能监控。定期备份虽然集群提供了高可用性但无法防止误删除或数据损坏。务必为重要的虚拟机设置定期的备份任务Proxmox内置备份功能并将备份文件存储到集群外的安全位置。安全考虑万兆内部网络如果不需要访问外网不要设置默认网关并在防火墙如pve-firewall中严格限制访问来源。及时更新系统和Proxmox VEapt update apt dist-upgrade。为SSH和Web管理界面使用强密码并考虑使用SSH密钥认证。性能调优巨帧Jumbo Frames如前所述在确信整个路径支持后启用mtu 9000。CPU隔离对于性能要求高的虚拟机可以使用CPU绑定cpulist或NUMA调优。存储缓存如果使用本地存储为虚拟机磁盘选择Writeback缓存模式可以提高性能但断电有数据丢失风险。对于有UPS的环境可以考虑。通过以上步骤你已经成功利用迷你PC搭建了一个具备万兆高速骨干网络的Proxmox VE集群。这个平台不仅节能静音而且具备了企业级虚拟化环境的核心功能集中管理、在线迁移和高可用性。你可以在此基础上部署各种家庭服务如媒体服务器、智能家居中枢、开发测试环境或小型业务系统享受灵活、可靠且高性能的虚拟化体验。