我们不搞NAS,我们搞HomeLab!

不知道为什么,2024年的NAS市场非常火,本来非常小众的领域突然出现了大量的玩家,同时也有像绿联、极空间等不少厂商入局,并且无论是开源市场还是商用市场也出现了不少NAS操作系统。这就很迷惑了,像我这种类极客玩家其实很早就在使用本地NAS了,但是这一波新入局的玩家使用NAS与我们这种技术人员肯定是完全不一样的,为了区分两者的区别,我在外网听到一个非常贴切的词叫做HomeLab。所以对于这一波新入局的玩家称为NAS玩家,我们这种老炮称为HomeLab玩家。不要误会,我不是来拉踩的,而是每一个新晋的NAS玩家只要有一颗折腾的心,那么最终都会变成我们这种HomeLab玩家。我这篇文章针对不同的人其实意义也不同,下面我简单分类,请大家对号入座:

  • 目的型:对自己需求高度确定且一致,比如搞NAS单纯就备份照片/视频,甚至连它的系统都没有怎么进去用过,完全不折腾。那么算了吧,这篇文章不适合你;
  • 迷茫型:刚入门对NAS有了相对完整的了解,但是对其形态与意义持怀疑或者观望态度。请坐好,这篇文章应该能为你解惑;
  • 探索型:已经有了NAS但是对其能力处于探索阶段,希望进一步挖掘它的能力,探索新的玩法。也请坐好,本文就是为了你们写的;
  • 大佬型:已经在家完整搞了整套HomeLab,对几乎所有玩法都有了解。我会分享我的HomeLab架构,请大佬指教;

NAS的定义

NAS的概念其实是非常简单的,本质上就是一个共享存储的设备,不同于硬盘盒子,它能够通过网络访问,并且通过网络提供长期可用的存储服务;通过NAT穿透或者DDNS技术可以实现公网访问这个存储服务。既然是存储服务,那么能够提供的能力大多数都是与存储相关的比如说数据同步、数据备份、远程访问音视频、网盘、在线文档等等,这其实也就是传统NAS的能力范围了。

同时,NAS既然本身是一个存储设备那么它必然有CPU、内存、硬盘等传统计算机相关的硬件,这也使其具备一定程度的计算能力,由此如果你的NAS设备性能足够那么随带可以运行容器服务、虚拟机等等功能,借由这些功能你便可以拓展使用一些轻量级的应用,比如说流媒体、笔记、记账、个人看板等等一系列开源的应用,这些应用往往也可以通过浏览器远程访问并且持续提供在线服务能力。好了到此为止,上文我所定义的NAS也就是这些能力了,这些也是你购买厂商原厂NAS能够获得的能力。

HomeLab是个啥东西

我们思考一下,上文提到的NAS产品是否有什么短板或者说不足,我自己有下面这些总结:

  • 性能:一般NAS设备CPU都是低功耗的消费级CPU(比如N5105、N100),这些CPU单核能力可以但是核心数量太少,同时家用NAS内存插槽有限,内存总量也很低,它们可以完成一些轻量级应用,但是复杂计算肯定是不足的;
  • 网络:家用的NAS设备给你两个2.5G的网口都是良心的厂商了,但是对于存储本身的性能而言,2.5G其实不算是高性能,我这么说吧连SATA3.0接口都可以提供6G的速度,更不用说NVME设备了,所以NAS就其定义而言,这点网络提供的存储性能是完全不够看的;
  • 可拓展:一般厂商提供的NAS设备都是如2盘位、4盘位这种,并且这些硬盘大多数情况是组成了冗余阵列,这样以来当你配置好NAS后续发现存储空间满了之后,这个拓展就是一个要命的事情了;还有另一个维度的拓展就是接口的拓展,比如说想要加两个固态、加两个网卡、加两个显卡,面对这些接口级别拓展的,这种NAS设备基本上无能为力;
  • 能力范围:NAS设备究其定义最终还是在提供存储及其相关服务,那么如果想要设备提供计算、编译、网络服务等等其他服务这就完全看厂商能够给你开放那些能力了,一方面受限于硬件性能与系统很多事情你是做不到的,同时由于厂商系统的封闭性,很多能力性能够你也很难拓展;

所以基于NAS的功能范围与性能瓶颈存在的明显短板,对于我们这类折腾爱好者而言,我们需要的其实不是NAS本身,而是一整套集成计算、存储、网络等能力的家庭服务器环境,他是NAS的超集,这便是HomeLab。进一步的讲,这套架构应该是一系列设备的集成包括路由器、交换机、终端设备与软件、计算服务器、存储服务器等等构成的一个家用私有云平台。

看到这里估计不了解里面门道的朋友心里面已经开始打退堂鼓,可能会觉得这套方案相较于厂商NAS肯定贵了不止一个数量级。不用担心,作为一个穷人,我从一开始就是图吧垃圾佬出生,如何花小钱办大事才是我们折腾的意义。加之我工作多年,公司的私有云/公有云服务设备也是我在架构与管理,所以我即知道正统的大道应该怎么走,也知道如何找到稳定便宜的野路子,下面我就详细介绍一下我是如何架构部署我的家庭私有云的,当然也包括我拿它干嘛。

垃圾佬的HomeLab

作为一个垃圾佬,同时也是常年使用企业级设备的用户,我比大部分人都深刻的知道消费级设备与企业级设备的差距能有多大。这里差距来源其实不是由于资本家的良心或者花多少钱办多少事,而是由于企业级设备都是有保修与原厂服务的,比如说我买了你的存储系统,只要这东西在保修期出问题,无论是设备硬件还是里面的数据/软件你都要负责到底。这个服务虽然很贵,但是者也给厂商做了限制,这么以来厂商不得不使用最好的东西保证设备稳定,不然的话这个售后的赔偿怕是是要折腾死他们。你肯定没有听说过你买的NAS因为断电导致数据丢失,厂商还上门帮你找回对吧。但是这个事情企业级设备供应商就需要提供这个售后能力,所以哪怕是已经运行了十多年被淘汰的企业级设备它的稳定性也要大大强于消费级设备,都不需要思考,因为设计伊始两个品类就不是一个东西。

所以我们组建HomeLab肯定是找企业级设备作为基础设施的,那么企业级设备贵的问题应该如何解决?那就是捡垃圾,所谓捡垃圾就是去购买二手的、机房淘汰的服务器,这些设备的价格可能会突破你想象力的极限,下面隆重介绍我的硬件设备:R730XD

这是一台2U的机架式服务器,同时这是一台上市超过10年的设备,如果我没有记错的话,DELL这台R730XD同时也是2U双路通用服务器这个领域里面全球销量最高的存在。为啥这台服务器入了我的法眼呢?各位不妨看看他的参数和那无敌的拓展能力:

  • CPU:支持双路E5V3/E5V4
  • 内存:最高24个DDR4 ECC内存,最大能到1.5T内存
  • 硬盘:12个3.5寸SAS/SATA盘位 + 2个2.5寸SAS/SATA盘位 + 4个.5寸SAS/SATA盘位(可拓展的)
  • PCIE拓展:三个半高PCIEX8(也可以合成一个全高PCIEX16),一个全高PCIEX16,一个全高PCIEx8
  • 网卡:除开PCIE拓展外,有独立的网卡通道支持2千兆2万兆接口网卡

这个配置与规格,可以说是吊打主流NAS提供的可怜配置了,最关键的是价格,我就我采购的设备给大家算一个总价(这是我去年年初购买的价格,快两年了):

  • CPU:两个E5 2680v4,共计24核心56线程,70块一个,共计140块
  • 内存:三星DDR4 ECC 2400T,16g一根,共计256g也就是16根,每根80块,共计1280块
  • 系统盘:2块英特尔S3610 1.6T,一个480块,共计960块
  • 数据盘:4块希捷银河6T SAS硬盘,一块300块,共计1200块
  • 计算卡:英伟达特斯拉P4,共计380块;
  • 服务器主机:包括H730整列卡,700W双电源,全部硬盘托架,共计980块

所有东西都是包邮的,全部到我手里之后一共就是4940块,咱们有一说一,这点钱你去买成品NAS能买到什么东西大家心里有数就行。我这套配置首先便宜是一回事,最主要的是他拥有极强的拓展能力,就目前而言我也只用了一个全高PCIEx8和两个2.5寸硬盘位,4个3.5寸硬盘位而已,剩余的配置你是可以后续根据你的需求逐步加码的。同时所有的东西本质上都是企业级别淘汰的垃圾,我大概说一下为啥怎么便宜,有什么缺点。

  • E5 2680v4这玩意是十年前的CPU了,在当年是大哥大级别的东西,但是今天嘛,单核性能几乎没法看,多核心上主要是线程多,不过由于指令集太老了加上IPC性能较差,实际运行多核任务也要看具体的任务类型,特定任务能吊打12代I9,部分任务又会被新I3吊打,但是无论怎么说它的规模在这里,对于服务器应用而言大部分对CPU单核都不敏感,所以已经很强悍,阿里云直到今天轻量级应用服务器用的还是E5V4这个系列的CPU。再说了70块一个你要什么自行车。
  • 内存和数据盘便宜的主要原因是他们是服务器专用的设备,大部分消费级设备是不支持ECC内存和SAS硬盘的,所以相较于普通的硬盘与内存这会便宜很多,但是你要说绝对性能其实差距不大,不过稳定性而言这两暴杀消费级设备。
  • 系统盘S3610也是古早时期的企业级固体,性能在同期产品中算是普普通通的水平,并且今天NVME固态的性能来说,这玩意简直没法看,但是它是MLC颗粒,设计寿命10.7PB,卧槽,以我的使用量来看,可以传给我孙子他都不一定用的坏,可以当传家宝了。
  • 特斯拉P4相当于一个gtx1080的性能,这个卡只能用于计算没有显示输出,所以相比1080他跟不要钱一样,我用来转码刚刚好。
  • 主机就是机房淘汰的垃圾了,加上这玩意有大又吵买的人很少,当然便宜了。但是无论是电源还是整列卡或者风扇都远远低于设计寿命,我们按照5年期预测,稳定性肯定是足够的。

所以一顿分析下来,可以得出两个字:完美

All In One 软件与网络架构方案

一般来说,不搞私有云或者服务器管理的朋友会直接搞个NAS系统装到服务器上,这种方案我是反对的,我建议各位和我一样,服务器物理机上安装虚拟化系统,然后在虚拟化平台上面再安装你需要的操作系统,由于虚拟机的可拓展与可迁移性,你可以快速备份、迁移、新建任何虚拟机以满足你后续的拓展需要。在虚拟化系统上目前有如下选择给大家参考:

  • PVE:基于Debain11,开源免费,可以随意拓展,借由Linux社区几乎可以驱动任何硬件设备,虚拟机基于KVM稳定性和性能都很不错,而且设备直通非常方便。对自己技术有信心或者爱折腾的话,这是首选的操作系统;
  • EXSI:VMWARE的商用虚拟化系统,特点是非常稳定,性能表现也很不错,设备直通相对复杂,同时由于闭源你想要拓展官方不支持的东西就非常难受了,如果不太有折腾的欲望,想要稳定的系统,那么这个就是首选;
  • UNRAID:基于一个非常古老的Linux发行版,虚拟化基于KVM稳定性和性能也可以,同时系统级别支持Docker容器,可以快速部署应用,本质上就是一个NAS系统,而且使用JBOD方案近期加了ZFS支持,相较TrueNas已经算是可以插墓碑的存在,个人不建议使用;
  • HYPER-V:我使用过最麻烦的虚拟化平台,无论是管理还是后续拓展都很不方便,但是它拥有极其好用的显卡虚拟化方案,如果你完全不用Linux的话,这个也行吧,但是我个人不推荐;

后面就是将部分设备直通给虚拟机,部分设备虚拟化给虚拟机,然后根据自己的需要创建对应的虚拟机即可,最终我的虚拟机分布与设备如下:

首先我这套方案有几个点需要单独解释一下:

  • P4计算机使用了NVIDIA的VGPU方案虚拟化了4个虚拟显卡,分别给到三个k8s节点和开发服务器(同时也是编译服务器)上,这样的话单独任意节点都具备CUDA计算能力和转码能力。
  • 四个SAS数据盘直通给TrueNas虚拟机做了ZFS-RAIDZ1数据盘,其中媒体等大文件读写走NFS、数据库等高IO小文件走ISCSI共享给K8S集群作为持久卷使用,同时大文件也统一权限共享SMB给Windows当共享盘使用。
  • 单独找了一个千兆网口直通给OpenWrt进行拨号,其他所有网口桥接到虚拟网卡作为OpenWrt的Lan口,这样所有虚拟机包括PVE都可以上网,并且下接交换机是万兆网卡,没错我是万兆内网。
  • PVE挂载了TrueNas的一个单独数据集的NFS作为备份卷,专门存储虚拟机备份(每个虚拟机/每天一次)。
  • TrueNas部分数据集(主要是重点应用数据)每天同步到OneDrive作为云备份。
  • 使用Cloudflare穿透的原因主要方便,我之前使用的frp速度虽然很快但是要求自行部署,同时也暴露了IP不是很安全,最终Cloudflare是相对比较不错的选择。
  • 如果是需要高速低延迟访问的服务,则通过DDNS转发即可。

这套方案可能有朋友会说我这是不叫做All in one,应该叫做All in boom,这里我必须辩解一下。传统意义上而言,将网络设备、计算设备、存储设备分离是一件相对标准的做法,原因在于设备运行应该彼此独立从而避免单节点损坏导致整个系统无法工作,比如说计算设备没了你的网络和存储应该还可以正常工作。这个是传统的企业应用场景下固然没有问题,毕竟我们需要保证7×24小时不间断服务,这种级别的容灾能力肯定是应该的。但是代价是什么呢?很明显是成本,如果我个人家用也要做到这种级别,不好意思我又不是王思聪,搞个服务器就跑个分。同时就All in boom我还有几个需要讨论的点,第一是数据安全,这台设备的存储固态Raid 1 + 四个SAS盘构成的ZFS-RAIDZ1,所以我们的数据安全性上还是有冗余的,并且由于ZFS提供了非常便捷的快照机制,我甚至可以每一个小时做一次快照以保证数据误删除,如果对此还不放心,那么重要数据也做了云盘冷备份,所以数据而言,放心不会爆炸;第二是应用安全,所有虚拟机都是KVM意味着他们可以快速迁移到任何支持KVM的虚拟化环境,甚至可以快速迁移到我的PC上跑,同时所有虚拟机(包括路由虚拟机)也都用每天一次的备份,假设我随意折腾搞坏了一个虚拟机我也可以通过备份进行恢复;第三是硬件安全,虽然用洋垃圾硬件安全性不高,但是我不吹不黑,我的企业级设备寿命是哪怕已经工作了10年,它的剩余寿命肯定都是大于绝大部分消费级的设备,比如叠瓦硬盘、QLC固态等,甚至可能你不知道,像N5105、J4125这种低性能的CPU设计寿命估计都不超过10年。

我的HomeLab上运行了什么?

软路由

一开始我使用的是LEDE大佬的固件编译的OpenWrt,后面由于IStoreOS看着很舒服就换了,现在我选择的是immortalwrt;大致说明一下我为什么这么选:一开始LEDE的OpenWrt主要是性能和稳定性,但是刚刚开始用的ARM开发板跑的软路由,后面都升级E5的处理器了,至少对于软路由,完全不会有性能上问题所以就弃用了;下一个是IStoreOS,非常漂亮且方便的OpenWrt改版,到现在我都认为很适合新人使用,但是对我而言IStoreOS提供的插件商城、NAS功能、Docker等都是我几乎都是用不上的冗余(还有其他虚拟机),不够简洁,加之到现在都没有升级到最新内核导致我用不上😼😼😼的新内核,所以也废弃了;最后是Immortalwrt,简直完美,轻便、快捷、干净、稳定还拥有最新的内核,就是它了。PS:因为我是虚拟机,所以我整个迁移的过程其实不需要重装什么,直接给虚拟机换不同的虚拟硬盘就行,在此过程中不爽我可以随时退回之前的版本,这就是虚拟化。

然后软路由上由运行了什么东西呢?主要就是下面这些(可以点击跳转):

😼😼😼

这个我不明说,你们可以猜是个啥,当然也没有点击的连接了

对于软路由而言上述服务已经可以很好满足一个网络设备在我使用环境下的所有需求了。

存储服务器

存储服务器我使用的是TrueNas,其实这个相当于提供了标准存储能力,国内有开源的NAS存储系统,其作为专业存储而言还是太低级了,商用的比如Unraid这类NAS系统提供的备份与快照能力也差了一些,更不要说它刚刚才支持ZFS。你要是需要真正的专业级别稳定的开源免费集中式存储服务器,那么TrueNas是我用过的存储系统中这么多以来最好的选择。

这里需要其实就很简单了,有两个东西需要详细说明一下:

  • 为什么不直通整个磁盘控制器:这是因为我还有两个固态是作为PVE的系统盘,所以不能直通整个控制器,只能直通硬盘本身,显示整列卡直通到系统,然后PVE再直通给虚拟机,其实最终效果是一样的。
  • 为何需要同时提供ISCSI、NFS、SMB协议:这里的NFS和SMB其实主要是提供媒体文件、备份文件等大型文件,他们是同一个数据集,只不过是SMB用于PC挂载进行快速数据管理,而NFS是交给K8S集群里面的pod进行挂载;ISCSI是独立的数据集,它主要的作用是提供高频次IO操作的应用存储,比如说数据库。

开发服务器

开发服务器我使用的AlmaLinux 9.5,后续还会持续升级内核(主要是Nvidia的vGPU驱动无法支持最新内核),之前使用的CentOS 8,血的教训。顾名思义这台虚拟机是提供的开发环境,能够让我远程进行开发工作的。这里有一个你可能想不到的东西,这台服务器虽然有虚拟显卡,但是没有GUI!因为我将所有的开发IDE全部实现在浏览器运行,目前主要是这些东西:

我之前专门写了一篇文章说明这个环境是如何搭建的,《搭建基于云的开发环境》,各位可以点击去看看,其实理论上你可以实现浏览器访问Jetbrains全家桶,包括不限于WebStorm、PyCharm等热门工具,只是对我而言我更加习惯VSCode而已;除了这些工具,开发服务器上还有所有相关开发环境、编译环境等。自从我去年底搭建这个环境之后,用了整整一年了,我个人电脑、笔记本上的开发环境全部移除了,毕竟这台虚拟机有16核心,64G内存,干什么开发都够了,并且只要有网我就能用浏览器远程访问开发,任何瘦终端都可以处理重型开发任务,这种环境和人走的云IDE基本上用习惯了就回不去了。

应用服务器(Kubernetes集群)

首先使用K8S显然是习惯使然,我从20年左右就开始用K8S单纯习惯了后很少会裸机跑Docker或者Podman,实在不行哪怕垫一层K3S我都愿意。然后自然而然容器运行时不是Docker了,而是containerd,但是这都不是重点,核心问题在于为啥要三台虚拟机集群?何况你这三台虚拟机都运行在同一个物理机上面,我这里就出来解释一下。这么做的主要原因如下:

  • pod数量限制:如果不创建集群,单个节点最多只能运行110个pod,这样一来,除开系统核心服务使用pod之外剩余给我们应用的pod数量就更少了
  • 资源隔离:虚拟机的核心优势便是隔离系统资源,如果某一个我的服务如果出现内存泄漏、CPU死锁、网络IO占用等势必会影响其他服务(相信我,容器隔离不可靠),如果是集群的话,pod是可以跨节点迁移的(持久卷是NFS或ISCSI)这样可以保证服务不受影响;

那么我在这上面运行的东西就非常多了,包括Kubernetes自身的pod,我个人项目开发测试的pod,和各种工具服务pod,一共跑了超过170个pod。实在是没有办法将每一个运行的服务都说一次,我只能捡我认为不错的给大伙分享了:

假设你不知道可以在服务器上运行什么服务,希望上面这些我最常用的服务能够帮助你更加有效的利用自己的HomeLab,当然除开这些应用之外,还有开发相关的数据库、消息队列等等东西大部分人可能用不上我就不提了。

后续的拓展计划

我的R730XD不知道各位有没有发现其实还剩余一个万兆网口和三个X8的PCIE拓展,我现在的想法是购买三个AIC固态然后直通给TrueNas作为一个单独的数据集,将之前的ISCSI迁移到这个数据集里面提升IO性能,当然这个还不是重点,主要目的是为了共享一个大型的ISCSI磁盘给我的电脑用。然后单独再购买的一个万兆交换机,通过那个R730XD上面单独的万兆网口结合我的电脑再组一个单独的万兆子网,这个独立的网段仅仅作为ISCSI存储的网络,这样一来哪怕我把整个万兆跑满了也不会影响普通网络的其他设备使用,最妙的事情是这个ISCSI磁盘访问的数据集与其他机械盘的数据集不同所以无论是网络性能还是磁盘性能都不会有什么影响。你可能会问,搞这个东西有什么用?假设我告诉你这个ISCSI磁盘专门拿来装游戏,是不是很兴奋?我的电脑上的M.2固态其实已经插满了并且无法拓展,后续只能拆掉当前的硬盘买新的,这样的话如果我可以直接拓展服务器并且给电脑用不就行了吗?有些不明真相的朋友可能会诧异通过网络访问硬盘是不是不靠谱,这么说吧,一般网吧的无盘系统就是这么玩的,并且别人大多是其实千兆网到终端。我这个是万兆,并且是独立的网络线路专用于存储,也就是由PC与存储构成SAN模式:

经过我现在的测试,如果仅仅游戏这种应用别说万兆了,一般千兆或者2.5G网络其实已经足够了,万兆情况下改方案的性能应该超过绝大部分SATA固态的性能。由于ISCSI提供的块存储能力,对于操作系统而言本质上就是在访问本地磁盘,所以也不存在任何兼容性问题,可以说是完美。如果后续有这个方案实施了,到时候我再和各位分享。

总结

其实本次我只是非常宏观的给大家介绍了一些我自己搭建的HomeLab的架构和使用到的服务,如果你有基础的话,基于这个架构也会给你提供部署的思路。但是如果各位认为这种宏观的介绍对你没有什么指导意义,更希望我将具体的执行步骤和方式给大家讲讲,比如说如何实现显卡虚拟化、如何解决NFS/SMB权限问题、如何共享ISCSI部署、如何备份存储于虚拟机等。那么给我留言吧,告诉我大家想要看什么。

我们不搞NAS,我们搞HomeLab!》有4条留言

  1. 这个架构太牛了,相比之下我的Nuc外挂存储All in One方案就太捉襟见肘了,不过我更感兴趣这一套下来的功耗和发热噪音问题怎么解决的,如何说服家里人在家装个机柜,哈哈哈哈

    1. 😂😂😂
      戴尔的iDRAC可以控制风扇转速,其实噪音问题不大;
      功耗势必比传统方案高,但是整体来看可以接受;
      说服家人这个事情,那就只有各凭本事了;

留下回复