前言
由於手賤多買了一台伺服器,現在家裡一共有三台 Server 在跑,於是決定將三台組成 Ceph,提供更彈性的磁碟使用方法和更高的容錯備援。
安裝
系統規劃如下:
- 三台都是 Proxmox VE
- 使用 cephadm 而不是 PVE 內建的 ceph
- 有兩台必須用 USB 開機引導至 SSD,有一台則可以原生 SSD 開機
- 舊一點的機器不支援 PCIe / NVMe 開機
- 兩台機器都有 Internal USB Port,我猜就是拿來這樣用的
轉移流程:
- 將原先兩台 PVE 的 CT 和 VM 備份到兩顆硬碟中
- 關機、整線、上新機器
- 補 RAM、插 10G 網卡、補 SSD、插網路線
- 因為只有三台,所以決定買有雙口的 10G 網卡組成環。
- 補硬碟
- 刷 HBA
- 將原本只有 RAID 模式的 RAID 卡刷成 HBA 模式
- 裝系統
- 處理引導
- 裝 cephadm
- 將硬碟加入 ceph
- 蓋 Pool
- 還原 ct 和 vm
- 將還原用的硬碟 Wipe 掉以加入 ceph
- 等重新平衡完成
雷
systemd-boot
在 裝系統
和 處理引導
這兩個步驟時,我們卡了好幾個小時 –
因為要使 Proxmox 能用 USB 開機,我們得使用 systemd-boot 的引導方式。
而 systemd-boot 不喜歡 lvm – 這會使得傳統的 ext4 安裝 PVE 無法使用 systemd-boot,就算將引導安裝好了,開機的時候他也會找不到 pool 因此無法開機。
解決方法是安裝在一個 Single Disk 的 ZFS(RAID0) 上。
詳細的安裝流程我有寫在 gist 上,有興趣的同學可以參閱。
NAS
目的
由於原先 NAS 是安裝在 VM 裡的 Xpenology,硬碟部分是直接通了一個 10T 的 Block,在轉移到 Ceph 的 RBD 上時花了相當多的時間。
確認資料都還在之後,就一直在考慮要不要把裡面的資料轉到 rgw 或是 CephFS 上之類的再掛進 NAS,這樣以後要重裝或是資料轉移的時候就不用處理整個 Block Device,應該會省事很多。
希望不受影響的功能
- Download Station
- RSS 下載
- 會自動幫我載 BT,然後放進指定的資料夾裡面
- RSS 下載
- Cloud Sync
- 會自動幫我把資料 1:1 複製到 Cloud 上
- SMB
- 區網要用
- NFS
方案
方案 1
首選的方案規劃是:
- Ceph 蓋一個 NAS CephFS
- NFS Export
- NAS 掛 NFS
- 將資料轉移至 NFS 上
不過在實作這個方案時遇到了一些問題:
1. Ceph 只支援 NFSv4.1+ 的 Export
DSM 只支援掛載 NFSv3 和 NFSv4,並不支援 NFSv4.1。
雖然嘗試過更改型號、系統升級、手動使用 mount 指令等等,不過都無功而返,掛不起來。
另外,也嘗試過令 Ceph 強迫 export NFSv3,確實掛的起來,不過寫入一陣子 NFS Server 就會死掉,非常不穩定。
2. NFS 的 Mount 並不支援 inotify 類的通知,因此 Cloud Sync 有高機率無法使用
由於通過網路掛載的磁碟系統寫入等的不一定會通過 kernel,因此 inotify 並不可靠,可以預想到 Cloud Sync 會無法使用。
因此此方案無法使用。
方案 2
方案 2 的規劃:
- Ceph 蓋一個 NAS CephFS
- 在 Proxmox VE 上 Mount 起來
- 使用 VirtFS (p9 folder sharing via VirtIO) 將 Folder share 給 DSM
- 在 DSM 內掛起來
- 將資料轉移至 Folder 上
不過在實作這個方案時也遇到了一些問題:
1. 在 DSM 內 p9 的 mount 有些問題
在確認過 DSM 有 p9 需要的相關 Kernel Module 後 (因為 vDSM 有需要,所以他們有內建)便開始實施這個計畫。
雖然成功將 Folder share 給 DSM 了,不過在 Mount 之後發現 Folder 有很奇怪的現象發生:
- 在 DSM 內可以看到 Folder 被 Mount 了,不過無法 ls,會出現
no such device or address
的錯誤。 - 也無法讀取檔案內容 (
cat
),或是寫入檔案內容echo > file
touch
和mkdir
等指令也會出錯- 不過可以在 host 確認確實有這個檔案/資料夾被新增,只是沒有內容。
- 但可以確認到在檔案被建立後,在 DSM 內
ls -d file
是可以確認到檔案的存在的
懷疑過是 CephFS 本身的鍋,因此改掛 NFS 並同樣 Share 給 VM,問題依舊。
也懷疑過是 Share 的 permission 問題,因此嘗試了 passthrough
、mapped
、none
等各種屬性,結果還是一樣。
這個問題試了一兩天都無法解決,因此此方案無法實現,否則這個方案應該是蠻漂亮的,可惜了。
方案 3
方案 3 的規劃:
- 棄用 DSM,改用 NextCloud
- NextCloud 用 External Storage 掛 S3
- Ceph 蓋一個 rgw export 給 NextCloud
- 將資料轉移到 NextCloud 上
原先的服務:
- Download Station
- 改用 NCDownloader (Aria2 + yt-dlp)
- RSS 下載使用 FlexGet 實現
- Cloud Sync
- 似乎無法達成
- 有想過在一個 VM 內掛 s3fs 並使用 inotify 之類的監聽,rclone 到 remote
- 不過老問題,這種遠端掛載的 fs 都不支援 inotify,何況 s3fs 並不是完整的檔案系統。
- SMB
- 蓋一個 Samba VM,掛 s3fs 後 export
- 或是直接用 Nextcloud App
- NFS
- 由 Ceph Export
這個方案除了 Cloud Sync 不能用以外,應該還算堪用,因此我有先將一個 Nextcloud 架起來。
不過目前資料還沒搬上去,還在猶豫中,因為 Cloud Sync 不能用了真的很傷。
方案 4
方案 4 的規劃:
- 繼續用 DSM
- Download Station 的 Temp 用同一個 Block Device 太笨了
- Replica 3/2,寫入放大會很嚴重
- 改建 EC(k=2, m=1) 的 CephFS,用作 Download Station 的 Temp Dir
目前已經實裝完成,沒有甚麼大麻煩,不過問題還是沒解決,只舒緩了一點寫入放大的副作用而已。
目前還是希望有更好的方案出現,方案 3 有點笨。
一些失敗的方向
DSM 掛 s3fs
不行,s3fs-fuse 裝不起來。
DSM 掛 NFSv4.1
不知道問題出在哪,因為他有 NFSv4.1 的 Server ,不知道為什麼 NFS Client 沒有支援。
DSM 跑的是一個精簡的 debian,但我找不到問題在哪,也不敢亂裝東西。
不想嘗試的方向
rclone 掛 s3fs
感覺太不穩了
希望能找到解決 9p mount 的方法,不過上網查了很久沒有看到有人有相關的錯誤,一點頭緒都沒有。
有空的話應該會另外開一台 VM 來試到底是 export 有問題還是 DSM 的 mount 有問題。
後記
這篇文章本來沒打算打那麼長的,但一不小心就打了三千六百字,應該是第一篇分享那麼長的系統建置文章,好累。