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

PVE Ceph 叢集退出節點流程

Jason Cheng 發布 瀏覽 16 次
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

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

關於作者 →

延伸閱讀