私家 homelab 篇一:NAS 集群硬件平台搭建
homelab 硬件搭建过程分享

前言

在家中老 NAS 在经历一次故障之后,作为一个热爱折腾的技术宅,决定进行一次比较彻底的设备升级,来解决若干年前第一次部署 NAS 在架构设计上不足而产生的一些问题。本次的折腾记录,会整理在这个系列的文章中进行分享,介绍下从零件开始在家中自己搭建准数据中心方案的过程,欢迎各位转发评论点赞。

第一篇主要涉及硬件平台搭建的相关介绍,笔者本人在硬件选择上对于捡垃圾还是买新品没有特定偏好,本着实用主义原则,满足需求即可,毕竟电子产品,指不定哪天发生革命性变化,就又想折腾升级了。

前方预警,因为笔者有使用 kubernetes 特殊需要,本次折腾采用 ceph 集群方案,不推荐无相关基础 Linux 使用运维经验的朋友来使用。

01. RAID 辛酸往事

早在 7~8 年前大学还没毕业的时候,组装了人生的第一台 NAS,当时花了 500 软妹币入了一台 HP ML350 G6 的双路古董塔式服务器回家折腾,配合 E200 阵列卡 + 机箱内硬盘架简单组了 RAID6,通过 Windows Server 实现局域网的 samba 共享,也没有考虑过架构问题以及后续的需求扩展,觉得只要能共享文件就行,甚至当时还在家中做了 AD 域来实现统一的账号认证。

到了两年前开始装修人生第一套房子的时候,终于有了放小机柜的位置,于是乎又花了不到 1k 的价钱,入了台二手的 HP Microserver Gen8,把服务器平台换到了这个机器上。因为这个小机器内部空间有限,放不下阵列硬盘,考虑到后续扩容,直接入了 Rackable 的 16 盘位硬盘柜,用 SFF8088 的 SAS 线连接到 P420 的阵列卡上来使用。正好老的阵列卡电池还出现了鼓包现象,直接给阵列卡配上电容式的备用电源,想着可以不用再特别关注电池寿命的问题。最终的成果就是下面图中的样子。

Gen 8

本来使用上面一直相安无事,直到 2019 年的年底,某天夜间做冷数据备份同步的时候,到早上起来看到服务器上提示 RAID 分区数据不可读。重启服务器以后,阵列管理器提示阵列配置丢失。最后通过尝试重新插拔盘柜里面的硬盘,才勉强恢复了阵列,但是发现有 15% 左右文件出现了异常。个人习惯上重要文件都是会有备份,丢失的主要是电影电视剧这样的大型文件,不过基于这次事故,还是对目前的数据存储方案感到忧心忡忡,决心是时候来做一次系统性的升级工作了。

当然,除了最要命的数据安全问题以外,还有不少其他的问题也已经让我忍了很久:

  1. 阵列重建速度过慢

    8 x 2TB 的 RAID 规模重建速度需要耗时 2 周时间,无法想象对于容量更大规模场景的重建时间。虽说不是 RAID 5 那样要担心重建期间坏掉第二块盘的问题,但是想想还是有些不可靠。

  2. 噪音问题

    HP Gen 8 的小机器关在机柜的柜门里面,总体上没啥噪音问题,不过外置硬盘柜都是按照工业环境标准设计的,完全不考虑噪音问题。当初为了解决里面那只 1U 电源的噪音问题,特意更换了风扇。然而机箱风扇因为不支持调速,风噪声音任旧非常明显,实测运行状态下可以达到 60 db,这个量级的声强虽说可以勉强被掩盖,但是夜间真的无法避免,所以当初特意把机柜位置安置在了客厅的一角(也许下次升级房子搞个地下室就没这问题了,不过地下室排水想想也有点头大😂)。

    噪音问题

  3. 可靠性不足

    NAS 本身不值钱,值钱的是里面的数据。家里服务虽说没有高可用 SLA 的要求,但是至少不能有丢数据的风险。实践经历证明,外置盘柜的模式存在阵列卡与盘柜之间连接渠道的单点故障可能性,加上可能是没有用 HP OEM 的硬盘,丢数据的风险更大。

  4. 主板扩展性不足

    Gen 8 的机器本身扩展性有限,插上一块阵列卡以后,就没法再加其他 PCI-E 板卡。千兆网络跑不满阵列速度的传输瓶颈日益凸显,即使 bonding 起来用,性能也很有限,都到了 20 年代,也是时候升级下 10G 局域网了。

  5. 横向扩展性不足

    单一服务器可扩展性也始终有限,更好的方案是将数据分布到多台不同的服务器上,能够直接通过添加服务器的方式来实现扩容。多服务器还有个明显的好处是可以在局域网里实现服务高可用,即使有服务器停机维护,任旧可以正常提供服务输出。虽然 windows server 也提供了集群存储的功能,但是有授权问题,个人更加倾向于开源的社区方案。

  6. 功能缺失

    业界已经进入了云原生时代,笔者本人希望局域网内可以实现 kubernetes 容器服务管理,需要提供能够自动调度的块存储设备管理功能。

  7. RAID 的固有缺陷

    RAID 方案有个相对要命的缺陷是同一个阵列中的的空间容量是按照最小容量的磁盘来计算的,家中场景使用和数据中心有区别,扩容周期往往比较长,往往添加硬盘的周期要按年记。买新硬盘的时候,我其实想考虑可以单盘容量括大,但是 RAID 的规则会造成多余容量浪费,从而限制了我的升级计划,除非替换所有硬盘,代价非常巨大。更经济的方式是可以直接像 LVM 那样混用硬盘。

  8. 外置盘柜电源远程管理困难

    Rackable 当年的这个经典洋垃圾盘柜设计的技术年代比较久远,远程管理只支持 rs232 的 console 口。为了这个设备,再搞个 console 交换机过来实在是不值,我也尝试用过普通 usb 的转接线来连接,不过不知道是兼容性有问题,还是我这台洋垃圾本身的问题,没有成功连上,所以这个设备如果是要开机的话,还需要到机柜手动启动,而且还要求比服务器早启动,使用比较麻烦。

    盘柜

02. 次世代方案

硬件平台的选择首先需要从实际的应用业务需求来考虑。前面已经提到,目前从个人需求考虑,想要在家里折腾云原生理念下贴合时代发展趋势的 Kubernetes 集群,搞容器化应用,微服务这些东西,少了集群存储显然不能愉快的玩耍。评估下来,最适合在家里搞的非商业存储解决方案无外乎 GlusterFS 和 Ceph 两种。早年 GlusterFS 对比 Ceph 其实性能优势还是比较明显的,不过现在 Ceph 出了 Blue Store 以后,优化了文件日志逻辑,性能差距并没有特别显著。且 Ceph 从最底层开始就是面向对象存储的设计理念,可以实现的应用更加广泛。显然,如果要在家里搞微服务的话,有一个私有的 S3 存储会更棒。当然 S3 服务也有 MinIO 这样的单机版工具,不过 Ceph 这样数据中心级的应用可以直接通过 RGW 实现集群服务,看起来很美好。当初第一次看到这个方案的时候,瞬间就有爱了的感觉😉。所以最终也不用多纠结,直接选 Ceph 的方案没啥毛病。

回归本篇的正题硬件部分。确定 Ceph 的方案以后,按照官方推荐的最小化部署方式,至少要有三台服务器节点才能保证数据的可靠性。当然,我在实际的环境中测试过,两节点的 Ceph 集群也可以正常工作,只是冗余度和数据风险承担力相对较差,数据 1:1 副本的情况下,安全性问题也不大。不过保险起见,加上 homelab 需要存储重要数据,部分会做到 1:2 的副本,所以为了后面省事,初始部署直接三节点起跳。

硬件的选择上,首先我已经有了一个 22U 的半高机柜,机架式安装可以做的整整齐齐,好打理,犯不着再去折腾传统平台,直接机架式设备搞起。加上准备部署 PVE 组成集群。所以选择的范围会考虑成品机架式服务器或者自己找机箱来组装机架式服务器,而不是成品的存储设备。下面来对比下两种方案的优劣。

成品服务器的优点:

  • 机箱设计/主板都采用厂商定制化设计,布局更加合理

  • Dell/HP 这类大厂提供的技术支持文档与固件支持更全面

  • 稳定性好,有全套管理工具

  • 安装维护方便

组装机的优点:

  • 价格实惠,成本可控

  • 可以高度自由的自主定制化

  • 可以更容易实现噪音控制

我的最终选择是自己组装,第一原因其实还是钱的问题,虽说本人现在也是一个即将还完房贷,经济独立,不用考虑妹子消费的单生 90 后,其实不差多少钱,但是也不想交智商税😂。相比于面向商用市场,动辄五六位数价格的服务器新机,组装机价格相当低廉,可以便宜一个数量级。即使是对比二手成品服务器,组装机的在相同价格上还可以选择到相对较新一代的平台。我不是买来开公司,也不需要厂商来给我解决技术问题。

品牌服务器的备件选择存在相当大的局限性,很多情况下,会限定选择厂商定制的配件。比如 HP 这样的对内存条有自家的 Smart Memory,阵列卡有自己的 Smart Array ,硬盘也有特殊的 OEM 定制来实现一些黑科技,如果选用通用配件的话,一方面很多黑科技加成开不起来,另一方面不兼容或者是数据丢失的风险。如果入了一家的坑,会受制于已有的备件,造成转换阵营的成本增加而产生障碍,显然不是一个 homelab 玩家期待的状态。

除了这些以外,品牌服务器的尺寸都比较固定,我的机柜进深 80cm,不适合常规尺寸的机器。而且这次我想解决下噪音问题,因为我发现到后期使用过程中,噪音问题是无论花多少钱都可能改不过来的,所以一开始就考虑进来。服务器的 1U/2U 电源 4cm 风扇就是噪音狂魔,自己装的话,省掉 GPU,电源被动散热都不成问题。

当然组装机也不是没毛病,最大的问题是遇到各种各样的困难需要自己着手想办法解决。想来咱可是 20 年前从小学生时代就可以自己组装 PC,写了十几年代码,Linux 环境摸爬滚打十来年的老司机,必须有信心解决各种问题🤓。

03. 装机

首先是主板的选择,机架式安装首先考虑的是可以管理,板载 IPMI 系统的服务器版就逃不了。机架空间有限,且装三台机器需要考虑成本控制,主板基本上考虑 microATX 的单路平台。民用 PC 机的主板选择很丰富,到了服务器平台组装的话 Asus 的板子太贵有点不值,基本上也就 Supermicro 的可以看看。最终是在 X11SSL-F 和 X11SSH-LN4F 这两款里面选择了相对比较便宜的 X11SSL-F。考虑到要用 SAS 盘,我选择直接上 HBA 卡,主板 SATA 口多对我没啥意义,另外要上 10G 网卡,四个 G 口也显得有点多余。唯一的不足是一块板省 500 块钱以后,少了一个 M.2 的插槽,扩展性上只能说勉强够用,不过能支持 ECC 内存总体上来看也够用。

一定还有人想说用 AMD 平台,农企的服务器平台方案选择实在有限,还是不用考虑了。加上十二年前遇到一台 AMD 平台旗舰级笔记本留下的糟糕品控印象,实在是不喜欢农企作风,收垃圾还是收牙膏厂的东西靠谱。

主板

参数

主板确定下来,CPU 的选择上,为了尽可能做到可以通过被动散热来减轻噪音,最终选择了 Xeon E3-1240Lv5 这款 Skylake 平台低功耗志强。马云家收垃圾,500 块钱一块 U,直接来三块解决问题。毕竟也是牙膏厂 14nm 的平台,25W TDP 配合机箱 PWM 风扇被动散热足够了,实际功耗估计 20W 不到的水平,4C8T 用来跑 homelab 场景下的日常低负载应用也足够,毕竟家里还有台 E5 的工作站是算力输出主力😉。

CPU

CPU

平台确定,内存的选择也就确定了,能用 ECC 当然要上 ECC。曾经我也没觉得 ECC 内存在实际使用中有多大优势,直到去年在一次生产环境服务器上遭遇 ECC 内存故障的经历彻底改变了我的看法。当时那台 HP 服务器 iLO 检测到 ECC 内存故障以后,操作系统层面可以完好的继续提供虚拟化服务,内存容量自动降级,甚至可以直接在 iLO 中获知哪一条内存出现故障,对于内存条多的场景,维护性体验简直太棒。ECC 带来的系统稳定性提升也很明显,普通 RAM 在出现内存故障时,有大概率会导致操作系统 BOSD 或者 Kernal Panic,最终故障排除也会相对麻烦。

E3 单路平台没有提供 Reg 内存支持,所以我这里就选择了频率 2400 的非 Reg ECC 内存,达到主板支持的频率上限。带寄存器的主要作用是对于大型应用场景来支持更大容量的内存同步,常见于双路以上的平台,不是典型的单路应用场景,所以一般单路平台不对 Reg 内存进行支持(其实也牙膏厂捞钱的手段之一)。另外,其实我的 CPU 只支持到 2133 的 RAM,稍微有点浪费,不过常规应用场景,从来没遇到过性能瓶颈出现在内存频率上面,只要能兼容适配即可,DDR3 代的内存性能理论上也是足够的,没有一味追求低时序,高频率的纸面性能数据。再算算每台机器的实际开销,按照 3x3x16GB 的规模来配置,单板插三条也没啥问题,虽说理论性能不如插满。

RAM

接下来是阵列卡,即使是 Ceph 集群搭建,为了接线的方便性,且能够兼容 SAS 硬盘,果断入了一块超微的 AOC-S3008L 卡来当 HBA 卡用。直接用 SFF8087 转 SFF8643 来连接机箱背板的体验比一块硬盘一根线好太多。这块卡直接选择直通模式固件即可,无需开启 RAID 模式。另外值得一提的是,这块开本身支持 SAS 12G 的标准,而且可以在主板 UEFI 下对各块盘的参数配置直接进行调整,比如是否开启磁盘缓存等等。

RAM

存储的主力 HDD 选择上,考虑到 Ceph 因为文件副本数量提升,空间使用上会比 RAID 有更多消耗。在原先阵列上可以拆下 8x2T 的 HDD 情况下,再次购入 6x6TB 的希捷 Exos 企业级 SAS 盘,二手行货五年保可以安心一点。

其实新版的 SAS 盘对一些老版本背板的兼容有个坑,会导致硬盘上电后盘片停转,之后可以开个番外文章专门介绍下如何解决。

HDD

网卡的选择 10G SFP+ 接口跑不了,毕竟 2020 年代了,要用发展的眼光来看问题。到了 10G 平台个人推荐能选 SFP+ 的设备就不要再选 RJ-45 的电口了,可适配性会跟宽泛,可以选择网线,光线或者是 SFP 的直连铜缆。甚至再 SFP 的交换机上插 PON Stick 还可以把进户的光猫给省掉。我这次选择的是马云家山寨版 Intel X520 系列的双口卡,经典的 82599 芯片方案,选择双口是要给 Ceph 集群内部数据同步提供通信渠道,而避免产生性能影响。网卡的选择上没有必要追新,带宽够用即可。另外,其实 Mellanox 的 InfiniBand 方案可以轻松上到 40G/56G 甚至 100G 的局域网带宽,其实也很棒,只是 IB 交换机的噪音实在不适合家里玩,家里也就不推荐了,目前场景下 10G 网络足够。

NIC

单靠靠机械硬盘和普通 SATA SSD 要想来跑满 10G 的带宽有点困难,而且 HDD 的 IOPS 实在堪忧,毕竟我还要搞 Kubernetes 应用。对于 Ceph 集群来说,简单粗暴的做法就是直接上 NVME。我选择了在每台机器上安装一块老一代 800G 版本的 Intel DC P3700,工业级产品无论是性能还是使用寿命方面,在家里用已经绰绰有余。

nvme

系统盘方面,我只需要装一个 PVE 的基本系统,马云家按照差不多 150 RMB 一块的价钱收了三块 Intel Pro1500 系列的 120G MLC SSD,不追求性能,当系统盘足矣。

SSD

接下来是最后一个重头戏,机箱+电源的选择,基本上自己找机架式机箱,也就只能从工控机的角度来着手了。我的需要是每台机器至少 8 盘位,我的 80cm 机柜进深只适合装下 22英寸长度以内的机箱,再长可能会导致后部的柜门关不上。而且这次为了考虑控制噪音,用 1U/冗余电源的方案一律 PASS,理想状态当然是完全被动散热的 ATX 电源,机箱风扇需要支持 PWM 调速。最终经过了各种找寻,我最后还是在马云家找到了 ED208H55 这个 55cm 的 2U 短机箱,装下 MicroATX 板子尺寸刚刚好,一点都不多,一点也不浪费。厂家提供了 ATX 电源后窗版本的选择,而且可以直接配到各种尺寸的上架导轨。

虽然工控机箱的不少做工整体比较一般,但是这个机箱有个让我稍微有些意外的设计是散热模块可以和成品服务器一样整体卸下,或者单个卸下进行维护,而且风扇模块固定的螺丝都垫了一层厚厚的减震垫圈,风道上也加了一层橡胶垫减轻噪音,静音设计非常适合家用环境,在工控机机箱中也是比较少见的。4x8cm 风扇在 900~1000 RPM 常规低转速通风的实际工况下,噪音表现也相当安静。单台机器只有这四个用于空气流通的大尺寸风扇,我觉得效果也很满意。机箱除了前面板提供了 8 个 3.5 英寸 SATA/SAS 热插拔抽屉外,机箱内还有两个 2.5 寸 SATA 盘的安装位置,可以给我来安装系统盘 SSD。

机箱

搞定机箱的问题,剩下来电源,就可以简单粗暴的来一个长城 0 分贝那款被动散热电源了,300W 标称功率用在一台启动时满载不超过 200W,标准工况单机功耗不超过 100W 的机器上也完全够用。

淘完所有垃圾以后的工作就是动手把所有的这些零件全部装起来,最近几年折腾品牌机准系统比较多,好久没有完全自己来装机了,一下子装 3 台的感觉真爽。

装机

上架 + 理线,就算第一阶段工作完成了。

04. 最终效果

上架

此外再提供下这次调整后,不同距离上的噪音情况实测。在机柜里还有台工作站工作的情况下,靠近机柜近距离声强在 50db ,一米开外的噪音可以降到 40db,算的上是安静图书馆的噪音等级,基本上达到可以 7x24h 工作而对家里其他生活使用没有影响的状态。噪音等级比我原先的 rackable 盘柜好了太多太多。

噪音

另外,Supermicro 的原厂 IPMI 虽然比较简陋,但是功能还是足够的,可以比较方便的查看到各个传感器的状态。并且提供了远程电源按钮控制,以及基于 web 的 kvm 管理功能。

IPMI

服务器硬件平台搭建部分只是万里长征第一步,后续关于组网,系统应用配置,Ceph/Kubernetes 集群的搭建都不是简单的事情😂。

最后的最后,虽然这不适一个适合普通家用的集群方案,不过还是希望诸位大佬们觉得喜欢的话可以转发评论点赞😉。


最后修改于 2020-01-29