Homelab 建设笔记

Index

  • 什么是 homelab,为什么建设 homelab
  • 平台和 CPU 的选型
  • 服务器的选型和购买
  • 带外管理和风扇控制
  • 外部访问和内网基础服务
  • 消费级显卡 pass through 的一些问题

 

什么是 Homelab & 为什么建设 Homelab

Homelab [hom-læb](n): a laboratory of (usually slightly outdated) awesome in the domicile

可能很多人不知道 homelab 是什么,甚至知道这个东西是什么之后也不理解为什么要折腾这种东西,没关系,毕竟人与人终究是不能相互理解的。

根本上说,家用服务器是为了解决普通台式机和笔记本不容易解决的需求(比如说大内存和较多的硬盘位),或者是可以以远低于普通台式机的成本达到一些目的(DDR3内存和部分服务器 CPU 洋垃圾价格低廉),由于这些特点,homelab 常见于以下需求:

  • 存储: BT 下载、远程备份
  • 多媒体:串流、电影/音乐管理和在线播放
  • 游戏:MC、CSGO 私服,网游挂机等
  • 网站:这个对老外比较常见,国内政策不允许在熟知端口上建站
  • 虚拟化:Docker、VM 集群管理实践,网卡虚拟化,硬件直通等
  • 网络:软路由、流量审计、防火墙实践

对于大部分人而言,一个长期 up 的笔记本或者 NUC 可以满足大部分多媒体和网络方面的需求,淘宝工控机、迷你主机也成本比较低廉(还省电),个人而言我并不很迫切的需要 homelab 进行存储和下载,更多的是进行多媒体游戏和虚拟化实践,当然作为一个 Macbook 用户,Windows 虚拟机也是刚需的一种。

freenas.org、servethehome 等老外论坛和 reddit 上的 /r/homelab 板块聚集了一群(其实 CHH 也有一部分 homelab 玩家,但是讨论比较分散,而且 CHH 玩家加钱加的有点凶,几万块的交换机说买就买,一点也不垃圾佬,学不来学不来),在这些地方也能找到不少有用的资料,除此之外还有 openhomelab.org 和 wiki.eth0.nl 等百科。

服务器硬件概况和配件选择

由于服务器集成化、模块化程度较高,配件通常为整机厂商 OEM,可选购的配件品牌远比消费级主机要少,因此服务器配置的选择大体上可以概括为:选产品形态+选平台+选 CPU/内存/硬盘配置高低,由于众所周知的原因,在过去的十多年里 X86 服务器市场基本被 Intel 垄断,因此只讨论 Xeon 系列的产品线布局。

下表列出近10年左右 Intel Xeon 产品线和对应平台的一些代表性服务器整机产品,不太常见产品线和 OEM 型号没有列出,相关的整机也很难买。一般来讲不建议使用 Nehalem 之前的平台,老旧平台缺乏很多基础功能玩起来不会太爽,而且跑一年电费比机器本身值钱(更详细的列表可以查看 wikipedia 的 Xeon 词条):

CPU 代号 CPU 型号 功能特性 代表产品
Wolfdale / Yorkfield / Harpertown (45nm, tick) E31xx, X33xx, L54xx, E54xx, X54xx * Dell 1950/2950,IBM HS22, HP DL360/DL380 GEN5
Nehalem-EP/EX (45nm, tock) L55xx, E55xx, X55xx DDR3, VT-d Dell R510/R610/R710, IBM X3550M3/X3650M3, HP DL180/DL380 GEN6
Gulftown / Westmere-EP/EX (32nm, tick) W36xx, L56xx, E56xx. X56xx AES-NI Dell T3500, Dell R510/R610/R710, IBM X3550M3/X3650M3, HP DL180/DL380 GEN7
Gladden / Sandy Bridge-EN/EP (32nm, tock) E3-11xx, E3-12xx, E5-14xx, E5-24xx, E5-16xx, E5-26xx AVX 华为 RH2285V2/2288V2,Dell R520/620/720,超微 X9,IBM X3550M3/X3630M4/X3650M4, HP DL180/DL380 GEN8
Ivy Bridge-EN/EP/EX (22nm, tick) E3-12xx v2, E5-14xx v2, E5-24xx v2, E5-16xx v2, E5-26xx v2, E5-46xx v2, E7-48xx v2 * 同上,IVB 和 SNB 平台完全通用,旧平台升级主板固件即可支持 IVB
Haswell-WS/EN/EP/EX (22nm, tock) E3-12xx v3, E5-14xx v3, E5-24xx v3, E5-16xx v3, E5-26xx v3, E5-46xx v3, E7-48xx v3, E7-88xx v3 DDR4, AVX2, Cluster on Die 华为 RH2285/2288V3, Dell R520/620/720, HP DL180/DL380 GEN9, 超微 X10,联想 X240M5/X3650M5
Broadwell-DE/H/EP/EX (14nm, tick) E3-12xx v4, E5-14xx v4, E5-24xx v4, E5-16xx v4, E5-26xx v4, E5-46xx v4, E7-48xx v4, E7-88xx v4 * 同上
Skylake-D/S/H/W/SP (14nm, tock) E3-12xx v5 (S Series), E3-15xx v5 (H Series), D Series 21xx , W Series 21xx, Bronze 31xx, Silver 41xx, Gold 61xx, Platium 81xx Mesh 架构,AVX512,3x UPI,六通道内存 联想 SN550, Dell R640/740, HP DL180/DL380 GEN10

从历史的进程来看,tick 更新主要改进制程,功能改进少,所以 IVB 和 Broadwell 在功能上和前代区别不大,平台也是通用的

从上表可以看到,在过去的十年里随着 Intel 采取 tick-tock 战略,桌面端酷睿开始使用 i3-i5-i7 系列作为产品线划分,Xeon 的产品线划分也变得更加明确,大致区分为 E3-EN/W/D-EP-EX 几个等级,E3 产品线架构基本和桌面高端产品一致,也一般和桌面产品线一同更新,E5/E7 比桌面晚一代左右,一般 E5-24xx 对应 EN 产品线,E5-26xx 对应 EP,E7-48xx 对应 EX,型号中的数值第一位一般代表最大的处理器数,16xx 表示单路,26xx 表示双路,46xx 表示四路等,然而 Skylake 之后产品线大幅改组,D/W 产品线用于细分市场(如边缘计算、高性能网络转发、硬件辅助加速),白金-金-银-铜大致对应 E7-E5(4xx0)-E5(2xx0)-E5(2x0x),新的产品编号如 Gold 6138 中第一位2/4/6/8代表定位高低,第二位1表示 scalable 第一代。然而可以预见的是随着摩尔定律和 tick-tock 战略的崩溃,Xeon 的代际更新可能变得没那么可预期,甚至可以阴谋论地猜测可能会为了增加新旧产品的区分度不断增加细分产品线以刺激市场。(UPDATE 2019.8: 阴谋论成功了,第二代 Xeon Scalable 减少了 SKU 因而部分一代型号在二代没有直接的后继者,但增加了 N/V/S/Y 等后缀用于细分需求,第三代甚至会出现 10nm Icelake 和 14nm Cooperlake 并存的混乱局面,Intel 看来也是慌得一笔啊)

由于 Nehalme 之前的型号甚至不支持 DDR3 和 VT-d,可玩性方面乏善可陈,加上功耗普遍较高,不推荐购买 Nehalme 之前的型号,但是另一方面,DDR4 内存价格居高不下且相关平台配件缺乏二手货源,Haswell 之后的平台购买成本会远高于 IVB 以前的平台。

服务器品牌和型号

reddit homelab 板块 wiki 有比较详细的购买指南,但是看老外的经验时候需要结合淘宝的情况:

  • 戴尔:淘宝洋垃圾最多的牌子,综合来讲 Dell 应该是 homelab 捡垃圾最优的选择,配件好买,驱动和固件好找,IPMI 系统(aka. iDRAC)好用,网上资料多(折腾 homelab 的老外的人生经验可以参考),机箱设计也好,然而缺点是贵,同代配置的 Dell 要比下面几个贵出50%到一倍,贫穷限制了我的购买力。

* 戴尔的产品型号(rack)一般第一位表示分级,第二位表示代际,如 R720 表示高端平台 2U rack(E5 V1/V2 EP),R620 是同级 1U rack,对应低端平台是 R520(E5 V1/V2 EN),对应前代是 R710(Nehalem / Westmere EP),后代是 R730(Haswell / Broadwell EP)
* 戴尔的刀片式型号(blade)数字位一般同上,前缀为 M
* 戴尔的塔式型号(tower)前缀为 T

  • HP: 作为曾经企业市场服务器市占率第一,HP 的洋垃圾和 Dell 一样比较多,配件也相对容易买到,HP 的 IPMI(aka. iLO)使用体验也不错,拆过一台 DL380P 之后给我的印象是 HP 的内部设计非常好,可维护性优秀,然而 HP 机器在一些小地方比较特立独行,比如 RAID 卡使用的不是 LSI OEM,不能使用 megaraid 进行管理;在网上没有找到控制风扇转速的姿势,并且插上非 HP 原厂配件会导致风扇满速运行,这两点结合起来事情就变得比较微妙

* HP 的型号也相对有规律,如 DL360P GEN8,GEN8 对应 V1/V2 平台,GEN9 对应 V3/V4 平台,360对应2U,160对应1U,P 代表 EP,E 代表 EN

  • IBM(联想2015年收购了 IBM 的 x86 服务器业务,然而2015之后的服务器并不是我们垃圾佬玩得起的货色,所以此处仍然只谈 IBM 且没有联想):平心而论 IBM 的服务器确实做的一般,IPMI(aka. IMM2)只能说堪用,难怪会被收购(其实我也是买了之后才发现的),整机价格和上面 HP 差不多,而且淘宝配件供货并不很足,我几乎搜遍淘宝都没有找到便宜的 IBM M4 之后型号的硬盘架,只好让前面板处于裸奔状态
  • 华为:其实我也是淘宝捡垃圾才知道华为的 x86 服务器好像做的还有模有样的,垃圾价格也和上面的两家差不多。但是支持很差,先不提很难找到老外折腾的帖子和博客作为参考。让我很想吐槽的一点是华为官网的文档甚至全都是私有格式,需要一个 Windows 系统装他的垃圾阅读器才能看,这一点让我直接没有考虑华为的机器,华为的服务器型号我没有了解太多,淘宝比较多的2288和2285价格都还行。

  • 超微:是超微电脑 supermicro 不是超微半导体 AMD,在国内非硬件玩家的印象里可能相对冷门一点,实际上 X86 服务器领域,中科曙光等“国字号”除了华为都是超微的贴牌,也算是中国人民的老朋友了。由于淘宝的超微洋垃圾服务器整机并不多,于是我没有过多的去了解,据友商表示超微的 4U GPU 机器很不错,另外老外的 STH 论坛、freenas 论坛都比较追捧超微的 X9 和 X10 系列,相关的资料也不少。

  • 联想:如上所述,联想2015年收购 IBM X86 服务器业务才算是走上正轨,此前基本属于业界小虾米,因此 Haswell 以前的平台基本没有联想洋垃圾,本文不讨论。

  • 曙光、浪潮等其实在国内也有一定的市场份额,阿里云大量使用浪潮定值服务器,曙光则是超微贴牌,但是淘宝垃圾较少,折腾起来参考资料较少,捡垃圾还是要考虑一下可用性。

比较小众的一些需求下,可能需要考虑 4U 巨无霸(优点是可以插四路 CPU 和24盘位,但是 4U 机型大多很贵,动手能力比较强的话倒是可以自己买机箱和硬盘笼组装)或者迷你机箱等比较少见的型号,比如超微和思科都有配备 Xeon-D 的定位于网络设备和边缘节点的小型服务器,如超微SYS-E300和思科 UCS E 系列,除了扩展性可能受限,说实话我还是对超微这款挺种草的,然而贫穷限制了我的购买力。

综合了一些考虑,最终我买的是 IBM X3630M4,搭配双路 E5-2428L V2(8C16T@1.8GHz, burst 2.3GHz, 60W TDP),128G DDR3 内存,PCIe 设备选配了 USB3.0 转接卡(注意需要使用不需要外接供电的版本)和一张亮机级独显,目前观察情况来看,ESXi 运行两个 Windows 虚拟机长期前台运行 HTML5 游戏且启用独显+Linux 虚拟机待机,整机功耗在150W左右,总的来看 PCIe 设备的功耗还是比较可观,另外需要注意,因为带外管理系统是独立于主机操作系统存在,因此即使操作系统关机依然会有功耗,大约20-30W。

BIOS 和带外管理

如果要说服务器硬件在使用上和消费级主机最大的不同在哪里,大概就是带外管理(out of band managment),通过一个独立于操作系统的、具有独立网络连接的管理卡,允许管理人员进行诸如重启系统、传感器监控、远程设置 BIOS 等操作,其标准是 IPMI,各家厂商各有自己的实现,但大体上都是通过 BMC(baseboard managment controller)接入 IO 系统、网卡和传感器等

这个东西原本最大的意义是为了运维人员需要重装系统、配置 BIOS 和 RAID 之类的事情时不用下机房操作,对于 homelab 而言可能最大的好处就是不需要把显示器从房间搬到机箱前,也给服务器升级固件提供了一个相对友好的界面(一般早期的1356/2011主板要插 V2 CPU 需要升级固件,部分无良商家会借机加钱,实际上其实也不难,百度就能搜到方法,唯一需要注意的可能就是升级固件的时候主系统要关机,只开 IPMI)

降低风扇转速问题

家用服务器面临的最大挑战之一就是:如果不能有效的限制风扇的转速又没有地下室之类的远离人生活的空间,那么服务器风扇的噪音没什么人能长期承受,尤其是大部分服务器的风扇转速策略都以降温为首要目的,故比较激进,如果不加控制很容易就飙到 5000rpm 以上(而且一般不会短时间内降速),9000rpm 以上基本可以用飞机起飞来形容,人站在旁边都会很难受,一般来说 2000-3000rpm 或更低是一个比较能接受的噪音范围,具体机型的风扇设计可能会有细微的不同,更加精确的噪音值可以看 reddit 的统计 https://www.reddit.com/r/homelab/wiki/dbbtu

然而,由于风扇接口的引脚定义和家用机风扇并不一样,淘宝的风扇降速线(实际上就是串了一个电阻)并不能有效的用在服务器上(如果动手能力足够强可以用单片机尝试模拟 pwm 信号控制风扇并欺骗 BMC),直接拔掉风扇会导致服务器自检报 Fan error,并有可能导致 IPMI 主动关闭操作系统,因此,一般情况下还是优先考虑软件层面对风扇转速进行限制。

在笔记本上,可以通过 /sys/class/hwmon调整 pwm 控制风扇转速,比如 thinkfan 工具即是这么实现的。然而服务器上并没有可以控制的 pwm 虚拟设备,目测风扇是 BMC 控制而不是由 OS 控制,粗略的翻阅了一下 IPMI 技术规范:https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/second-gen-interface-spec-v2-rev1-4.pdf ,也就是说其实 Intel 并没有规范化风扇转速这种细枝末节的问题,理论上是厂商自己定义的 payload。

至于 IBM 搜索发现官网有一个帖子讨论了“如何提高 X3650M4 的风扇转速”的问题,给出了一个 ipmitool raw command,https://www.ibm.com/support/home/docdisplay?lndocid=migr-5099171 用于在遇到风扇转速自动控制出现 bug 时提高风扇转速,分析了一下 IPMI raw command 的格式替换一个字段即可得到降低风扇转速的命令,可以写一个小脚本设置一次设置完所有风扇,执行过一次之后只要 IPMI 不重启,转速限制会一直有效,和主系统有没有重启过没有关系:

最后一位是十六进制的转速比例,经过一段时间的实测,低负载+风扇转速 2000rpm 以下,CPU 和大部分组件温度可以保持在40℃左右(室温30℃),其实是一个很安全的温度,比大部分笔记本还低不少。

另一方面,IPMI 不一定是在本机才能操作,也可以通过局域网/串口等操作,如:

戴尔和超微的风扇转速控制 IPMI raw command 老外的论坛上都有相关讨论,homelab 选用这两家的产品在风扇噪音方面大概都没什么问题。

操作系统的选择和内网基础服务

服务器搭建完成之后,要用的爽还需要一些环境和基础服务的建设准备,目前我关注的点有:

  • 虚拟化:单台服务器直接拿来跑个人业务会显得非常浪费,目前个人认为比较可用的虚拟化方案有 proxmox 和 vmware esxi 两种,前者基于 kvm (也可以基于 lxc)而后者是 vmware 的商业产品(只是序列号也很好搞),vmware 相对来说用户友好一点,CHH 也基本用的 esxi,esxi 的使用其实也可以单独写一篇了,目前来说还没有什么让我觉得很不爽的问题,应该说不愧是商业软件?
  • IPV6:HE tunnelbroker 等可以为内网提供 IPV6 接入,如果内网有 openwrt 会比较方便配置 NAT(截止至2019年8月,广东电信已经全面支持IPV6+IPV4公网双栈,于是下面单独列一节讨论 IPV6 问题)
  • 内网 DNS 和 IP 分配:如果不嫌烦,倒是也可以每次打开路由器 DHCP 列表看一眼,虚拟机数量达到两位数以上之后内网 DNS 可以比较明显的提升使用体验
  • 文件共享:内网设备多了之后,比较频繁的会出现需要内网互传文件的需求,此时就需要一个 FTP 或者 SMB 服务
  • 公网 IP 和 DDNS(也就是外部访问性问题,下面单独列一节讨论)

公网 IP 和 DDNS

Homelab 的意义很大程度上取决于你能不能弄到一个公网 IP,如果只是在自家内网折腾实用价值会大打折扣,在我看来不如买一个 NUC 当 NAS 摆着。其实在折腾家用服务器之前我的 ThinkPad 长期冒名顶替家用服务器的角色,常年 RDP+虚拟机,关闭休眠放在书架的某个角落 uptime 上百天,不得不说 ThinkPad 质量还是可以的···

虽然广东电信又贵又慢,但是一个电话就能要到公网 IP,姑且算是不错吧,目前的观察来看,广州电信这边动态 IP 更换的频率不是很高,而且似乎取决于流量大小,如果很长一段时间外网流量较少,则一个 IP 会保持超过一周,目前我的使用来看,大约是公网流量跑几十 G 就会更换一次,IP 更换的时候对外的 ssh 连接都会断(IP 更换 TCP 连接理论上都会断的),而 RDP 会自动重试所以基本没有问题。

一般的域名托管商都提供了 API 用于实现 DDNS,如 DNSPOD 虽然没有在网页上提供低于10分钟的 TTL 但是使用 API 还是可以的,https://gist.github.com/billryan/239778f0821937939c8c140bdddd6840
,在路由器或者内网主机上跑一个 DDNS 自动更新的服务,只要你的 DNS 服务商 TTL 足够小,可以基本无感知的使用。

IPV6 

原先写本文的时候,大陆运营商还基本上不给宽带用户 IPV6,要折腾 IPV6 就只能折腾隧道,HE 或者教育网的折腾起来都很蛋疼而且实际用处不大,2019年以来国内 IPV6 骨干建设推进可谓光速,IPV6 已经逐渐成为一个不那么鸡肋的东西而有一点折腾的价值。

简单讨论一些几个 IPV6 相关的协议:

  • DHCPv6: DHCP 的演进版本,没啥特别的值得提的,openwrt 的 DHCPv6 服务端行为会默认分配和 V4 地址一样的后缀,古老一点的安卓设备不支持这个协议
  • Prefix Delegation aka. PD: 由于 IPV6 设计上使每个设备拥有独立公网地址,不使用类似 192.168.0.0/16 的私有地址段,就需要一个协议将上级路由设备配置的较大的地址段分配给下级设备,PD 最大支持到/64,如果运营商分配的是/64地址,则家用路由设备理论上不能使用 PD 给子网内设备分配地址(广东电信分配了/56)
  • NDP: IPV6 特有的链路层协议,有类似 ICMP 和 ARP 的功能,也提供子网内路由宣告(Router Advertisement aka. RA)和路由发现等特性,下述 SLAAC 即基于 NDP
  • SLAAC: 无状态地址分配协议,根据网卡设备 MAC 地址自动生成一个 IPV6 地址(这个生成规则叫 EUI 64,所以 SLAAC 出来的地址都贼长且无规律),MAC 地址的唯一性保证了地址唯一性,但 IP 地址唯一且不变可能导致设备在公网上可追踪,Windows 和 Mac 默认支持并开启隐私扩展以避免 MAC 地址泄露,类似“临时 IPV6 地址”的东西可能会干扰你的内网互联。SLAAC 可以和 DHCPv6 一起使用,但是个人认为 DHCPv6 会更方便内网设备管理

基于 openwrt 的路由器需要安装 radvd 等软件包, WAN 启用 DHCPV6 with PD 即可在广州电信获取到/56段:

路由设备获取到 V6 段之后,LAN 口开启 DHCPv6 子网内每个设备可以自动配置/64地址:

需要注意开启 IPV6 有一个比较严重的问题,如果 DNS 同时返回了 A 和 AAAA 记录,绝大多数客户端(主要是浏览器)是优先使用 IPV6 进行连接,失败到一定条件才 fallback 到 IPV4(这个 fallback 策略有个标准叫 RFC 6555 happy eyeballs),现阶段 IPV6 的互联状态不是特别理想,经常遇到路由绕来绕去延迟明显高于 IPV4,十分影响日常上网体验,因此建议按需开启设备的 IPV6。

一些其他问题

目前我的 homelab 已经跑了大概两个月,总体来说用着还是挺好的,尤其是最让我满意的一点是有线千兆环境下,内网的 Windows 虚拟机 RDP 体验已经几乎和本机开虚拟机一致(赞美微软),完美解决了我放在家里的 MBA 要使用虚拟机的时候性能过差的问题,虽然冤枉钱还是没少花(比如说买来的万兆交换机由于网卡死活不兼容闲置了),捡垃圾就是要折腾对不对。

由于服务器集成显卡一般非常垃圾(比如说 matrox G200)如果还想用 ESXI 虚拟机做一点普通 Windows 虚拟机能做的事情(比如说 galgame),那可能你需要一张亮机卡,由于各方面的一些限制,消费级显卡直通用起来比较蛋疼,这就是另一个故事了(PS. 个人经验,如果搞不定独显亮机问题,那么把虚拟机里的各种软件的硬件加速关掉让虚拟机单纯使用 CPU 软件加速,有可能效果都要好一些),既然有人问起就稍微展开讲一讲亮机卡的问题:

首先 CPU 要支持 VT-d/IOMMU,否则一切免谈······

其次消费级显卡玩虚拟机直通尽量使用A卡,据炼丹厂朋友的反馈N卡固件上做了一些阉割限制消费卡在虚拟化环境下的使用,比如非数据中心型号的 VBIOS 无法通过操作系统 reset 导致经常遇到问题只能重启,我个人折腾1030的经验是手动修改 esxi vm 的配置文件 hypervisor.cpuid.v0 为 false 才能把显卡通进去,但是这只能让设备正常连上虚拟机,一旦把显示输出切到N卡之后驱动频繁崩溃根本没法用(但是把卡插到物理机上又毫无问题)然后我就发现A卡开箱即用不需要折腾什么驱动什么 vm 配置,AMD YES。

其次可能需要在 BIOS 设置里调整一些配置,比如 IPMI 带外管理默认的输出显卡,不然有可能显卡插上之后 KVM 就没输出了,又比如 above 4GB encoding 问题,见 https://superuser.com/questions/1239231/what-is-above-4g-decodinghttps://rocm.github.io/ROCmPCIeFeatures.html ,配置方法具体厂商具体分析此处不展开讨论。

最后如果要在 RDP 里使用独显进行硬件加速,还可能需要一个诱骗器(在淘宝又叫显卡假负载、锁屏宝之类)让显卡处于工作状态。


不知不觉洋垃圾服务器已经运行快一年了,总的来讲感觉还是非常值回票价的,即使当它是一个大号玩具,它也提供了足够多的乐趣。

3条评论


  1. 您好,新买了台Gen10起了ESXi打算(顺便)玩点GALGAME,发现直接打不起来,亮机卡有什么要注意的吗。

    回复

    1. 亮机卡建议用A卡,N卡消费级玩虚拟机直通非常多问题,我用1030的时候遇到过要改vmx配置才能认卡、驱动频繁崩溃之类各种毛病,摸了个A卡发现开箱即用。当然如果要远程桌面调用独显,还可能需要一个诱骗器骗一下输出

      回复

  2. 虚拟机rdp玩游戏还是有点蛋疼吧

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据