前面先導篇全面性介紹了搭建家用 homelab 軟硬體的可能性,實際操作上每個人的室內環境,網路布線都不太一樣,鈔能力的不同也有會千萬種解法。我無法給出一個 100% 的解決方案,但我給大家回顧自己設備架構演變的過程在每個階段是什麼需求,遇到什麼問題以及如何應對的,在文章末尾也會給出一些搭建 homelab 中不容忽視的因素。
我的設備架構#
首先聲明個人設備架構並不代表這是最佳的方案,只是當前符合我要求的結果,隨著需求和技術變化而迭代更新。我的夢想就是有間下圖的地下室能夠給我隨意折騰就好了。
homelab 夢想預期,創意來源@HCocoa@twitter
當時房子裝修是一切從簡造成網路線路設計不太合理:
- 電視牆,臥室和工作室雖預埋 6 類網線但都是單根
- 弱電箱太小無法擴展,前期很多設備都堆積到電視後面
- 房子不大無法設置散熱友好的獨立機櫃
- 房間有 WIFI 死角
新增家庭成員後原工作室改成了兒童房,部分設備又做了遷移,只能基於現有的結構進行優化和改進,以下請目睹我的血淚史。
設備架構演變#
2014 ~ 2016#
v0 設備架構拓撲圖
這個期間換了新工作上班通勤每天都較長回家也不太折騰網路,路由器是從租房時代沿用過來的網件 WGR614。電視圖便宜買了當時樂視出的第一代智能電視滿足打開聽個響的需求結果不到半年時間系統卡成翔,以至於之後再也沒考慮過 Android 系統電視,頭兩年為了省錢明知在北京應該用聯通還是莽了北方電信,那網速真是垃圾啊。還撿了一些不太可靠的垃圾件就不提了。
2016 ~ 2018#
v0.1 設備架構拓撲圖
托工作福利政策出國旅遊頻次逐漸變多,拍攝的照片越來越多需要存儲,2016 年從什麼值得買了解後德淘了一台 HP Microserver Gen8。這是一台擁有 4 盤位,雙千兆網口還帶 iLO 管理功能的伺服器,我卻給它只安裝了黑群暉算是成為了最早的 NAS 伺服器設備架構,5.x 版本的群暉還不支持 Docker 算是一台單純的 NAS 服務用來存儲照片、視頻、替代 Dropbox 的 Drive 服務,從上圖也能看到我當時完全不了解什麼是鏈路聚合,要不然我肯定給黑群暉接入雙網口了。
路由器升級到了網件 6300v2 並刷入了 KoolCenter 定制化的梅林固件方便暢遊網路,內網穿透這個時候被迫在使用,黑群暉升級後沒法完全洗白之前的群暉 QuickConnect 服務被廢,從聯通客服申請公網 IP 後在通過 DDNS 定時上報(腳本還是糖醋鼻子提供的)。
電視更換成了索尼 4K 60 寸互聯網電視,外接了一個晶晨 S912 外貿盒子安裝了 Kodi 和 Youtube 成為家庭影音系統。
PS 4 應該是在某一年黑五美亞捆綁贈送了 GTA5 和最後生還者的版本。
2018 ~ 2019#
v1 設備架構拓撲圖
2018 年我在推上吐槽梅林固件刷機太難被 anbutu 安利 openwrt 系統並贈送了一台 N270 x86 32 位雙網口工控機讓我了解了新領域:軟路由。
黑群暉升級到了支持 Docker 的 6.x 版本,開始嘗試跑一些基礎服務,比如 aria2,home assistant,Adguard home 等。不知道什麼時候小區會莫名其妙突然停電幾分鐘後再恢復,有一次硬盤被群暉的檢測爆出來好多壞道,嚇得我立刻買了施耐德 APC BK650 帶通訊協議,接入群暉保證斷電後安全關機。
2019 年初開始學習拍攝視頻,採購了新的 Intel 主機在時隔 9 年後重新學習安裝黑蘋果來代替年邁的 Macbook Pro 2015 款,期間不升級後續版本主要是因為 Intel 太拉,Apple 把硬體全焊死升級頂配不值得。
2020 ~ 2021#
v2 設備架構拓撲圖
2020 年末實際上才是我正式踏入 homelab 元年,之前只是滿足存儲需求的 NAS 服務。
軟路由升級了至 E3845 四口工控機(代號 Larva)它只承擔最基礎服務比如撥號,DNS 服務、屏蔽廣告,DDNS 等。
交換機謎之自信選擇網件 GS105 4 口非網管版,當時很多人問我為什麼不選 8 口,我沒有意識到後面的變化只是考慮弱電箱只能塞下 4 口。
應用服務由當時新爆出來的蜜獾超存(代號 Corruptor)礦機1承擔:6 盤位 / 雙千兆網口 / J1900 CPU /8G 內存 / 64G MSATA,我主要是看中了它的機箱體積和設計,比蝸牛星際之類的好看太多。在它身上分別調研嘗試下列系統:
- Debian: 直接跑 Docker 服務有點心不甘
- OMV: 最簡單的 NAS 系統提供 Docker/Proxmox 內核,但任何操作都要 Apply 好久,實在沒法接受
- Proxmox: 跑十幾個不太吃性能系統及服務勉強可接受
- harvester: Rancher 開源的基於 k8s 提供完全集成的存儲和虛擬化功能的超融合基礎架構軟體,萬萬沒想到 J1900 帶不動...
或許你會問為什麼不利用好 Gen 8 伺服器?原因是 G1610T 性能太弱帶不起 ESXI 虛擬化,可升級 CPUs 比如 E3 1265L v2 之類的價格都虛高。我從一開始就把它當做純粹的 NAS 伺服器。四盤位上設置兩兩硬盤組成 RAID 1。一組 RAID 3T 作為照片存儲,第二組 3T 是提供給蜜獾超存安裝的服務提供數據存儲服務,光驅位擴展一個 SSD 充當快取盤就完事了。
經過一番折騰倔強的 J1900 扛不住壓力,從咸魚分別入了 17x17 豆希 ITX 主板,定制了 flex 電源,改了靜音風扇,配上 8700es CPU,PDD 入的單條 32G 內存和酷獸 256G M2 SSD,復用蜜獾超存的機箱但它機身寬度較窄符合要求的只有利民 AXP90 x36,機箱後出風用都是酷冷的漩渦 80 靜音風扇。
系統繼續使用 Proxmox 設置備份還原工具2後用 VMs 跑 jellyfin, portainer, vaultwarden, uptime kuma, traefik 等監控、數據庫、應用服務,存儲方面酷獸 SSD 作為系統盤,閒置的 4 塊硬盤組了 btrfs RAID 10,第五塊做 3T 做電影、電視劇下載盤,最後一塊是備用。
通過兩次硬體升級淘汰的主機也都沒有失去價值
2022 ~ 2023#
實際上是 2022 整年的版本,後續有變化會再更新。
v2.1 設備架構拓撲圖
原計劃是可以安心跑個 1 - 2 年不太可能會有什麼大變化,只需要在基於 Proxmox 系統繼續試驗並搞定多 VMs 跑 k8s/k3s 集群後就能安心養老,兩次事故打亂了我的規劃。一次是升級至 64G 內存後掛了塊硬盤,幸好從 RAID 移除後還能正常工作;第二次直接 All in one boom 原因是 CPU 散熱風扇無法工作。在採購風扇和優化機箱風道期間給了我反思的過程,我明明是排斥 All in one 設計的結果自己主力開發機也是這樣的設計,服務越多則越要保證服務可用性,那就要新添至少 1 - 2 新主機但家裡真的沒有更多的地方,翻閱國內外的資料目標鎖定了幾個目標:
- NEC M700: 6 代,魔改支持 7/8/9 代
- 樹莓派 4B: 有豐富的成功案例但價格簡直一個離譜3
- 榮品 king3399: RK3399 性能強但我沒趕上車價格被炒上去且 2G 內存有點小
某天在閒魚刷推薦線看到一個比榮品 king3399 更好的 EAIDK 610 RK3399 開發板 4G 內存價格才 200 出頭,嘗試買了兩個又在 anbutu 和社區 eaidk-610 armbian-build 項目的幫助下成功編譯並燒錄了 armbian 系統,跑通 k3s 服務後又入了兩個和 Proxmox 的 VMs 組成了 amd86 和 arm86 的混合集群。
就這上面集群測試跑通的同時 J1900 主機也完成了對 nomad 服務的試水並逐步穩定下來,後面也可以和 Proxmox VMs 組成混合集群。
內網穿透方面除了公網加端口之外多了 traefik hub 方案。作為最早一批內測用戶還額外擁有更多的免費額度,現在免費版限制最大 5 個公網服務。
Gen 8 在更換新的氦氣盤轉移數據有大量的視頻轉碼工作要跑 CPU 有點吃不消,閒魚 1230v2 價格 150 收了它繼續賣命,群暉需要修改才能正確識別新 U。
我的設備選擇#
用了很長的篇幅介紹了我的設備演變史,從文字和拓撲圖大家已經了解了七七八八,為了方便理解這裡會再彙總一份供大家賞閱。在軟硬體的折騰方面我總能想起明城大哥。
軟硬體我採用的是 thoughtworks 技術雷達 的策略把任何一個方案劃分成評估
、試驗
、採納
和暫緩
4 個階段,因此會包含很多解決方案,標記採納
的可安心服用。
硬體#
主機代號 | 系統 | 階段 | 數量 | 用途 |
---|---|---|---|---|
Immortal amd64
9700k/32G/6TB/6600xt | macOS Windows | 採納 | 1 | 個人生產力工具 |
Queen amd64 HP Gen8 (1230v2/8G/40TB) | 群暉 | 採納 | 1 | NAS |
Corruptor amd64 蜜獾超存 (8700es/64G/10TB) | Promox | 採納 | 1 | 虛擬開發機 |
Bunker amd64 J1900/8G/1TB | Debian | 採納 | 1 | Nomad 集群成員 |
Larva amd64 E3845/2G/16GB/i211x4 | Openwrt | 採納 | 1 | 軟路由 |
Splitter arm64 EAIDK610 (RK3399/4G/6+128GB) | Armbian | 試驗 | 4 | k3s 集群 |
Colossus arm64 Apple TV 2021(4K/32G) | Apple TV | 採納 | 1 | 新電視盒子 |
Lair armv8 H96 Pro+ (S912/4G/32GB) | Android TV | 採納 | 1 | 備用電視盒子 |
Drone arm64 Orange Pi 3 LTS | Armbian | 評估 | 1 | 未完成的 IP KVM |
當主機出現故障需要維護時需要單獨的顯示器和鍵鼠,更好的解決方案是 IP KVM。現有方案要麼僅支持樹莓派 4B,要麼需要兩個開發板。我曾使用樹莓派 3B 和 香橙派 3LTS 刷入 tinypilot 只能開啟 HDMI 畫面採集,無法模擬鍵鼠操作。
偏向底層及硬體一直是我的弱項,我想世界末日了我們這些寫軟體服務的都會在第一時間掛了吧,哈哈哈。
硬盤#
在個人能力範圍內優先級考慮:M2 SSD
> SATA SSD
> 氦氣盤
> 非疊瓦盤
,這方面我也看著大家的建議買,建議是硬盤太多做好整理,尤其是購買時間,購買渠道,購買數量,硬盤編號,保質年限,過保時間以及定期的 SMART 檢測數據記錄。
硬盤大軍
硬盤分布情況
UPS 電源#
一次電力的閃斷更有可能讓伺服器硬體(尤其是的硬盤)就會出現故障而壞掉,保證硬體和數據的安全性 UPS 電源是必備的,優先考慮支持通訊的,因為停電雖然有 UPS 可以用電池模式繼續保持運行,電池電量是有限的伺服器如果知道當前的狀態進行安全關機。
UPS 設備 | 輻射範圍 | 描述 |
---|---|---|
APC BK650 | Proxmox + 黑群暉 + WIFI AP | 連接 Proxmox 並開啟 NUT 服務和 apcupsd 數據接入 Prometheus |
APC BK650 | 黑蘋果 + Armbian 集群 + Nomad | 連接 Nomad 並開啟 NUT 服務 apcupsd 數據接入 Prometheus |
弱電箱 UPS | 光貓 + 軟路由 + 交換機 | 軟路由接受其他兩個 NUT 通知 四口 12V 還富裕一個 |
我只使用過施耐德 APC 帶有通訊協議的 UPS 基本上可通過 apcupsd 或 NUT(絕大多數 NAS 系統比如群暉、威聯通等都支持)通過該服務可以讓沒有直接插通訊線的設備也能過接收到通知並執行安全關機操作4。
軟體#
操作系統#
操作系統 | 階段 | 描述 |
---|---|---|
proxmox | 採納 | 高可玩性且兼具自動化管理的虛擬機系統 |
debian | 採納 | 作為伺服器個人最熟悉的基礎 amd64 OS |
armbian | 採納 | ARM 版本的 Debian,理由同上 |
openwrt | 採納 | 可玩性很高的開源軟路由系統 |
talos | 試驗 | 100% API 管理且支持多部署環境的基於 k8s 實現的發行版 |
pi-hole | 試驗 | 國外非常流行的 DNS 管理系統,介面友好 |
rockstor | 評估 | 基於 openSUSE + btrfs 的 NAS 系統,支持 SMART 和 NUT 注意不兼容 Asia/Beijing 時區 |
kairos | 評估 | 新發布的容器化系統,感興趣但還沒成功跑通 |
truenas | 評估 | 基於 FreeBSD 開發的 NAS 系統(ZFS 首選) |
omv | 暫緩 | 完成度高的 NAS 系統但個人無愛 |
photonOS | 暫緩 | Vmware 虛擬化優化但嫌棄 redhat 系統 |
smarterOS | 暫緩 | 支持虛擬化和 ZFS 但依賴高內存成度的 NAS 系統但個人無愛 |
性能強大的機器以 Proxmox 作為宿主機內部套 Debian 或 Armbian 來跑所需的服務或基於容器化技術的編排管理服務或容器化系統(Linux Container OS5)
文件系統#
類型 | 階段 | 描述 |
---|---|---|
btrfs | 採納 | 磁碟管理方便,支持快照和 COW |
ext4 | 採納 | 最保險的文件系統 |
zfs | 評估 | 強健可靠、可伸縮、易於管理就是吃內存 |
xfs | 評估 | 據說速度很快,個人沒有太多研究 talos 默認文件系統 |
個人優先級選擇 btrfs
> ext4
> zfs
> xfs
。注意的是 btrfs 現階段不建議使用 RAID 5/6,不太考慮 zfs 是組 RAID 後新增硬盤麻煩且有成本。xfs 真不了解,感興趣的可以看下以上文件系統在 PostgreSQL 的基準測試。
對 btrfs 我個人的看法是只有自己嘗試過才知道結果,儘管 Promox 7.0 第一把 btrfs 作為技術預覽的情況下發布,我也做了小白鼠使用它在將近 2 年的時間內基本正常,只有一次小故障還是因淘寶買的垃圾硬盤質量太差出現太多的壞道。btrfs 在 RAID10 最低 4 塊磁碟的前提下移除掉壞盤也能過正常工作(刪減都做一次 balance 即可),除此之外我並沒有遇到任何問題。雖然 COW 特性會拖累磁碟 IO 現狀也都能接受。
對 btrfs 感興趣的小夥伴推薦看 @Houge 的教學視頻或者 openSUSE 官方推出的入門教學視頻。用過或已入門 btrfs 的可深入閱讀 btrfs 與 zfs 快照實現差異,btrfs 與 xfs 對比,Five Years of Btrfs 和 BTRFS Best Practices 做到心中有數。
存儲服務#
服務 | 階段 | 描述 |
---|---|---|
samba | 採納 | 兼容性和實用性最高,僅建議手動文件掛載使用 |
nfs | 採納 | 可作為最低保障數據掛載 |
minos | 採納 | 兼容 S3 應用的開源存儲服務 |
juicefs | 試驗 | S3 兼容且 POSIX 兼容性高的開源存儲服務 |
longhorn | 試驗 | 簡單好用的塊存儲開源服務,磁碟遷移很容易 |
rook ceph | 評估 | 當下具有很大潛力的雲原生存儲服務 小集群或弱雞 CPU 不建議使用 |
mayastor | 評估 | 針對 NVME 優化的塊存儲服務 |
存儲方面之前都是 Samba、NFS 甚至只用 APF,直到 2022 年才正式開始在生產環境試驗,尤其是針對 k8s 的存儲我還是一個小白。
容器化管理及編排服務#
服務 | 階段 | 描述 |
---|---|---|
portainer | 採納 | 支持 Docker/k3s/nomad 多種編排服務的管理服務 |
kubesphere | 暫緩 | 新手和企業友好的 k8s 前端容器管理服務,整體來說有點重 |
nomad | 採納 | 入門門檻較低但缺乏教學資料的編排服務 |
k3s | 試驗 | 針對邊緣計算、物聯網等場景進行了高度優化輕量級的 k8s 發行版 |
kubernetes | 評估 | 100% 正統血緣 k8s,不敢靠近 :D |
docker swarm | 暫緩 | 官方自己都快棄權的編排服務,不推薦 |
Portainer 是一款新人友好的容器管理工具,至今我現在也還在用。k3s 也是最容易跨進 k8s 世界且 edge 友好的編排服務。
網關#
服務 | 階段 | 描述 |
---|---|---|
traefik | 採納 | 個人認為最好用的網關服務 |
caddy | 採納 | 簡單好用的支持 Let's Encrypt 的網關服務 |
nginx | 採納 | 管理多域名可考慮 nginx proxy manager |
雖然都是標記的採納
,我主要用前兩個,網關首推 traefik,簡單使用 caddy,前兩個簡單好用功能還強大我想不出來理由用第三個。
自動化部署#
服務 | 階段 | 描述 |
---|---|---|
ansible | 採納 | 無代理(利用 SSH)就能自動化部署的配置工具 |
terraform | 採納 | 只要有介面管理的服務都能自動化部署的工具 還是 ansible 最佳排擋 |
fluxcd | 試驗 | 最好用的 gitops 裡對 k8s 自動配置部署工具 |
argocd | 試驗 | gitops 裡對 k8s 自動配置部署還有可視化拓撲圖 |
pulumi | 試驗 | 支持多種原生語言配置版本的 terraform 實現架構優秀,使用者友好,插件開發者痛苦 |
salt | 暫緩 | 有代理,當初一經面世就要碾壓 ansible 的方案 看看市場的選擇,它也不咋地嘛 |
只要是跟操作系統打交道的 ansible + terraform 打遍天下無敵手!fluxcd 在對 k8s 服務配置和部署上確實找不出毛病,門檻有就看你能不能入門,建議在熟悉 k8s 基礎概念和有一定實際部署經驗後再使用。
不容忽視的因素#
大量的篇幅介紹了我個人 homelab 設備架構演變和軟硬體的選擇,還有什麼容易忽略的因素呢?
如果把設備比做核心建築,不容忽視的因素那就是基礎建設。兩手都要抓這樣才能以確保 homelab 能夠發揮最大的效能,誰也不想性能無法 100% 壓榨或意外故障的發生。
網線規格#
務必保證所有 homelab 的設備都接入千兆以上有線網路
,WIFI 會收到周圍信道干擾、傳輸衰減等不穩定性問題。
不同規格網線速率圖,資料來源IEEE 802 LMSC
規格 | 類型 | 速率 | 介面 | 備註 |
---|---|---|---|---|
五類線 CAT 5 | 100Base-T 10Base-T | 100Mbps | RJ45 | 不推薦 |
超五類線 CAT 5E | 100Base-T | 1000Mbps 2.5Gbps{{< /div >}}[^bandwidth]{{< div >}} | RJ45 | 2.5G 網路僅限 100 米以內 |
六類線 CAT 6 | 100Base-T | 1Gbps 10Gbps | RJ45 | 萬兆網路僅限 50 米內 |
超六類線 CAT 6A | 100Base-T | 10Gbps | RJ45 | 200 米內可達萬兆網路 沒有 6E 標準 |
七類線 CAT 7 | 100Base-T | 10Gbps | GG45/TERA | 帶著遮蔽 |
光纖 | - | - | - | 不懂,詳見維基百科 |
再次重申 千兆以上網路是不可或缺的
,最低限度使用 CAT 5E,強烈推薦使用 CAT 6/6A 規格,土豪們 CAT 7 或光纖隨意。假如你不知道家裡網路的狀態提供兩種方法檢查:
- 查看網線上面的印字會有網線規格標識
- 過 iperf3 在兩台任意可連接有線的設備充當伺服器端和客戶端進行檢測。
# 一台開啟服務端,假設伺服器 IP 是 192.168.1.100
iperf3 -s
# 一台開客戶端,連接伺服器進行測試
iperf3 -c 192.168.1.100
噪音和散熱#
- 硬體
- 機械硬盤讀寫盤的噪音(有錢就全 SSD 或等待 EDSFF E1/E3 卡民用)
- 風扇的軸承、轉速和大小也會產生噪音(CPU 散熱、顯卡、機箱、電源等)
- 主板 DEBUG 蜂鳴器(有的可關閉或拆除)
- 軟體
- 群暉為保障系統穩定性默認會全盤寫入系統作為 backup 若要解決噪音問題建議策略性移除
- Linux 系統可考慮使用 lm-sensors 偵測配置
- 空間
- 擺放位置決定噪音耐受度和散熱效率
省電和功率#
CPU 的待機 TPW 只是參考,還需要考慮硬盤,內存和顯卡整體,還需要考慮峰值功率,這塊沒有太多可展開的。要考慮能效但也不過分的在意,尤其是為了降低 5 - 10w TPW 而購買溢價過高的產品,這個在前篇的小結也有提到。
小結#
在 homelab 這條路上剛開始選什麼硬體不重要, All in one 基本上是每個入門都會經歷的,隨著時間推移,就像房子需要維修、車子需要定期保養一樣,服務的穩定性、數據安全性都需要關注和維護。
你可能會說我 all in one 幾年了一切穩定,我只能說:沒有經歷過痛苦的人永遠不知道什麼叫痛。