垃圾佬的HomeLab(三)

2021/09/30 Prose

motivation

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

  • 高:Onedrive提供文件历史版本和防止误删除。
  • 中:冷备盘
  • 低:无冗余

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

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

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

机器主要承担内网代理、HomeAssitant、media coding 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内嵌的同步管理,群晖的windows客户端也有类似的功能:
image.png

cloud (onedrive)

需要云存储的文件是seafile内文件的超集。高可靠性需求(即需要异地副本)的文件通过软链接集中,使用skilion/onedrive进行onedrive --syncdir /mnt/data/sync_path来上传(因为有的文件是在FS,有的是挂载来的)。大部分重要的文件都是小文件(e.g. dot files..),剪辑等场景的大文件不会进入cloud。

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

image.png

冷备盘

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

规避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,性能瓶颈不明显。

Search

    Table of Contents