搭建家庭 NAS 服务器有什么好方案?

在家里存一些视频什么的,最好也可以一直挂着BT下载 可以双硬盘确保备份
关注者
28,871
被浏览
10,021,430

476 个回答

我也来说下我的方案,自认为比较完美了,先说效果:

1. 7*24小时开机,小型UPS电源保护,断电可自动让NAS优雅的关机,防止对硬盘造成不良影响,电力恢复后自动开机,意外关机后也可远程开机。

2. 家庭影院服务器,影视剧使用自动化工具下载,只要把想看的添加进去就可以了,如果有了资源,系统会自动下载并分类整理,包括重命名下载字幕等,当然也可以手动添加种子下载,特别适合玩PT。

3. NAS上存储的海量影视等多媒体资源,在家可以在电视上观看,在外可通过手机或电脑客户端在线观看,不需要下载。

4. 文件共享服务,这是最基本的了,可以很方便的开启SMB、FTP等服务。

5. 私有云盘,实现类似Dropbox和OneDrive的自动同步功能,比如今天我在家拿主力机工作,明天拿轻薄本出去,相关数据在后台自动同步,不需要手动来回拷贝;另外手机客户端可实现照片自动上传至NAS服务器,手机小容量的福音。

6. 家里局域网在外随时连接,只要有互联网,可以访问家里任一设备,包括路由器打印机等,和在家访问没有多大区别。其实这个功能是通过另外一个独立的小盒子实现。

7,硬件和软件均为DIY,非成品,系统采用开源方案Openmediavault(OMV),需要较强动手能力,暂时想到这么多,有人感兴趣再补充细节……

======分割线======

2月9日更新:

有人看了今天就来更新一下。

先说硬件,上面说了那么多功能,其实硬件配置很简单,照例先上图:

四盘位U-NAS

万由四盘位NAS,华擎Q1900-ITX主板,J1900CPU,4G内存,目前我放置了4块4T硬盘,两两做成RAID1,一个主要用来存储个人及工作文档,另一个主要用来存储多媒体资料,为了不占用硬盘插槽,操作系统装在了从主板扩展出来的SATA接口的固态硬盘上。可能有人会问这点配置够吗?可以做HTPC吗,可以看4K视频吗?我的想法是,NAS就回归NAS的本质,做好网络存储功能,将NAS做HTPC使用完全没有必要,因为:1、把NAS同时作为HTPC使用,需要有较高的硬件配置,成本会更高;2、NAS一般需要24小时开机,HTPC需要放在显示器或电视附近,这时候就得考虑位置、散热、噪音等等问题,这些条件都满足吗?3、如果家里部署了千兆网络,使用高清播放盒即可实现高清播放需求,完全没必要利用NAS。因此,这台NAS对于我来说,完全足够,放在阳台角落的一个机柜里,7*24小时开机,功耗、噪音等问题统统可以忽略,非常省心。

主要的硬件设备介绍完,但是我认为还缺一项非常重要的设备,即UPS不间断电源。为什么?既然使用NAS了,大家一定比较关注设备和数据的安全性,而家里时不时的会有突然停电的可能,万一硬盘正在读写的过程中突然断电,数据丢失怎么办?虽然我还没有遇到过这种情况,但是考虑到整个NAS系统的完备性与稳定性,防止不必要的麻烦,我在很早的时候就购入了一小型UPS电源,该UPS可支撑NAS运行半个小时左右,有了它,停电时就会通知NAS:“现在停电了,我正在给你供电呢,你需要准备关机了,倒计时开始:45秒,44秒,43秒......(倒计时参数可设置)”,倒计时结束后NAS就可以从容不迫以优雅的姿态关机啦,完全不用担心上述突然断电可能会造成的影响,如果这45秒内电力又恢复了,则取消自动关机。关机后等到电力恢复,NAS会自动开机,也可以手动远程唤醒开机。还是上个图吧,UPS就是这货:

APC BK650-CH UPS不间断电源400W 自动开关机电脑 防浪涌

好了,硬件部分基本介绍完,软件部分涉及的内容比较多,下次有空再继续更新...

======分割线======

2月12日更新:

大家好,忙完正事了,今天来更新一下,感谢关注。

在更新之前,先申明几点:

1、关于NAS系统的选择,每个人的需求不尽相同,该方案不一定适合所有人,也有一定的难度。如果你在用成熟的商业软件比如群晖,我建议你继续使用,并不断根据自己的需求增加和配置功能,没有必要从头更换另外一个方案,当然这里指的正版商业软件,不建议盗版。

2、关于软件功能实现,有些选择也不是唯一的,这里主要提供思路,不会详细到每个软件的具体配置,我会介绍一下大概方向,感兴趣的伙伴可以自行去谷歌或百度,家里搭建NAS服务器的童鞋动手能力应该都不差,之后若有时间可视情况更新一些软件使用经验。

3、天下没有免费的午餐,该方案里涉及的某些服务也是收费的,但物有所值。

嗯,啰嗦完了,现在正式开始(好像又要开始重新编号了)。

1、系统:前面已经提了,系统采用的是OMV,即openmediavault,我为什么要采用OMV而不是FreeNAS,一是因为FreeNAS需要大内存,我的设备只有4G内存,二是我本人比较熟悉Debian,而OMV正是基于Debian的。OMV官网在此:The open network attached storage solution

为了不熟悉的童鞋有个直观感受,照例上图:

openmediavault

由于我家NAS是放阳台的,并没有接显示器和键鼠,也没有图形界面,行话就是headless server,一根网线完事,平时管理NAS,除了登录web界面外,就是ssh远程登录啦,画风是这样的:

ssh远程登录nas(你并没有看到密码,因为配置了密钥登录)

关于文件共享,我开启了SMB服务,平时使用的画风是这样的,打开我的电脑(不对,WIN10变成了此电脑...),网络位置里多了我映射的网络磁盘即NAS的共享文件夹,双击进入,就和本地硬盘一样。

细心的人可能还发现了OMV管理界面服务(Service)里面有一项UPS,OMV方便之处就是可以安装各种插件来扩充系统功能,这个UPS插件就叫做openmediavault-nut(Network UPS Tools)。好像有人问怎么配置的,我再来个图吧,注意驱动那一块的设置,因为是通过USB连接的;另外注意Shutdown mode和Shutdown timer的设置,意思就是当检测到UPS电池供电后,倒计时45秒,45秒之内如果还没有恢复供电,则自动关机,如果恢复供电,则取消自动关机。

openmediavault-nut设置

好了,系统部分就先简单介绍到这吧,下一部分是重点,多媒体服务器。

2、多媒体部分:

答主是是个比较喜欢看电影的人,欧美影视居多,这一块其实涉及的软件还是蛮多的,今天先介绍其中之一吧,当然这款软件很多回答都已经提到了,它就是大名鼎鼎的——Plex。

1) Plex:

大名鼎鼎的Plex,服务端叫作Plex Media Server,客户端涵盖网页浏览器、安卓、苹果等全平台。除了自动从imdb等数据库补全影片介绍等meta信息进行索引外,最重要的还能实时转码,解决客户端不支持某些视频格式或是网速慢等问题。不想打字了,继续上效果图吧。

感觉上这两张图把自己收藏的电影电视剧都暴露了......

======分割线======

2月15日更新:

大家好,今天我又来更新了,直接进入正题。

2)自动化工具:

多媒体服务器作为NAS的一项重要功能,如果影视资源能够实现自动化(或半自动化)的下载或整理,无疑将极大提高使用体验,试想一下如果想看一部电影或电视剧,还得满世界寻找资源,好不容易下载到了还需要手动归类整理,下载字幕等等,整个流程十分繁琐,浪费时间不说,兴致可能都减少了一半。

好了,我先直接给出我NAS中使用的软件,这些软件相互配合,配置好以后,几乎完全实现了自动化管理,日常我只需要将想看的电影添加进去就行了,寻找资源、下载、整理、字幕等等,都是由这些软件自动完成的。还有一个好消息是:这些软件均是开源的!不需要付任何费用!

这些软件分别是:

  • Sonarr(我个人将它翻译为“声纳”,电视剧自动化管理软件);
  • Radarr(暂且叫“雷达”吧,电影自动化管理软件);
  • SABnzbd(Usenet下载客户端);
  • Transmission(bt下载客户端)。

以上每个软件都有其它的功能类似的软件可以完成相似的功能,这里列出的是目前比较主流或是社区比较活跃的。

Transmission,bt客户端就不做过多介绍。SABnzbd是Usenet下载客户端,什么又是Usenet呢?这里引用一下维基百科的介绍:

Usenet是一种分布式的互联网交流系统,源自通用用途的UUCP网络(名字亦类似),它的发明是在1979年由杜克大学的研究生Tom Truscott与Jim Ellis所设想出来的,Usenet包含众多新闻组,它是新闻组(异于传统,新闻指交流、信息)及其消息的网络集合。Usenet里的消息(帖子)根据所分Usenet层级(新闻组)存储在服务器,多数服务器不断转发其消息给其他服务器,最终新闻组消息被分布式存储于全球大量的计算机中,但它不是万维网。
通过软件用户能够选择订阅感兴趣的新闻组、消息进行阅读、索引、删除过期消息等。Usenet的最初构想是借助网络进行技术信息交流,后来被广泛推广到大众领域,如社会新闻、业余爱好、个人兴趣等主题。现在默认情况下,它使用NNTP协议。Usenet最主要的特色是统一分组、全球转信(转发消息)。一些人认为Usenet一词来自于User Network。

可以看出Usenet是一种非常古老的技术,甚至比万维网还要早。Usenet发展至今,二进制新闻组的数据交流占据了很大一部分,里面的资源非常丰富,这里只简单介绍一下Usenet怎么使用:

  • 下载软件:SABnzbd就是其中之一;
  • nzb索引网站:通过nzb文件搜索,找到自己需要下载的文件,有免费的索引网站,比如Binsearch,也有收费的,个人建议使用收费的索引网站,索引质量和稳定性较高;
  • 购买Usenet服务:有很多Usenet服务提供商,购买后服务商会给你服务器地址和账号,把这些信息配置到下载客户端比如SABnzbd里面。

好了,有了以上的这些,你其实就可以手动下载了:在nzb索引网站找到你想下载资源的nzb文件下载下来,使用SABnzbd等客户端打开,由于下载软件里面已经配置好了服务器,所以你的资源就会从这些服务器上下载了,不是很难是吧?

但是上面的流程还是复杂了,说了半天还是需要手动下载,这时候Sonnar和Radarr就派上用场了。

Sonarr是自动化的电视剧管理软件,用来追剧再合适不过了,软件里面将重命名规则、清晰度要求、nzb索引、bt索引(当然不要忘了bt哦,是个很好的补充)、nzb或bt下载软件等都配置好后,剩下的都交给Sonarr吧,Sonarr里面有保存你的想看列表,并会定期自动在索引网站上寻找是否有这些资源,如果有并且清晰度符合要求,则会自动交给nzb或bt下载软件,下载完成后Sonarr就会根据重命名规则自动完成归类整理。

Radarr其实和Sonnar非常类似,连界面都很像,它其实是Sonnar的一个分支,只不过是用来管理电影罢了,只要你会配置其中任何一个,另外一个应该就会了。

最后还有字幕的自动化,这个其实是可以交给Plex去做的,Plex有个插件叫Sub-Zero,可以很好的完成字幕自动匹配和下载的工作。

再上几个截图说明一下:

Sonarr主界面
Sonarr点开某个剧的样子(大猫)
Sonarr添加自己想看的剧,就是这么简单!
Radarr,电影自动化,界面功能和Sonarr都很类似~
SABnzbd,盗用官网图,逃~~~
Transmission,盗用官网图,再逃~~~

3、私有云盘:

私有云盘,文件自动同步,评论里也有人提到,我使用的其实就是Nextcloud,这个东西其实就跟Dropbox,OneDrive一样,类似网盘的功能,非常推荐有多个设备文件自动同步需求的人使用,建立自己的网盘,不再依赖互联网网盘服务。这个安装起来稍微有点麻烦,我装了很多次才成功,服务端装好以后,下载电脑和手机客户端,添加需要同步的文件夹就可以了。手机客户端可以设置照片后台自动上传,不过IOS端的后台自动上传需要依赖GPS定位,有时候需要打开客户端才能上传,安卓版的据说没有问题,由于没有安卓手机,还有待验证~~~

客户端的图就不上了,感兴趣可以自己下载下来看看,设置非常简单。

最后,这些服务Openmediavault都有对应的插件,但是我本人建议最好使用docker安装!(重要的事情说三遍!)给大家推荐linuxserver的docker容器:plex, sonarr, radarr, sabnzbd, transmission, 以及官网的nextcloud容器。

======分割线======

4、内网穿透

网络这部分留到最后,也是最重要的,NAS如果仅仅只能在家里访问也就没有多大意义了,我们需要的是在世界任何一个角落,只要有互联网,就能方便的访问NAS。

要能实现这一点,第一个想到的方案自然是:公网IP+DDNS+端口映射了,可惜,我的宽带服务商并没有提供公网IP,我甚至一度想打运营商电话投诉,但是后来发现了其它方案,也就作罢。

后来目光一度转向了花生壳盒子之类的设备,仔细看了介绍之后,价格贵不说,还有端口和流量限制等等,实在是有点坑啊,果断弃之。

直到我发现了这款神器——Zerotier。

Zerotier的介绍和使用方法大家可以自行上网查查资料,简单来说,Zerotier可以创建一个虚拟局域网,将设备加入这个虚拟局域网后,就能像在一个局域网内那样方便的访问了,如果我们将手机、笔记本电脑、平板电脑等常用的终端和NAS都加入这个虚拟局域网,那么我们无论在哪里都可以访问NAS中的资源了,就像在家一样!经过实际使用测试发现,这玩意速度也出奇的好,在外面ping值通常只有几十,据说使用了点对点技术。

好像一切都很完美,NAS、手机、电脑、ipad等都有对应的Zerotier客户端,安装起来不麻烦,然而问题来了,NAS中装Zerotier虽然可以,但如果NAS意外关机了怎么办,关机了NAS就没法加入虚拟局域网了,还怎么远程访问,怎么远程开机呢?这好像是个鸡生蛋蛋生鸡的问题?另外还有一些设备比如智能家电、网络打印机等,是不可能装Zerotier的,在外面怎么访问这些设备呢?

再想想还有没有解决方案?看来好像还需要一个“跳板”?

直到某一天,我逛Zerotier官网时发现了这货:ZeroTier Edge,一个小盒子,看介绍貌似可以即插即用,不需要什么配置,接在路由器下面应该就可以实现内网穿透了,看起来很神奇,真是良心产品,可是这货貌似还在众筹阶段,国内买起来不太方便,价格也比较感人,这盒子的内核无非还是Zerotier嘛,于是......我若有所思,能不能自己实现一个呢?

最后直接上图吧,我完成的“山寨”盒子长这样的(话说这盒子我不满的地方就是灯太亮了,所以贴了胶带,请无视):

盒子已经配置好了Zerotier并加入了我的虚拟网络,接在路由器下面一个lan口,只要这个盒子保持开机状态且网络正常,就能在外访问家里的网络,这样的好处还有如果NAS意外关机了,可以用手机连上Zerotier虚拟网络,发送一个网络唤醒(wake on lan)请求给NAS就可以远程开机了,完美!给想琢磨的童鞋奉上一张原理图吧:

======分割线======

评论里有人问这个盒子怎么实现的,其实就是刷了OpenWrt,装好Zerotier,加入你的虚拟局域网,然后把虚拟局域网接口和实际lan接口桥接,原理如上图所示,因为这个盒子只干这一件事,可以把一些其他无关的服务关掉,就像官方盒子宣传的一样:Do One Thing and Do It Well,哈哈。

更新记录:

  • 2019-07-16: 把集群的运维过程放到了我的专栏,这里将不再更新.
  • 2019-04-06:到目前的集群使用状况更新,位于最底部。
  • 2019-03-19:更新了自己的数据使用需求,ipad pro的价格对比. 防止有大佬觉得我家里有矿而买ipad pro的都是普通消费者. 【手动滑稽】
  • 2019-03-18:更新了表格,将表格更换为截图,方便阅读。
  • 2019-03-14:考虑到颈椎问题,重新上传了导致颈椎病的图片。

-----------------------------------------------------------------

看到没有分享CEPH方案的, 那我来分享下CEPH方案吧. 老规矩, 先上图:

ceph -s 信息见下图:

总计容量 61TB, 19OSD, 3节点mon, 2节点OSD host.


一段往事

我个人NAS也跟大家有差不多的经历.

最先是Apple Airport 3TB, 几块零散的硬盘和一个硬盘座. 完全不需要维护, 只要往里面扔数据就行了.

后来装满了以后, 就开始考虑用盘柜的方案, 于是在14年买了个盘柜:

图中的Rackable就是了, 16盘盘柜, SFF-8088接口, 接下来就是垃圾佬的血泪史了:

我有个IBM X3650M2服务器,对,就是图中的那台IBM. 配了 LSI 9260-8i 卡(用转接线转成SFF8088). 然后我买了6块 WD30EZRX 3T,没错,著名的WD绿盘。插到盘柜里组RAID50.

接下来喜感的事情出现了, 9260-8i 不能识别全部的WD绿盘... 于是又败了一张RAID卡(HP Smart Array P812):

这卡在14年算是相当强劲的, 1G缓存带电池, 8i 16e. 把卡插上服务器又傻眼了,这HP卡提示,只能插在HP机器上.... 逼着我又弄了台HP DL380G6...

该RAID50组成的18T(可用12T左右) 服役到了18年, 由于容量, 性能都不是很能满足我现在需求了, 于是在今年初, 我组了个基于 CEPH 的60T系统.

为什么该停止用RAID了?

首先, 随着现在的盘越来越大, RAID5在大容量下已经完全不可靠了, 可以直接看 @木头龙 大佬这篇回答:

我这里也翻译了个简单的RAID5重建失败概率计算器:

以我上文的6块 3TB WD 绿盘来算, 如果挂了一块盘, RAID 5 重建成功概率只有30%:

RAID 6,除去重建过程中再挂一块盘的情况下,安全很多,RAID 1 目前仍是小型存储保证数据安全的最好方案. 当然自己手动复制一份也行.

但RAID最大的问题是, 完全没有CEPH那么灵活, 多机多盘柜情况下很复杂. 而且性能完全依赖于RAID卡. 当你的磁盘带宽总和大于RAID卡后, 就不能有效利用磁盘的性能了.


我需要什么样的存储?

综上, 我开始考虑一个新的存储系统, 我整理了个简单的“家用”存储系统评分点, 供大家参考:


使用简易的评分标准: 
    - 1 分, 需要专业知识才能使用
    - 3 分, 看看说明书就能使用
    - 5 分, 很好用, 而且符合平时操作习惯

可靠性评分标准:
    - 1 分, 很可能会丢数据
    - 3 分, RAID 5
    - 4 分, RAID 6 或 双副本, RAID 1
    - 5 分, 多种副本策略, 分布式

安全性:
    - 1分, 不安全, 可以假定数据是可以被匿名访问的
    - 3分, 只要正确使用安全性就有保障
    - 5分, 可以进行数据加密

恢复/重建速度:
    - 1 分, 无法恢复
    - 3 分, RAID 5, 6 恢复速度
    - 5 分, 副本恢复速度

数据与环境依赖性:
    - 1 分, 强依赖, 迁移数据只能通过软件复制
    - 3 分, 弱依赖, 通过适当修改就可以将存储设备应用到别的系统
    - 5 分, 无依赖, 数据直接存储到设备上

硬件可扩展性:
    - 1 分, 无法扩展
    - 3 分, 仅可以扩展容量
    - 5 分, 随意定制硬件进行扩展

软件可定制性:
    - 1 分, 只能使用厂家或第三方提供的特定软件
    - 3 分, 可以刷xxx, 刷xxx
    - 5 分, 开源

访问延时:
    - 1 分, 仅能用来存储文件
    - 3 分, HDD 水平
    - 5 分, SSD 水平

噪音:
    - 1 分, 机房设备, 无法忍受
    - 3 分, 可以放隔壁
    - 4 分, 可以放桌面
    - 5 分, 可以睡觉

功耗:
    - 1 分, 500W 以上
    - 2 分, 500W 以下
    - 3 分, 100W 以下
    - 5 分, 50W 以下

体积:
    - 1 分, 需要机柜
    - 2 分, 全塔
    - 3 分, 半塔
    - 4 分, 10 - 5寸
    - 5 分, 5寸以下

价格:
    - 直接是RMB


根据上表,导出我的需求是:

  • 使用简易:无所谓, 就当学习新知识了
  • 可靠性: 至少要双副本, 如果支持多种副本策略更好
  • 安全性: 反正内网用, 无所谓
  • 恢复/重建速度: 副本恢复速度最好
  • 数据与环境依赖性: 最好无依赖, 这样操作方便
  • 硬件可扩展性: 一定要能随意选择硬件进行扩展, 不能再吃HP的亏了[手动滑稽]
  • 软件可定制性: GNU大法好
  • 访问延时: 如果能当系统盘用当然再好不过了
  • 噪音: 最多能接受放隔壁
  • 功耗: 500W 以下吧
  • 体积: 无所谓
  • 价格: 20K以内能接受

另外还有一些自己的使用考虑和需求:

  • 由于租云服务器太贵, 所以我家里有CDH全家桶(hadoop什么的), kubernetes全家桶. 因此存储的性能至少不能拖累这部分的计算需求.
  • 有数据抓取和分析的需求, 典型场景 一千万平均大小 200k 的网页文件. 因此IO性能也有需求.
  • 提供块设备, 挂载到linux下给samba server用. 存普通的娱乐数据.
  • 60TB 左右, 方便扩容, 如果没有容量上限就更好了.
  • 接入10G/40G 网络, 网络传输不会成为存储瓶颈.
  • 不要求可用性 (不是线上业务, 程序挂了大不了重跑. 可以忍受长达几天的停机维护, 数据恢复, 故障恢复)

这套方案我在17年初就有考虑了, 最终在ZFS和CEPH方案中摇摆不定, 后来需要用kubernetes, 于是妥妥CEPH了.


开工

程序猿总要讲究些方法, 我们就自底向上设计吧(误), 首先是:

  • 硬盘

好的硬盘会省很多事情, 比如你的盘在RAID卡的支持列表里, 可以被顺利识别. 比如企业盘URE比家用盘低一个数量级.

目前最划算的垃圾佬盘除了3TB的一些, 剩下就是这款了:

没错, SEAGATE ST6000NM0034 6TB SAS 12Gb/s 便宜的话弄到手每块大约620CNY左右. 不要想太多, 当然是二手的. 作为一个垃圾佬怎么可能买新的.

来10块, 顺便之前还买了一块看看通电时间和坏块情况, 总计11块:


RAID 卡:

都CEPH了为啥还要RAID卡呢, 不用卡怎么把SAS盘怼到主板上. 我可不要板载SAS控制器的主板, 好的太贵, 垃圾的性能不行.

由于盘是12Gb/s 的, 自然卡也要 12Gb/s的.

这卡是 Fujitsu PRAID CP400i , LSI 3008 芯片. 支持HBA. 我也只需要HBA. 进入BIOS设置为JBOD就可以把盘直接给系统用了.

当然还需要电缆. SFF8643 转 SFF8482, 带个大4pin口给硬盘供电. 注意检查插硬盘这一侧的 SFF8482 口, SAS盘有的是需要这部分的针脚的. 没有可能会有问题. 我的两根线有一个有, 有一个没有, 不过盘都正常运行了. 我没有去查SFF8482针对这部分针脚的定义.


主机

RAID卡自然不能自己运行,我们还需要块主板, 这里权衡的点有以下几个:

  • CEPH 要求最好每 TB 盘配置 1GB 内存, 我打算用两台主机, 这样每台主机就是5块 6TB盘, 折合需要30GB内存. 然而XEON E3早期版本不支持这么大内存, 而我恰好手里有多余的E5-2670. 那么x79 就这么愉快的决定了.
  • RAID 卡 能直接连接8块盘(有expander卡能插更多盘.), 那么机箱也要能装下至少现阶段的5快盘. 这就需要 5个 3.5寸盘位.
  • ST6000NM0034 这盘单盘接近12W, 5块就是 60W. 电源的大4pin输出功率要够.
  • 最好还是ATX主板, 这样魔改方便.
  • 同样ATX电源. 魔改方便.
  • 我要插10G/40G 网卡(PCI-E 3.0 x8), RAID卡(PCI-E 3.0 x8), 那么主板至少要提供俩PCI-E 3.0 x8插槽. 如果主板不支持无显卡启动. 那么还要插亮机卡. 还要个PCIE(这个就不用x8了, 阉割下x4,甚至x2插槽插x16的卡都可能显示的.)
  • 便宜, 毕竟x79在12年就有了再战10年不太可能了, 迟早要换.
  • 功耗按说应该没啥事.

最终选择的是这个:

(图片来源见水印, 懒得拍我的机器了.)

ThinkStation S30. 单路x79 , 560W电源. 2个5.25寸位置, 3个3.5寸位置. 中间的软驱位还能插块3.5寸盘. 总计可以直接上6块3.5寸盘. 下面还有些空间可以后续再魔改插几块. 2个 SATA3 6Gb/s. 2个PCI-E 3.0 x16, 一个 PCI-E 3.0 x4 (x16长度槽) , 一个 PCI-E 2.0 x4. 还有个PCI.

上图就是弄到一半的状态.

不要在意电缆乱. 盖上机箱盖就看不见. —— 软件工程之何为封装

最终插了5块3.5寸盘, RAID 卡, 一块 Connectx3 40G单口 IB卡, 一块INTEL DC P3700. 2块 INTEL SSD 545. 4条 8G DDR3 ECC REG, 一个XEON E5-2670.

为了散热, 在PCI-E卡, 硬盘处又用双面胶粘了3个风扇. 否则SAS盘发热还是挺可怕的.

两台这样的机器.


网络

参见我家用万兆局域网的回答, 我之前已经弄了个40G内网了, 所以直接上IB卡.


图中是两块 Mellanox ConnectX 3 56G , 这个卡的IPoIB模式支持40G以太网.

怼到 已经魔改完猫扇的 Mellanox IS5022 40G IB 交换机上. (还没开opensm, 所以灯是黄色的)


5 分钟 CEPH 入门

好了, 我们准备要装ceph了, 所以要对ceph有个简单的理解.

ceph 有这么几个角色:

OSD (object storage daemon)就简单理解为硬盘好了(实际上不是这样的). 一般一块硬盘对应一个osd程序. SSD 为了提升性能可以一块SSD分配多个osd. osd负责向硬盘存储数据.

MON (monitor daemon) 监控节点, 用来监控调度啥的.

RADOS (Reliable Autonomic Distributed Object Store)简单来讲就是个算法, 把这个算法包装成软件装到电脑里, 每次向CEPH里面读写数据, 先把数据塞到RADOS里面计算下, 就知道数据在哪个OSD了. 这样就彻底摆脱了依赖. 只需要这个软件就有了RAID之类的功能. 而且没什么状态, 没有本地数据库啥的. 全靠这个算法定位.

好了,剩下MDS, RGW 啥的用不着就不用了解了. 是不是很简单?

还缺点什么?

好了, 现在我们有了两个一模一样的 CEPH 存储节点. 每个 30TB. 然而CEPH的架构是这样的:

(图来自网络)

其中, OSD (可以简单理解为硬盘), 承载OSD的主机我们有了. MON(可以理解为监控节点) 还没有. 我们可以在两个OSD主机上部署 MON, 但MON为了仲裁(Quorum) 我们最好还是 3 个mon 节点比较好(至少三人投票才能决出结果). 另外RGW啥的也需要放一放.

于是, 废物利用, 把之前的HP Microserver Gen8 当做了 mon 节点, 也插了个 IB 网卡.

搞定. 接下来开始安装CEPH.


安装CEPH.

我懒了, 所以没写教程. 后续会补充到我的专栏里. 感兴趣的同学先看官方教程吧. 挺简单的.

用 ceph-deploy工具安装非常方便. 当然还需要后续调整才能达到理想的性能. (默认也足够用)


跑分

CEPH 的一个好处是可以定义副本数量( 没错 CEPH 就是把你的数据存成多份来保证数据全的 ).

我在OSD中建立了三个osd pool(理解成分区好了)

如图, 分别叫 L1, L2, L3.

L1 是单副本, 坏一块盘就丢了一块盘中的数据, 所以用来放完全不重要的东西, 比如你们懂的, 还有Steam游戏.

L2 是2副本, 用来放平时用的东西.

L3 是3副本, 用来放代码和一些重要的东西.

仔细看的同学会发现L1+L2 x 2 +L3 x 3超过了我的60TB存储容量. 没错. 这个pool 是虚拟的, 你可以随时扩容. 当然不会超过物理磁盘的容量. 物理磁盘满了会导致OSD满了, 到时候CEPH会提醒你要满了. 满了的话插盘, 增加OSD, 扩容就行. 是不是很灵活?

下面是将三个pool映射为块设备, 然后挂samba, 本地windows机器访问的跑分结果.

比较遗憾的是, 我本地只有一块INTEL 545, 所以这个跑分结果不是卡在了CEPH, 而是卡在了我本地机器的硬盘读取速度上.

这是用软件跑分的结果. 按说也没达到性能上限( 6TB 这个盘号称持续写入速度有200MB+ 10块就是2个G啊, 这成绩连RAID0都跑不过, 太丢脸了) .


优化

优化手段有很多, 比如开RDMA, 比如调整MTU. 我这里做了如下优化:

  • MTU 2044 (ConnectX3最大支持4000左右, 但是我调整到4000出现了内核问题, 为了稳定还是默认的2044了)
  • RDMA
  • CEPH Journal 单独放了块 intel 545
  • CEPH 开启缓存, 用了块 intel 545
  • 优化CEPH参数.
[global]
fsid = 0f7be0a4-2a05-4658-8829-f3d2f62579d2
mon initial members = storage01-ib,storage02-ib,storage03-ib
mon host = 10.0.7.1,10.0.7.2,10.0.7.3
mon pg warn min per osd = 1
public network = 10.0.7.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd crush chooseleaf type = 0
osd pool default size = 2
osd pool default min size = 1
rbd op threads = 4
[mon]
mon data = /var/lib/ceph/mon/ceph-$id
mon clock drift allowed = 0.5 
mon osd min down reporters = 1
mon osd down out interval = 600 
[osd]
osd journal = /data/ceph-osd-journal/$cluster-$id/journal
osd journal size = 10000
osd op num shards = 8 
osd op num threads per shard = 4
[client]
rbd cache = false

关了RBD cache, 防止突然掉电丢数据. osd 线程开到2倍.

那么, 加了缓存后, 性能啥样呢?


往死了优化

这717MB (折合5.6Gb/s)的速度对不起我的40G设备啊. 但是俩Intel 545 做缓存也就这样了(545 写入速度 500MB/s左右).

上NVME.

跑分:

[root@storage02-ib ~]# rados bench -p lc 60 write
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 60 seconds or 0 objects
Object prefix: benchmark_data_storage02-ib.lobj.eth6.org_189720
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16       723       707   2827.51      2828  0.00620033   0.0223021
    2      16      1449      1433   2865.51      2904  0.00916287   0.0221825
    3      16      2155      2139   2851.58      2824   0.0366325   0.0222918
    4      16      2876      2860   2859.61      2884    0.033643   0.0223233
    5      16      3613      3597   2877.22      2948   0.0207602   0.0221836
    6      16      4335      4319   2878.95      2888   0.0557611   0.0221711
    7      16      5058      5042   2880.71      2892   0.0111489   0.0221847
    8      16      5803      5787   2893.08      2980   0.0100133    0.022082
    9      16      6493      6477   2878.26      2760  0.00491178   0.0221721
   10      16      7236      7220    2887.6      2972   0.0306935   0.0221227
   11      16      7946      7930   2883.24      2840   0.0116118   0.0221538
   12      16      8686      8670   2889.62      2960    0.020057   0.0221269
   13      16      9380      9364   2880.85      2776   0.0373555   0.0221801
   14      16     10114     10098   2884.77      2936   0.0283607   0.0221558
   15      16     10862     10846    2891.9      2992  0.00808201   0.0221035
   16      16     11604     11588   2896.64      2968   0.0215107   0.0220788
   17      16     12313     12297   2893.05      2836   0.0519716   0.0220919
   18      16     13036     13020   2892.98      2892  0.00509733   0.0220978
   19      16     13760     13744   2893.12      2896   0.0296724   0.0221057
2019-03-13 08:03:43.362085 min lat: 0.00401633 max lat: 0.0801554 avg lat: 0.022081
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
   20      16     14501     14485   2896.65      2964   0.0288173    0.022081
   21      16     15229     15213   2897.36      2912   0.0124475   0.0220728
   22      16     15940     15924   2894.92      2844   0.0173604   0.0220985
   23      16     16662     16646   2894.61      2888  0.00595091   0.0220945
   24      16     17411     17395   2898.82      2996   0.0102223   0.0220689
   25      16     18145     18129   2900.29      2936  0.00714116   0.0220556
   26      16     18890     18874   2903.34      2980   0.0232422   0.0220303
   27      16     19607     19591   2902.02      2868   0.0213828   0.0220413
   28      15     20312     20297   2899.23      2824   0.0186098   0.0220668
   29      16     21022     21006   2897.04      2836   0.0113287   0.0220759
   30      16     21715     21699   2892.86      2772   0.0104436   0.0221137
   31      16     22439     22423   2892.95      2896   0.0402675   0.0221099
   32      16     23164     23148   2893.16      2900    0.014374   0.0221133
   33      16     23884     23868   2892.75      2880   0.0277044   0.0221148
   34      16     24582     24566   2889.78      2792   0.0238958    0.022137
   35      16     25331     25315    2892.8      2996   0.0220586   0.0221166
   36      16     26031     26015   2890.22      2800    0.018456   0.0221346
   37      16     26771     26755   2892.09      2960   0.0153843   0.0221214
   38      16     27512     27496   2893.98      2964   0.0287244   0.0221073
   39      16     28238     28222   2894.23      2904  0.00710386   0.0221054
2019-03-13 08:04:03.364287 min lat: 0.00380649 max lat: 0.0801554 avg lat: 0.0220819
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
   40      16     28984     28968   2896.47      2984  0.00585799   0.0220819
   41      16     29719     29703   2897.52      2940   0.0121268   0.0220785
   42      16     30447     30431   2897.86      2912   0.0174378   0.0220777
   43      16     31182     31166   2898.83      2940   0.0266877   0.0220725
   44      16     31907     31891   2898.85      2900  0.00507255   0.0220651
   45      16     32645     32629   2900.02      2952   0.0264655   0.0220592
   46      16     33374     33358   2900.36      2916  0.00519323   0.0220554
   47      16     34103     34087   2900.69      2916   0.0174929   0.0220574
   48      16     34837     34821   2901.42      2936  0.00825005   0.0220507
   49      16     35567     35551   2901.79      2920   0.0161023    0.022052
   50      15     36313     36298   2903.51      2988   0.0338922   0.0220351
   51      16     37030     37014   2902.73      2864   0.0209547   0.0220435
   52      16     37760     37744   2903.05      2920  0.00616779   0.0220334
   53      16     38469     38453   2901.78      2836    0.030024   0.0220468
   54      16     39188     39172    2901.3      2876   0.0336324    0.022049
   55      16     39897     39881   2900.11      2836  0.00491591    0.022062
   56      16     40674     40658   2903.81      3108   0.0357856   0.0220327
   57      16     41400     41384   2903.81      2904   0.0057601   0.0220328
   58      16     42149     42133    2905.4      2996   0.0146372   0.0220229
   59      16     42855     42839   2904.01      2824   0.0291914    0.022034
2019-03-13 08:04:23.366453 min lat: 0.00380649 max lat: 0.0801554 avg lat: 0.022023
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
   60      16     43591     43575   2904.67      2944   0.0101212    0.022023
Total time run:         60.0109
Total writes made:      43591
Write size:             4194304
Object size:            4194304
Bandwidth (MB/sec):     2905.54
Stddev Bandwidth:       67.5243
Max bandwidth (MB/sec): 3108
Min bandwidth (MB/sec): 2760
Average IOPS:           726
Stddev IOPS:            16
Max IOPS:               777
Min IOPS:               690
Average Latency(s):     0.0220248
Stddev Latency(s):      0.0122845
Max latency(s):         0.0801554
Min latency(s):         0.00380649
Cleaning up (deleting benchmark objects)
Removed 43591 objects
Clean up completed and total clean up time :2.05853

平均写入速度 2905.54 MB/s , 最高 3108 MB/s, 最低 2760 MB/s. 舒服了.

P.S. 该数据由rados bench生成. 并不是 rbd 块设备性能. RBD块设备的测试结不理想:

974MB/s 作为两块写入速度能达到 1900 MB/s 的P3700来说, 这个成绩明显裁判有问题(dd从 /dev/zero 往 /dev/null 写入的速度接近 9GB/s, 所以不是dd的问题).

我怀疑要么是我的RBD没设置或优化正确. 要么是RBD的实现有性能问题. 但查了半天资料也没有什么结果. 这里就只能期待有大规模集群实践经验的大佬关于RBD的使用经验数据了.

总之, 够用了.


One more thing ...


总之比买云服务便宜不是? [手动阿Q]

看到有同学问价格, 梳理下价格:

  • 6T 硬盘 620 * 11 = 6820
  • HBA卡 590 * 2 = 1180
  • 56G IB 网卡 495 * 4 = 1980
  • 56G 线 200 * 4 = 800
  • SAS线 60 * 4 = 240
  • ThinkStation S30 900 * 2 = 1800
  • E5-2670 450 * 2 = 900
  • 8G DDR3 ECC REG 95 * 8 = 760
  • INTEL 545 128G 250 * 4 = 1000

总计 : 15480 CNY

新版 iPad Pro 顶配 15299 CNY, 这么一想是不是很划算?

以上是本次新增的设备, 之前还有的设备是:

  • mellanox IS5022 IB交换机 2500 * 1 = 2500
  • HP Microserver Gen8 3800 * 1 = 3800
  • INTEL DC P3700 800G 2600 * 2 = 5200

总计:11500 CNY


一些 Tips

  • CEPH可以用SSD当缓存盘, 缓存超过设定容量或时间可以回写到机械硬盘, 对常用文件还能缓存到SSD提升读取性能.
  • 使用2副本最好编辑下CRUSH map, 防止预期外的掉盘导致副本不和期望问题.
  • 数据恢复速度与单盘最大写入速度有关. 所以单盘最大容量还是控制下, 6TB 按照写入速度 200MB/s算, 恢复一块盘也要 8.3 小时.
  • 最常用命令: ceph osd set noout 【手动滑稽】.
  • 家用写入500MB/s 真的够了...... 编辑4k视频当我没说.....
  • 掉盘恢复非常简单, 插上新盘, 添加osd后, 坐等就行了.
  • 最好常看看CEPH健康状态, 万一运气不好2块副本盘全掉还是要注意下的.
  • 想到再补充


到目前的集群使用状况

截止到2019-04-06,期间小区突然断电3次(无UPS),在一次系统维护中不小心干掉了mon节点,目前数据正常,系统正常使用,无故障。

CEPH-RBD映射的块设备给iSCSI,ESXi连接iSCSI给15台虚拟机使用。目前状况良好。


最后, 欢迎加入垃圾佬Q群, 交流50TB+NAS, 万兆网络, 家用服务器等.