
StarWind VSAN Free on Proxmox白嫖一套高可用共享存储的完整方案做虚拟化最怕什么不是机器不够快而是“单点”。你辛辛苦苦把 Proxmox VE 集群搭起来节点互相 ping 得通、虚拟机也能在节点之间迁移结果一看存储——还是本地盘。迁移的虚拟机到了一个节点它上面跑的数据还在原来那台机器的硬盘里这种情况连冷迁移都做不痛快更别提什么高可用。我前两年在折腾 Proxmox 集群的时候就被这个问题卡了很久后来试了一圈开源方案最终在 StarWind VSAN Free 上找到了一个比较舒服的解法。这篇文章就把我当时的完整踩坑过程、配置步骤和几个重要的性能调优点全部摊开讲清楚。StarWind VSAN Free 是一个商业软件厂商 StarWind 提供的免费版本它的核心能力是把你每台物理节点上的本地磁盘通过软件定义的方式“合成”成一份高可用的共享块存储然后以 iSCSI 的形式对外提供服务。Proxmox VE 原生就支持 iSCSI 存储后端两者配合起来就能用两台普通的服务器甚至是只有本地 SATA 盘的老机器搭出一个带 HA 能力的小型私有云底座。这个方案特别适合测试环境、实验机房、边缘站点或者预算敏感但又不想放弃高可用语义的中小团队。1. 整体设计与思路拆解为什么是 StarWind而不是直接裸奔1.1 没有共享存储的 Proxmox 集群只能算“半套”先聊一个最基础的问题Proxmox VE 做集群的时候底层靠的是 corosync 和 pmxcfs节点之间的状态同步没问题但它本身不解决数据共享的问题。你在 node1 上建了一台虚拟机想把虚拟机迁到 node2需要让 node2 也能看到这台虚拟机的磁盘文件。这时候你有几个选择直接把虚机磁盘放在某个节点的本地目录然后开 Proxmox 的“共享目录”存储比如 NFS。上一块真正的共享存储设备比如 SAN 存储、NAS 存储。用 Ceph 这样的分布式存储把每个节点的本地盘聚合成池。第一种 NFS 的方案看似简单但性能一般而且 NFS 的单点故障问题很麻烦第二种方案对于家庭实验室或者小团队来说成本高得离谱一台入门级 SAN 的价格够买好几台服务器了第三种方案 Ceph 是好东西但三节点起步、万兆网络、内存要求高在只有两台物理机的环境下非常窘迫OSD 数量不够、网络带宽不够跑起来慢得让人怀疑人生。所以在两节点场景里StarWind VSAN Free 的优势就非常明显了它把两台机器的本地存储通过 iSCSI 做同步镜像每个写入请求都会同时落到两台机器的磁盘上任何一台挂了另一台还有完整的副本。对 Proxmox 来说这就是一块普通的 iSCSI 盘不需要装任何客户端代理。1.2 StarWind VSAN Free 的定位与限制白嫖之前先看懂规则StarWind VSAN Free 是免费版本但它并不是一个“阉割得不能看”的玩具。它允许你做 2 个节点的镜像每个节点存储容量上限是 2TB我实测在 Windows 管理界面里看的物理容量超过之后写入依然会报警告但系统不会立刻停止服务。对于测试环境、几十台虚拟机的小场景这完全够用。免费版和付费版最大的区别在于免费版只有 2 节点镜像不支持 3 节点以上的多副本。免费版没有官方技术支持有问题只能翻论坛、翻文档。免费版的 HA 切换时间没有付费版快但在我的实测中几十秒级别的故障切换是可以接受的。免费版要求 Windows Server 或者 Windows 10/11 作为节点操作系统因为 StarWind 的免费版本身是个 Windows 服务。这里有个容易踩的坑你需要为每个节点准备一份 Windows Server 的授权。虽然很多人用评估版临时跑但如果是长期生产授权成本得算清楚。可以考虑用 Windows Server 2022 的 180 天评估版做长期测试到期重装或者用其他方式解决许可问题。这是我当时实际采取的措施测试阶段完全够用。1.3 为什么不用开源那一堆DRBD、GlusterFS 和 LINSTOR 的实际体验在确定 StarWind 之前我实际上试过 DRBD Pacemaker 的方案。理论上可行但实际操作中要把 DRBD 资源、文件系统、Pacemaker 资源代理一个个串起来任何一个环节配置错了整个集群就处于“半脑裂”状态。尤其是 Pacemaker 的 fencing 配置没有真实的 IPMI 硬件看门狗两节点集群很容易出现“两个节点都觉得对方死了”的局面处理起来非常痛苦。LINSTOR 也试过它比 DRBD 纯手搓要友好一些但需要额外的 controller 节点和数据库架构复杂不说在两节点的场景下 controller 本身也成了单点。相比之下StarWind 的安装过程是一个标准的 Windows 程序安装包装完之后通过管理界面点几下镜像设备就建好了。它的核心同步机制是内部实现的不需要我手动编辑复杂的配置文件。对于一个“想快速把高可用存储跑起来”的人来说这种开箱即用的体验是无价的。我当然理解开源信仰者会嗤之以鼻但我个人的看法是工具是拿来解决问题的不是拿来修行的。2. 环境规划与硬件选型两个节点怎么配才不白花钱2.1 硬件需求内存、CPU、磁盘的底线在哪里StarWind VSAN Free 的官方要求其实不高但我结合自己的实践给出一个更务实的参考配置。每个节点至少需要 8GB 内存去跑 Windows Server 和 StarWind 服务但如果你要在这台机器上同时跑 Proxmox 的虚拟化负载超融合架构那内存按虚拟机的总需求再加 4GB 左右的系统预留来计算。注意节点本身の虚拟化层是 Proxmox而 StarWind 是以虚拟机的方式跑在 Proxmox 里还是直接装在物理机上这是一个需要想清楚的架构问题。我目前采用的是第二种物理节点装 Proxmox然后在 Proxmox 里开一台 Windows Server 虚拟机把物理磁盘直接透传给这台 Windows VM让它跑 StarWind。这就是常见的“超融合”路线存储服务和虚拟化服务在同一个物理节点上但彼此隔离在虚拟机里。CPU 的要求非常宽松两颗物理 CPU 的核心数不用太多8 线程基本就能跑得很轻松因为 StarWind 的主要工作是内存数据复制和网卡收发CPU 消耗并不夸张。磁盘方面建议至少两块盘一块小容量的 SSD 做系统盘Windows 和 StarWind 程序都装这里一块大容量盘做数据盘需要共享给 Proxmox 用。如果条件允许再加一块 SSD 做读写缓存StarWind 支持 L2 缓存性能会有质的提升。我的测试环境里用的是两块 1TB 的 NVMe SSD一块 240GB SATA SSD 做系统感受就是如果你直接用机械盘跑虚拟机开机速度会明显偏慢机械盘阵列做底层iSCSI 的延迟会直接体现在桌面体验上。2.2 网络规划千兆能跑万兆更舒服但必须做冗余存储网络的带宽直接决定了虚拟机的 I/O 体验。iSCSI 是基于 TCP/IP 的这意味着它完全依赖底层网络的质量。我的建议是至少准备两张千兆网卡用于存储流量最好配置两个独立 VLAN 或者直接物理隔离避免存储流量和虚拟机业务流量互相挤占。如果预算允许直接上万兆网卡和交换机体验是完全不同的。对于两节点镜像同步StarWind 的流量模型是每次写入都要同时写到本地盘和远端节点。所以网络带宽越大写延迟越低。千兆环境下单台虚拟机的顺序写吞吐大概能跑到 600-800Mbps随机写会低很多因为每个 64KB 的块都要做同步。万兆环境下基本能跑满机械盘或者 SATA SSD 的极限。这里有个非常关键的网络配置点MTU。iSCSI 流量建议启用巨型帧MTU 9000前提是你的交换机端口支持。我在配置时第一次没开 MTU延迟高不说还出现过偶发的写入超时。把两边的物理网卡、虚拟交换机、StarWind 的 iSCSI 目标、Proxmox 的 iSCSI 启动器全部统一到 MTU 9000 之后数据延迟降了一大截。2.3 架构拓扑一张图画清楚数据流向整个系统的数据流向是这样的Proxmox 节点上的虚拟机需要读取/写入磁盘。Proxmox 内核的 iSCSI initiator 发出 SCSI 命令到 StarWind 提供的 iSCSI target IP。StarWind target 收到命令后把写入的数据块同时写到本节点的数据盘和远端节点的数据盘通过内部同步链路。两边的写入都成功之后StarWind 返回“写入完成”给 Proxmox。因此对 Proxmox 来说它看到的是一块延迟略有增加但逻辑完全正常的磁盘。对用户来说任何一台物理机宕机StarWind 会触发 failover另一台节点上的副本立刻接替服务。Proxmox 的 HA 机制会发现节点故障把虚拟机在幸存节点上重新拉起。这套架构里没有专门的存储交换机也没有专门的存储网关两个节点既是计算节点也是存储节点是最典型的“两节点超融合”形态。3. StarWind VSAN Free 安装与镜像设备创建3.1 在 Proxmox 中创建 Windows 虚拟机并透传磁盘如果你像我一样选择在 Proxmox 里用虚拟机跑 StarWind第一步是准备一台 Windows Server VM。这里有几个要点首先虚拟机磁盘控制器建议用 VirtIO SCSI性能比 IDE 好不少。把 Windows Server 2022 的 ISO 挂载上去正常安装系统这没什么可多说的。系统装好之后记得安装 VirtIO 驱动包否则网卡和磁盘性能都上不去。接下来是关键的磁盘透传。如果你把物理数据盘挂成 Proxmox 虚拟机的虚拟磁盘那么在 Proxmox 层面就多了一层镜像/写入开销而且虚拟磁盘文件放在 Proxmox 的本地存储上StarWind 的同步就失去了意义——毕竟数据盘本身也依赖 Proxmox 节点。正确做法是把物理磁盘用 PCIe passthrough 或者磁盘透传的方式直接给 Windows 虚拟机。我实测下来最稳妥的做法是使用 IOMMU 的 PCIe 直通把整个 NVMe 控制器透传给 Windows VM。如果你用的是 SATA 盘可以用 virtio-scsi-pci 的控制器把物理盘以 SCSI 泛设备的形式透传也能用但性能和稳定性上 PCIe 直通更胜一筹。透传完成之后在 Windows 的磁盘管理里确认能看到这块裸盘千万别初始化它也不用分区。StarWind 会在它自己的层级去管理这块磁盘。3.2 安装 StarWind VSAN Free装了两次才明白的流程从 StarWind 官网下载 VSAN Free 安装包一路 Next 安装即可。这里有个值得注意的点安装完成后它会默认创建几个用于演示的设备包括一个 RAM 盘和一个基于本地磁盘的镜像设备。这些演示设备会占用资源建议安装完之后全部删掉然后自己创建正式设备。我第一次踩的坑就在这里安装完直接用了它的默认设备来共享结果系统重启之后发现设备状态异常排查了半天才发现默认设备使用的是临时路径。所以正规流程是删掉自带的 demo 设备格式化你要用于存储的磁盘再通过 StarWind 管理控制台创建新的 HA 镜像设备。管理控制台默认在安装的服务器本地可以用也可以装到你的 Windows 管理机上远程连接。第一次连接需要输入服务器 IP、端口 3261 和管理密码安装时设定。连接成功后右键“添加设备”选择高可用镜像HAImage然后按照向导选择本地的数据盘和远端的对端节点。这里有一个容易被忽略的参数同步模式。StarWind 有两种复制模式——同步和异步。同步模式保证两端数据强一致但写入延迟会叠加远端确认异步模式性能好但一旦主节点宕机异步落盘的这段时间差内的数据可能丢失。对于 Proxmox 虚拟机来说我建议使用同步模式。原因很简单虚拟机文件系统非常在意写入确认的顺序异步模式在主节点崩溃时可能导致虚拟机磁盘的元数据不一致轻则文件系统报错重则虚拟机无法启动。虽然同步模式让虚拟机的单次写入耗时更长本地写 网络传输 远端写但换来的是强一致这在虚拟化存储里比性能更宝贵。3.3 创建 HA 镜像设备的详细参数与步骤创建一个新的 HA 镜像设备主要步骤和参数如下右键“添加设备”选择 HAImage。指定本地设备名比如proxmox_lun。选择目标磁盘为刚才透传的物理磁盘Windows 里面的磁盘编号不要勾选“初始化”之外的其他选项。设置设备容量。这里会按 MB 为单位显示1TB 的盘输入大约 953674 MB。最关键的一步选择副本类型为“同步复制”并指定对端节点的 IP 和管理端口。完成向导后StarWind 会在两端创建同步任务把主节点的数据完整复制到从节点。首次同步过程如果数据量大可能需要一段时间。期间设备状态显示为Syncing等它变成Active就可以正常使用了。这里提醒一下首次同步会占用不少带宽和磁盘 I/O如果你还有其他虚拟机在跑尽量安排在低峰期做。4. Proxmox 接入 iSCSI 存储从无到有挂载 LUN4.1 在两个 Proxmox 节点上安装 iSCSI InitiatorProxmox VE 是基于 Debian 的系统默认带了 open-iscsi 但未完全启用。需要在两个节点上安装并启用apt update apt install -y open-iscsi systemctl enable --now iscsid iscsi装好之后在 Proxmox 的 Web 管理界面里选择“数据中心” - “存储” - “添加” - “iSCSI”。填入 StarWind 的目标 IP注意建议用两个节点上的同一个虚拟 IP如果没配置 VIP就填主节点的 IPIQN 选择自动探测Proxmox 会列出 StarWind 暴露的 target勾选后保存。如果是在两个 Proxmox 节点上同时添加需要保证两边看到的是同一个 target。StarWind 的 HA 设备在故障切换之后服务会从主节点漂移到从节点。为了不让 Proxmox 在故障发生时重新找目标建议给 StarWind 配置一个浮动 IPVIP两个节点上共享同一个 IP 对外提供服务。这样 Proxmox 始终连接同一个地址故障切换对上层透明。关于 VIP 的配置StarWind 官方文档有专门的 High Availability VIP 设置说明支持直接绑定到 StarWind 服务的网卡上。我当时是在 Windows 层面配置的故障转移集群的 VIP效果比手动在两个节点上配 IP 要稳定得多。4.2 创建 LUN 并格式化为 VM 存储Proxmox 把 iSCSI 目标添加成功后你会看到一个“未使用的 LUN”。接下来需要在这个 LUN 上创建文件系统或者直接划分成 LVM。Proxmox 支持在 iSCSI 存储上直接创建 LVM这也是我推荐的用法在“数据中心 - 存储 - LVM”里选择刚添加的 iSCSI LUN给它起一个存储 ID比如shared-storage。Proxmox 会在 LUN 上创建 LVM 卷组然后在卷组里划分逻辑卷给虚拟机使用。这种方式的好处是虚拟机磁盘文件是块设备级别的 LVM 卷性能比文件镜像格式比如 qcow2好不少而且支持快照和在线扩容。坏处是管理上不如文件存储直观但用过 LVM 的人不会觉得这是问题。存储创建好之后在创建虚拟机时选择磁盘位置为shared-storage然后就可以在节点间做在线迁移了。我建议新建虚拟机时就用这个共享存储而不是等虚拟机创建好再迁移磁盘。迁移磁盘的过程也不难qm move-disk命令可以完成但要多一步操作和可能的时间浪费。4.3 实测迁移与 HA 效果没有共享存储之前不敢想的事存储就绪后我立刻做了一次在线迁移测试。在 Web 界面里选中一台正在运行的虚拟机点击“迁移”选择目标节点几秒钟之内虚拟机就在另一个节点上继续运行了。整个过程虚拟机没有中断网络只短暂抖动了几百毫秒——这在以前我只有本地存储的时候是完全做不到的。接着测试 HA在 Proxmox 集群里给虚拟机启用 HA数据中心 - HA - 添加然后暴力关闭主节点电源我用的方法是直接拔电源插头模拟真实故障。大概十几秒后Proxmox 检测到节点失联开始在幸存的节点上重启这台虚拟机。这个时间取决于你的 failover 设置但总体在我的可接受范围内。StarWind 那边HA 设备会自动把服务切换到从节点Proxmox 还是连同一个 IP所以整个故障切换的链路是自洽的。5. 性能调优与“启动延迟”问题专项排查5.1 虚拟机启动延迟一个容易被忽略但是非常影响体验的问题在把 StarWind 存储正式投入使用后我陆续收到同事反馈虚拟机启动时GRUB 引导界面或 Windows 开机界面会出现明显卡顿像是“转圈转半天才开始加载”更有甚者在开机过程中直接等待数十秒。排查之后发现这个问题的根源并不在 StarWind而是 Proxmox 虚拟机的启动配置里磁盘设备的等待超时时间过长叠加 iSCSI 网络的识别延迟导致虚拟机在启动早期对磁盘的访问被“挂起”了。具体来说Guest 虚拟机内部的磁盘驱动virtio-blk 或 virtio-scsi有一个IO timeout参数默认值在很多发行版里是 30 秒甚至更长。如果 iSCSI 网络或者 StarWind 的响应稍微慢一点虚拟机就会等待一个完整的超时周期再继续。在只有一块系统盘和一个存储网络的环境里这种等待很容易被感知成“开机变慢”。5.2 三个时间维度的调优内核、多路径与虚拟化参数第一个调优点是虚拟机内部磁盘驱动的 timeout。对于 Linux 虚拟机在/etc/udev/rules.d/或者内核参数里调整 IO timeout例如echo 10 /sys/block/vda/device/timeout注意 vda 是你的虚拟磁盘设备名。更好的方式是用 udev 规则统一设置重启之后依然生效。对于 Windows 虚拟机可以调整注册表里的 DiskTimeoutValue通常设为 10 秒就够。第二个调优点是 Proxmox 层。对于 iSCSI 块存储建议在虚拟机配置里把磁盘的discard打开同时把缓存模式设为none或者writeback但不要用writethrough。另外如果你给虚拟机分配了多个 CPU 核心加一个iothread参数可以让磁盘 I/O 单独跑一个线程避免 VM 线程阻塞。我的配置如下disk: shared-storage:vm-100-disk-0,size64G,iothread1,cachewriteback,discardon第三个调优点是 Proxmox 虚拟机“启动延迟Startup delay”这一项配置。Proxmox 的虚拟机选项里有一个Startup delay单位是秒可以设置虚拟机在宿主机开机后延迟多少秒再启动。这个值的本意是给多虚拟机错峰启动用的防止同时启动导致存储和网络 I/O 浪涌。但它经常被误解——很多人以为设置了它能让“VM 启动更快”实际上它是让你“晚点启动”。如果你的虚拟机意外地在开机后等待很长时间才进入系统检查一下是不是给这台虚机设置了过高的 Startup delay也许问题根本不在 StarWind 而在你自己的配置。把不重要的虚拟机 delay 降下来把重要的虚拟机设为 0 或 1集群恢复速度会有立竿见影的改善。5.3 存储侧的性能调优缓存、队列与多路径StarWind 本身也有一些性能调优空间。在设备属性里可以开启 L2 缓存如果有一块单独的 SSD它能显著提升随机读性能。写缓存的策略建议设为 Write-Back前提是两端设备都有电池保护或者断电保护NVMe SSD 一般有。如果只是普通的 SATA SSD我建议用 Write-Through否则断电丢数据的风险会让人睡不着的。还有一点是关于多路径Multipath。如果你每个节点有两张存储网卡而且都接到了同一个交换机上建议配置 Proxmox 的多路径multipathd把两条 iSCSI 路径聚合起来既能提升带宽又能实现路径冗余。StarWind 的目标支持多连接Proxmox 开启多路径的方法是在添加 iSCSI 存储时把两个目标 IP 都填进去然后在系统层面启用 multipath-tools 并配置multipath.conf。如果网卡走的是不同 VLAN要做端口绑定bonding这个一般配置在 Proxmox 的网络面板里。6. 常见问题与实战排查记录6.1 StarWind v2v converter迁移虚拟机的最佳拍档在使用 StarWind 存储的同时我经常要用到一个工具StarWind V2V Converter。它最初是用来把 VMware、Hyper-V 等平台的虚拟机磁盘格式转换为 Proxmox 使用的格式例如 vmdk 转 qcow2但我发现它还有更实用的场景把本地已经有虚拟机的磁盘迁移到共享存储上或者反过来把共享存储上的磁盘导出到本地。举例来说我之前有一批运行在 VMFS 上的旧虚拟机要迁到 Proxmox 集群里。正常流程是用 qemu-img convert但 StarWind V2V Converter 的图形化界面更加直观选择源磁盘文件或直接连接到 VMware vCenter选择目标格式QEMU/QCOW2和目标位置可以直接写入 iSCSI LUN 或者 NFS 共享。整个转换过程是流式的不需要先把整个 vmdk 下载到本地再转。在批量迁移的场景里这个工具的效率很高而且我记得它支持后台转换任务你可以同时跑几个任务的队列。另外v2v converter 还支持把整个磁盘内容克隆到另一个块设备上。如果你在 Proxmox 里想把一台虚拟机的磁盘复制到另一个集群的共享存储里也可以用它作为中转省去手动 dd 的麻烦。6.2 常见问题速查表问题现象可能原因解决方案Proxmox 添加 iSCSI 存储时探测不到 target防火墙拦截 3260 端口Windows 防火墙未放行在 Windows 上添加入站规则放行 3260 和 3261确认服务运行中虚拟机开机时等待很久VM 内部 IO timeout 过长Startup delay 设置过高调整 virtio 驱动 timeout检查并降低 Startup delay写入性能低延迟高MTU 不统一存储网络和业务网络混跑统一 MTU 9000必要时万兆隔离StarWind 设备同步失败网络抖动对端 Windows 未启动查看 StarWind 日志事件查看器重建设备同步关系故障切换之后 Proxmox 显示存储离线未配置 VIPProxmox 仍连主节点 IP配置 StarWind HA VIP在 Proxmox 端设置目标 IP 为 VIP虚拟机磁盘迁移后无法启动磁盘格式或总线类型不匹配用 v2v converter 重新转换格式或检查 virtio 驱动6.3 一个让我印象深刻的疑难杂症同步链路断开的隐藏杀手之前有一段时间StarWind 的设备经常在夜深人静的时候报“同步链路中断”但白天正常工作。排查了很久最后发现是节点的电源管理策略Windows 默认在某些时间段把网卡设置为节能模式导致网卡自动降速甚至短暂断开。解决方法也非常简单在 Windows 的网卡属性里把“允许计算机关闭此设备以节约电源”勾选去掉顺便把电源计划设为“高性能”。这个坑特别隐蔽因为白天你手动去测试网络完全正常只有到了深夜才会触发。我建议所有跑 StarWind 的 Windows 节点都统一关闭网卡节能并且定期查看 Windows 事件日志中的网络断连记录。6.4 日常维护清单保持健康状态的几个习惯StarWind VSAN Free 跑起来之后并不是一劳永逸的我在日常维护中总结了几个重要习惯每周至少查看一次 StarWind 管理界面的设备状态确保两个节点的设备都是Active。StarWind 的存储日志写在 Windows 事件查看器里建议自定义一个视图专门筛选 StarWind 相关的警告和错误。Proxmox 集群里定期检查pvecluster状态和 HA 资源状态。ha-manager status是每天必看的命令。备份策略不要因为有了 HA 就放松。HA 解决的是硬件故障解决不了误删除和病毒加密。建议用 Proxmox Backup Server 或者至少用 vzdump 定期备份虚拟机到独立设备。最后分享一个我个人强烈建议的点如果你跟我一样是第一次在两节点上搭 StarWind Proxmox一定不要直接上生产数据。先在测试环境里把节点故障、网络闪断、虚拟机迁移、VM 重启这四类场景都演练一遍记录每个环节的耗时和异常输出。演练的过程能帮你发现很多文档里没有提到的小问题比如 Windows 防火墙默认规则、网卡节能、MTU 不一致、VIP 漂移策略等。这些问题在正常情况下不会露头但一到故障就全都冒出来到时候手忙脚乱可就不是一两句话能解决的了。把这些坑在测试阶段趟平生产切换的时候你会感谢自己的耐心。