
9月初笔者给朋友课题组设计了一套小集群,为了省钱,存储(NAS)部分是自行采购散件DIY的,组网也使用了二手硬件。NAS和交换机从下单散件到组装、调试完毕花了10天,原计划等到集群部署完成后综合起来写一篇帖子分享出来,但期间出现了一些问题,计算节点迟迟没有到货,故先把NAS部分单独发出来。

采购这些散件已过去一个多月,行情有很大变化,因此价格仅供参考。
如果追求极致省钱,网卡也可以选用同为CX3 Pro芯片的拆机HP544+FLR。
18TB HDD没有选希捷EXOS X18,因为在Backblaze近几年的硬盘故障报告中,希捷EXOS大容量氦气HDD故障率远高于从HGST继承来的WDC Ultrastar系列。建议读者自行搜索Backblaze的报告。
在PCIe Gen 3平台上使用PCIe Gen 4 SSD是因为看中了致态7100的耐久度(推荐看此视频:BV19a4y137p3
这套方案刚好耗尽了LGA 3647平台上从CPU直接引出的44+4条PCIe Lane,对强迫症很友好。
比较遗憾的是该存储没有冗余电源,拉低了整个系统的可用性。
存储系统的基本环境是Ubuntu Server + OpenZFS + NFS over RDMA (RoCE),没有直接采用TrueNAS Scale,因为目前此系统不支持RoCE。用上了ZFS中所有有助于提升IO性能的特性,包括ARC、L2ARC (Cache) VDEV、ZIL (SLOG) VDEV以及Metadata (Special) VDEV。其中,ARC是192GB RAM,Cache VDEV是2块致态7100 1TB 2-way stripe,SLOG VDEV是2块Intel傲腾900P 280GB 2-way mirror,Special VDEV是3块致态7100 1TB 3-way mirror。
Data pool的策略是2组6盘RAID Z1 VDEV。由于所购买硬盘是同一生产批次的,故分别对每个RAID Z1 VDEV中的1块HDD进行“老化”,这样做可以在一定程度上防止VDEV中多块HDD同时故障。笔者所采用的“老化”手段是插到自己的服务器上运行一天4K随机性能测试。
交换机没有RoCE所需的关键特性,因此整个存储网络并不是严格意义上的RDMA网络,但后续的实测表明,仅在服务端和客户端主机上启用RDMA,并使用NFS over RDMA挂载共享目录,存储的随机读写性能也明显高于普通以太网方案。
交换机是某大厂自行定制的(即“白牌交换机”),刚到手时没有任何技术资料,噪音极大,且卖家称其仅支持40G和10G速率,不支持其他速率,建议当作傻瓜交换机使用。笔者不信邪,依靠个人经验和直觉断断续续摸索了几天,实现了LACP链路聚合、风扇转速调节、更改端口速率。期间还不慎把交换机折腾变砖了一次,经过研究,进入系统shell修复了配置文件。后来笔者把这些经验都手把手传授给了卖家。
▼机箱正面

▼机箱侧面

▼机箱背面

▼CPU、内存

▼安装CPU

▼主板

▼三件套

▼一堆致态7100 & 转接卡

▼傲腾900P

▼傲腾900P - U.2转接卡

▼一堆硬盘包装盒

▼一堆18TB HDD,贴了标签以便区分,“I”指的是连接到主板SFF-8643接口上的HDD,“E”指的是连接到HBA卡SFF-8087接口上的HDD

▼古董级HBA卡

▼古董级40G网卡MCX341A

▼给网卡和HBA卡的背面贴上导热垫,和M.2扩展卡的巨大散热片粘在一起,帮助散热

▼事后发现HBA卡温度依然达到了70℃

▼又加了一把TL-C12C

▼考虑到可靠性,给3组HDD分别接了一条大4P电源模组线,但是给系统盘用的SATA电源线没地方接了,只能再从下面拉回一个大4P接口,转接给系统盘供电

▼NAS上层

▼NAS下层

▼待机功率200W,国家电网战略合作伙伴

▼交换机(48*10G SFP+ & 4*40G QSFP)

▼主板架构图

▼BIOS首页

▼设置PCIe拆分和速率参数,速率强制设为Gen 3是因为实测auto的情况下某些SSD偶尔会降速到Gen 2或Gen 1

▼在BIOS中为系统盘配置RAID 1

▼先安装Windows跑个分,CPU功率230W,16核3.9GHz,对于第一代Xeon可扩展CPU来说这是很夸张的频率

▼R23分数19655pts,AMD Ryzen 7950X的一半

▼12*18TB HC550,Windows带区卷RAID 0

▼5*致态7100 @ PCIe Gen3 x4,Windows带区卷RAID 0

▼2*傲腾900P,Windows带区卷RAID 0

▼Windows SMB,默认启用RDMA,HDD池

▼Windows SMB,默认启用RDMA,傲腾900P

▼Ubuntu Server 22.04.3 LTS,额外安装了Desktop GUI,不要问为什么不一开始就装Desktop版,因为只有Server版才能在安装过程中选择RAID安装

▼配置RDMA,此为配置完后的ibv_devinfo -v命令输出(部分)

▼利用Windows PC的Internet连接共享功能,即使校园网有web登录认证机制,集群也可以统一接入校园网/互联网(本质上Windows PC充当路由器)

▼给接入集群万兆交换机的网卡添加2个IP地址,使集群子网与Windows PC互通

▼netplan网络配置,网关为Windows PC在集群子网中的IP地址(10.0.0.3),DNS与Windows PC相同(192.168.31.1),MTU=9000

▼使用ping工具确认服务器-交换机-客户端的mtu设置正确

▼创建ZFS pool,此为创建完毕后的zpool status命令输出

ZFS有大量可调的参数,参考官方手册:https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Module%20Parameters.html
笔者调节了以下参数,将其写在了/etc/modprobe.d/zfs.conf文件中,以便系统开机后能自动加载这些参数。

获得“zfs_arc_max=191106155315”的命令:
grep '^MemTotal' /proc/meminfo|awk '{printf "%d", $2 * 1024 * 0.95}'
应当根据实际情况设置比例参数,现在这台NAS只用于集群NFS,故系统服务占用RAM极少,留5%足够。
此外,需对父数据集手动设置atime=off
参数:

结果:

参数:

结果:

参数:

结果:

参数:

结果:

参数:

结果:

强行在这台NAS上安装了2片TITAN V,由于一颗650W电源不够用,又掏出了另一颗在床头柜上吃灰3年的电源。利用这套诡异的配置测试了TITAN V跑ReaxFF模拟的性能,测试结果将在未来单独发布。

