服务器裂开了
上次家里停电,来电的时候服务器没有自动启动。而且启动之后,不知什么原因,BIOS 报告没有可用的启动盘,大概是因为之前自己编译的内核和system boot可能还是没有处理好的原因,最后还需要接上显示器然后进BIOS启动。这趟折腾下来,使用体验实在是不好。家里的电脑,不管其原本是不是很稳定,用作服务器的时候,稳定性还是很重要的,所以2024年度的折腾就提上了日程。
原架构
原架构是完全基于一台机器构建的。VM里面跑各个Application,单独Backup。VM里面的 extra storage 由 TrueNAS VM 和 OpenMediaVault (OMV) 提供。有一个 GPU VM 专门负责跑 GPU 负载。
TrueNAS 和 OMV 作为 VM 时,需要使用独立的 PCI 通道,直通到 VM,基本和直通 GPU 需要的配置差不多。
主板上面的 SATA 口主要是留给 Proxmox 用作 backup。 TrueNAS 同时还为 Proxmox 提供额外的 Backup storage。而两个高速的 NVME 组成 ZFS Mirror 为 VM 提供 root storage。
同时这台机器自然也是要接上 UPS 的。
128 GB 的内存保证了无论是运行 TrueNAS,还是 Proxmox 本身的 ZFS,还是 Application的需求,甚至在CPU上面跑不特别大的LLM,内存都是够用的。4C8T的CPU确实有点捉襟见肘。Jellyfin如果不使用iGPU的Quick Sync加速,就没办法搞定4K transcoding。
这套系统其实目前来看,运行的还是不错的。
- VM 里面的数据基本上都有 4 份以上
- Proxmox ZFS mirror (2 copies) + TrueNAS ZFS Mirror (2 copies) + Proxmox storage (2 disks, 1 copy per disk) = 6 copies.
- Jellyfin 通过 LXC 运行,可以使用 iGPU,达成硬件加速。
- 所有的 Application 入口都用 OPNSense 防火墙做隔离,只是可惜性能不够,无法长期打开 IDS/IPS。
问题
问题就是这个架构的扩展性不行:
- 最重要的 Storage 服务是通过虚拟机提供的。如果Promox挂掉,则连最基本的 Storage 都没有了。虽然理论上 Proxmox 不应该经常挂,但是由于 human factor 过重,各种毛病都是人类错误导致的,所以实际使用中,Storage 的稳定性就比较难堪。
- CPU 性能受限。4T8C意味着无法稳定运行 IDS/IPS 以及 CPU 负责的 transcoding。虽然 LXC 也可以搞定 Jellyfin 的 transcode。但是牺牲了 mobility,并且还要忍受 LXC 上面跑 docker 跑不掉的 VFS。
- 不方便未来的升级路线。Storage 和 Compute 以及 Networking 实际上很难同时兼顾。
- Compute 实际上需要的大量和CPU性能,对空间的需求并不是特别高,没有不需要很多的 SATA 口。实际上最近大量流行的 mini PC 实际上很合适做 compute node。一定程度上来讲,小型计算的需求和大厂推广的 Edge Computing 是非常吻合的。这也印证了为什么前两年 AsRock 的 ITX server motherboard 和 Intel Xeon D-1500 在 DIY server 领域有一定的流行。不过这两年都被大量的 mini-PC 取代了。
- Storage 节点实际上最大的需求是 Storage ports。包括 SATA, SAS,或者 m.2, U.2。不过对于 m.2/U.2 实际上在 Compute 节点上面更合适,毕竟 VM 里面的 IO 性能很多时候更关键。而 Storage 节点很多时候只是存 bulk data,或者 VM backup。
- Networking 的需求大多集中在 Ethernet port的数量,1G vs 2.5 vs 10G 网速上面。而对于纯粹的 Compute performance 和 Storage 都不是很在意。当然以上假设,如果网络升级到 10G 以上,或者 VM 通过 iSCSI 挂载 storage node 上面的存储空间,那么各个节点的各方面要求都会提高。如果这时还要考虑 All-in-one,只会更加复杂。
实际上这次的改动就是把 Compute node 和 Storage node 分离开。如果未来需要升级,则完全可以分开升级,各自的升级都会很方便,不会涉及把 VM 的数据挪到 Bare metal 的问题。
新架构
新架构就是把一个原先闲置的机器(3700x+RTX3090)拿出来做计算节点。因为是个 ITX 的小板子,所以内存只能到 64 GB。但是对于实际使用来讲,应该也是没有问题的。
计算节点
- 单NVME盘跑 VM,用 ZFS 来提高一下 data integrity,顺便获得 ZFS 的snapshot 功能。
- HDD 用来存 backup data。
- OPNSense 用来管理所有 Applications 的网络。
- GPU 用来跑 GPU 负载。
- 可以尝试使用 iSCSI 挂载 存储节点的磁盘。之前这么做不稳定因为 TrueNAS 是在 VM 里面,Proxmox 如果依赖 TrueNAS 这个 VM,需要把 Hooks 设定好。而且即使如此,还有有概率出问题。
- Proxmox 挂载 Storage 节点的空间做额外备份。
- 3700X 8C16T 的性能可以直接搞定 Jellyfin 4K 软解。不用再为 hardware transcoding 影响稳定性头疼。而且仅依赖 CPU,未来如果有第二台 Proxmox 的服务器,就可以尝试 migrate instance了。对于不太想入坑 Kubernets 的人来说,可能是更方便的方案。
存储节点
- 直接跑 TrueNAS。告别VM 。方便使用 TrueNAS 上面的各种功能,包括 UPS 的支持,VM 之类,以及 TrueNAS上面奇怪的给予 K3S 的单节点 Kubernetes .
- NFS, SAMBA 和 TrueNAS 上面跑的基础 Application 不至于受到计算节点的影响。
- 使用 TrueNAS 机器直接做备份更加容易,不需要提前设定很多 PCI Pass Through。现在只需要 插上,mount,rsync,umount,拔下就可以了。
- 不用担心折腾计算节点上面的网络,影响到存储节点。
- 主板上面和扩展卡的所有 SATA 接口都可以用来跑存储。大大提高了未来数据的扩展空间。
总结
新的架构分离了计算节点和存储节点。提高了可靠性,也为未来的可玩性留足了空间。
这次开始使用 AMD 的 CPU 跑 Proxmox,之后有时间记录一下有什么坑。同时也借这个机会,从头记录一下 set up 一个 Proxmox 机器的过程。