垃圾佬的HomeLab(三)

2021/09/30 Prose

homelab developing log

NAS存储架构的重建

motivation

在发现以及体验一些数据丢失的惨案后,我开始重构家里NAS的存储环境。前文提到过,因为个人的需求和预算,将NAS数据手动分为了三个可靠性level:

  • 高:Onedrive提供文件历史版本和防止误删除
  • 中:专门的备份盘定时备份
  • 低:无冗余

以此简单保证高可靠性文件能实现多副本、异地存储。

Q:为什么不使用RAID或ZFS? 8 A:磁盘性能不均匀(顺序写:80~200+MB/s);对可用性要求低;硬盘是迭代增加的;有弹性增扩容需求;etc

同时NAS搭建http server向公网暴露webdav+tls,内网暴露samba等接口。因为盘多又乱,filesystem从NTFS到XFS都有,为保证使用的连续性,使用在userspace的mergerFS来做统一管理。

机器主要承担内网代理、HomeAssitant、media encoding (decoding) server和一些耗时任务等。

challenges

可靠性

  • 直接透过webdav接口时,高权限的用户做出的文件误操作不可逆,如删除或编辑。某些情况需要手动作版本维护。
  • Onedrive个人版仅有5GB空间,需要版本管理的文件远远超出。同时教育版并不能通过第三方API来访问,所以只能在windows下来做同步。

性能

  • 没有找到webdav的windows client可以提供类Onedrive内嵌文件资源管理器的同步策略。类似Raidrive当做网络驱动器挂载的策略如果网络不好就直接失联,而且Raidrive的缓存策略挺傻的。
  • mergerFS套samba的性能相比webdav套mergerFS或samba映射原始FS的性能,只有不到1/3的吞吐。

method

reliability

Seafile

Seafile是一个开源的,跨平台的文件托管软件系统,可以提供文件修改历史版本、回收站等功能。我基于docker-compose部署了seafile pro版本,具体教程参考官方。注意这里出现了docker和host的网络映射,router和host的网络映射,共两层。需要小心配置Nginx。

seafile的文件是分块存储的,因此本地访问则通过webdav通过docker网络进行挂载到本地。体积大的可靠性需求低的文件(媒体、游戏等)不会进入到seafile,直接保存在磁盘的文件系统上。这个策略也可以保障减少性能损耗。另外seafile的移动端也支持同步照片文件。

seafile内嵌的同步管理,群晖的windows客户端也有类似的功能:
image.png

cloud (onedrive)

需要云存储的文件是seafile内文件的超集。如果cloud的backend使用的是onedrive,skilion/onedrive就可以进行onedrive --syncdir /mnt/data/sync_path来上传。大部分重要的文件都是小文件(e.g. dot files, scripts, workplace..),影音、剪辑等场景的大文件不会进入cloud。

注意,因为不再需要onedrive来提供修改历史,所以本项的关键功能就是提供异地存储副本,而任何一个云存储都可以实现本点(不考虑审查的话,比如阿里云盘等)。所以解耦了两个功能,甚至可以做负载均衡,提升了scalability。

image.png

注:阿里云盘可以使用webdav-aliyundriver

冷备盘

原来的冷备盘也就是一个使用频率低,但连接在sata上的盘。由于缺乏APM的支持,休眠策略执行的不好。更换成了一个通过USB连接的硬盘,通过USB硬盘盒来实现无访问则休眠(standby)的需求。冷备盘需要定期rsync的数据是cloud上数据的超集,同时包括dd系统盘得到的img。冷备盘的意义以低功耗的形式,就算电脑炸了也可以提供一个local checkpoint。

不需要可靠性保障的数据

主要是一些可以通过PT获取的媒体等资源。这些就不会进入到seafile,也另外搭了一个webdav来使用。

规避mergerFS+samba的性能损失

直接目录下放一堆软连接,然后改samba的link支持config:vim /etc/samba/smb.conf

[global]
# ...
# ...
follow symlinks = yes
wide links = yes
unix extensions = no

这样做的缺点就是没办法合并目录,操作相对麻烦。但需要samba over mergerFS,同时需要高吞吐的场景挺少的。。能忍受这个问题。

或者你可以试试Mhddfs,aufs等类似功能的替代品。

future work

现在机器的性能完全溢出我的需求,日常的CPU和内存都闲置很多。感觉最快出现瓶颈的应该还是存储空间上,这个10元买的机箱(+50元的光驱位扩展)最极限就是提供11个3.5盘位,因为空间小,走线也已经有点困难了。。或许下一步硬件上的重构就是换机箱了。

IPoIB?

虽然现在老的光网设备价格很低(参考这里),ConnectX-3这种基本是白菜价了。但是我的应用对峰值吞吐要求不高(没有如4K剪辑等需求),另外盘也都是单HDD,性能瓶颈不明显。

2021下半年的改动

image.png

新的硬件:

  • 捡了一个80plus金牌电源
  • 增加了2.5Gbps内网
  • PM983a 900G

电源

前一阵因为发生频繁的掉盘问题,以为是原来恶劣情况服役多年的长城无牌电源要挂了,于是捡了一个半桥LLC+DC-DC的鑫谷GP600G【瓦数上确实溢出,但低功率的ATX好电源难捡,而且也能给未来升级做点准备】。
但最后发现掉盘的问题在电源转接线上。无背板的多盘用户一般都会有转出多sata的线,线材和端口的质量也同样会影响到稳定程度。
但对比正激方案的普通电源,金牌确实在转换率上提升很多,原来日常波动最多到160W,直接省了20来瓦【评测说是90+%转换率】。另外理论上来说鑫谷的电源是支持个人凭SN五年送保的(不过我就没打通过他们的400电话

顺便重新走了电源的线,下图是以前的走线,盘丝洞了属于是。
image.png

2.5Gbps

主力笔电的存储空间不是很充裕,为了给一些游戏做iSCSI,给设备配全了2.5Gbps的RTL8125卡。
为什么不上万兆,光口?万兆光口的配套还是偏多,而且没法给笔电配万兆。而且现在2.5G的价格已经到很低的地方了。

插曲:RTL8125在Github上的官方驱动很坑爹,解开包,跑autorun.sh会先默认卸载老驱动,结果把千兆卡RTL8168的驱动卸载了,导致没办法联网。还得连了显示器再手动装上8168的驱动。

因为是电口,自己剪点超五类线压了水晶头用就完事。

PM983a

捡了一波大船的PM983a 900G 22110。这个新增设备引发了后面对PCIE不够用的问题。

M.2 NVMe走的是PCI-E x4的,普通的扩展卡只能从一个主板PCI-E口扩展成一个M.2口(SATA的M.2不占)。一转多的需要PCIE拆分(bifucation),这个功能可以通过主板或PLX芯片支持。然后我就发现Z77其实压根不支持PCIE拆分这个feature。所以还是需要浪费一个完整的X16槽。

image.png
之前针对PCIE上的卡的散热就是暴力卡了一个扇子在下面,现在把PCIE插满了,就靠侧面板12cm扇子来进风【LSI2008的发热不高,主要给983a服务】。

如下图,一共六个风扇。
0F61EC0037E05BEFCBF023F22387D6DB.png


在这个机器上,除了常规的NAS服务以外,也作为跑一些实验的本地服务器。另外还跑了一个PCDN的VM,这是日常CPU主要消耗的来源(所以也把Z77给3系i5四个额外倍频超上去了)。冬天CPU一般在35度上下。

最近发现在部署了PCDN企图跑回电费后,路由器变得不稳定很多,但从性能分析来看,一般也不超过9K的连接数,MT7621还有硬件offload也不至于扛不住。。搞不懂

年初的时候觉得扩展性的限制会出现在存储空间上(~30TB),现在发现扩展性的问题是出现在PCIE不够用,包括通道数和接口数。而存储空间却像海绵,挤挤总能腾出空间。但如果需要改善这个问题的话,就需要更换整个平台了(如捡X99)。就现在的方案来看,基本是把平台和机箱的潜力榨干了。

Search

    Table of Contents