跳到主要內容
節省工具箱Jason Tools
經驗分享

PVE Ceph 叢集退出節點流程

Jason Cheng 發布
PVE Ceph 叢集退出節點流程
本文目錄
  1. 退出前的檢查
  2. 退出 OSD
  3. 退出 MON、MGR、MDS
  4. 清理儲存設定
  5. 把節點移出 PVE 叢集
  6. 檢查清單
  7. 結論
  8. 參考資料

Proxmox VE 的超融合叢集用了幾年,總會遇到要汰換某台主機的時候。如果那台節點同時跑著 Ceph 的 OSD、監視器(MON)、管理器(MGR),就不能直接關機拔線,要先把 Ceph 的角色一個一個退乾淨,再把節點從 PVE 叢集移除。

順序錯了,輕則叢集長時間 degraded,重則資料副本不夠、I/O 卡住。這篇整理我自己退節點的完整流程,例子中要退出的節點叫 pve4。

退出前的檢查

叢集要健康

ceph -s

一定要是 HEALTH_OK,而且所有 PG 都是 active+clean 才開始。叢集本來就有問題的話,先處理好再退節點。

剩下的空間夠不夠

退出節點等於拿掉那台所有 OSD 的容量,資料會搬到其他節點上,剩下的空間要能裝得下:

ceph osd df tree
ceph df

官方建議所有 OSD 的使用率要明顯低於 nearfull_ratio(預設 85%)。粗估方式:目前已用容量 ÷ 退出後剩餘的總容量,超過 70% 就要小心,搬移過程中有 OSD 先滿了,整個儲存集區的 I/O 會被擋住。

副本數與節點數

這點最容易忽略。Ceph 預設的失敗網域是主機,三副本(size=3)就需要至少三台有 OSD 的主機。

ceph osd pool ls detail | grep -E 'size|crush_rule'
退出前退出後三副本儲存集區
4 台3 台正常,可以退
3 台2 台放不下第三份副本,PG 會一直 degraded

只剩三台主機時要退一台,要先加入新節點,或評估調整儲存集區的副本數,不要直接退。

監視器數量

MON 要維持奇數台且至少三台。目前是三台 MON、要退的節點剛好有一台的話,先在其他節點新增一台 MON,再退舊的。

VM 與 CT

把 pve4 上的 VM、CT 全部移轉到其他節點,HA 資源也要確認都已經移走:

qm list
pct list
ha-manager status

退出 OSD

不要設定 noout

退 OSD 是要讓資料搬走,所以不要設 noout,讓 Ceph 正常重新平衡。

網頁介面

進入「pve4 → Ceph → OSD」,每顆 OSD 依序:

  1. 選取 OSD,按 Out:開始把資料搬到其他 OSD
  2. 等重新平衡完成,這顆 OSD 的 PG 數變成 0
  3. 按 Stop:如果還不能安全停止,會跳出警告,按取消稍後再試
  4. 按「更多 → 銷毀」,勾選清除(cleanup)會一併清掉磁碟上的資料

指令

# 列出 pve4 上的 OSD
ceph osd tree | grep -A20 'host pve4'

# 1. out,開始搬資料
ceph osd out 21

# 2. 觀察進度,等所有 PG 都 active+clean
ceph -s
ceph pg stat

# 3. 確認可以安全停止再停
ceph osd ok-to-stop 21
pveceph stop --service osd.21

# 4. 確認可以安全銷毀
ceph osd safe-to-destroy osd.21

# 5. 銷毀並清除磁碟
pveceph osd destroy 21 --cleanup

注意:順序是先 out、等資料搬完,再 stop、最後 destroy。如果先 stop(down)再 out,那段期間這顆 OSD 上的資料只剩其他副本,叢集會處於 degraded;資料量大、搬移時間長的話風險更高。

多顆 OSD 可以一次全部 out,讓 Ceph 一起搬,比較省時間,但搬移量大時會影響叢集效能,建議在離峰時段進行,必要時調整 recovery 速度:

# 降低 recovery 對服務的影響(Ceph Reef 起預設用 mClock 排程)
ceph config set osd osd_mclock_profile high_client_ops

# 搬完改回預設
ceph config rm osd osd_mclock_profile

從 CRUSH 移除主機

所有 OSD 都銷毀後,CRUSH 架構裡還會留著空的 pve4 主機項目,把它移除:

ceph osd tree
ceph osd crush remove pve4

退出 MON、MGR、MDS

進入「pve4 → Ceph → 監視器」,把監視器與管理器區塊中 pve4 的項目先停止,再銷毀。有 CephFS 的話,「CephFS」頁面裡 pve4 的 MDS 也一樣處理。

指令:

pveceph mon destroy pve4
pveceph mgr destroy pve4
pveceph mds destroy pve4    # 有 MDS 才需要

確認:

ceph mon stat
ceph mgr stat
ceph -s
grep mon_host /etc/pve/ceph.conf

ceph.conf 的 mon_host 不應該再有 pve4 的 IP;如果還在,手動編輯 /etc/pve/ceph.conf 移除。

清理儲存設定

「資料中心 → 儲存」裡如果有限定只在 pve4 上使用的儲存(例如本機的 LVM、ZFS、目錄),先移除或改掉節點限制,否則節點移除後設定會殘留。

把節點移出 PVE 叢集

Ceph 都退乾淨之後,才把 pve4 從 PVE 叢集移除:

先關閉 pve4,而且之後不能用原本的設定再接回網路。接著在其他任一節點執行:

pvecm nodes
pvecm delnode pve4
pvecm status

再清理殘留的節點目錄:

ls /etc/pve/nodes/
rm -r /etc/pve/nodes/pve4    # 確認裡面沒有需要的設定再刪

注意:被移除的節點如果原封不動又開機接回網路,它會以為自己還在叢集裡,可能造成叢集設定混亂。要重新使用這台機器,請先重灌,或依我之前那篇的方式將它分離成獨立節點。

詳細的分離方式可以參考〈Proxmox VE 將節點由叢集分離出來為獨立節點〉。

檢查清單

步驟確認項目
1HEALTH_OK、空間足夠、退出後主機數不小於副本數、MON 退出後仍有奇數台
2VM、CT、HA 資源都已移走
3OSD:out → 搬完 → stop → destroy,全部完成後 ceph osd crush remove
4MON、MGR、MDS 停止並銷毀,ceph.conf 已更新
5儲存設定沒有殘留
6關機後 pvecm delnode,清理 /etc/pve/nodes/
7最後再確認一次 ceph -s 與 pvecm status

結論

退節點最重要的就是順序與耐心:先確認空間與副本數夠不夠,OSD 一定要等資料搬完才停,最後才動 PVE 叢集。整個流程最花時間的是資料搬移,資料量大的話可能要好幾個小時,千萬不要因為等太久就跳步驟。

參考資料

Jason Cheng

Jason Cheng

企業開源技術顧問,專注架構規劃與實務導入

關於作者 →

延伸閱讀