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

PVE Ceph 殘留 Monitor 的清除與重建

Jason Cheng 發布 瀏覽 1 次
PVE Ceph 殘留 Monitor 的清除與重建
本文目錄
  1. 先確認狀況
  2. 先試 PVE 的正規方式
  3. 從 monmap 移除
  4. 清除 pve2 上的 MON 服務與資料
  5. 修改 ceph.conf
  6. 重新建立 MON
  7. 步驟整理
  8. 結論
  9. 參考資料

Proxmox VE 的 Ceph 管理介面裡,有時會出現一個怎麼樣都刪不掉的 Monitor(MON):狀態顯示未知、按銷毀會失敗,想在同一個節點重新建立 MON 又說已經存在。這通常發生在節點重灌、MON 沒有正常移除、或是移除到一半出錯之後,留下了「殘留」的 MON 設定。

這篇整理清掉殘留 MON、再重新建立的步驟,以 pve2 這個節點為例,請換成你自己的節點名稱。

先確認狀況

ceph -s
ceph mon dump
ceph quorum_status --format json-pretty | grep -A5 quorum_names
grep -A3 'mon' /etc/pve/ceph.conf

要確認三件事:

  • 叢集目前有沒有 quorum:ceph -s 能正常回應,就代表其他 MON 還能形成 quorum,可以用本文的做法
  • monmap 裡還有沒有 pve2:ceph mon dump 看得到的話,要從 monmap 移除
  • ceph.conf 裡還有沒有 pve2 的設定:[mon.pve2] 區段或 mon_host 裡的 IP

注意:如果 ceph -s 一直卡住沒有回應,代表剩下的 MON 無法形成 quorum,本文的方法不適用,要改用 Ceph 官方「從不健康的叢集移除 Monitor」的程序(擷取 monmap、用 monmaptool 移除、再注入回去)。這個操作風險較高,請先備份並詳讀官方文件。

先試 PVE 的正規方式

在 pve2 上執行:

pveceph mon destroy pve2

能成功的話就不用往下做了,直接跳到第五步重新建立。失敗的話(例如顯示找不到 MON、服務不存在),再用下面的手動方式清理。

從 monmap 移除

在任一台正常的節點上執行:

ceph mon remove pve2
ceph mon dump

已經不在 monmap 裡的話,這個指令會回報不存在,不影響後續步驟,執行一次沒有關係。

清除 pve2 上的 MON 服務與資料

在 pve2 上執行:

systemctl stop ceph-mon@pve2
systemctl disable ceph-mon@pve2

MON 的資料目錄先搬走備份,確認一切正常後再刪除:

mv /var/lib/ceph/mon/ceph-pve2 /root/ceph-mon-pve2.bak

Ceph 官方文件對被移除 MON 的資料目錄也是建議「封存到安全的地方,或刪除」,先搬走保留,萬一弄錯還有回頭的機會。

修改 ceph.conf

PVE 的 Ceph 設定檔是 /etc/pve/ceph.conf,放在叢集共用的檔案系統裡,在任一台節點修改,所有節點都會同步。

cp /etc/pve/ceph.conf /root/ceph.conf.bak
nano /etc/pve/ceph.conf

要改兩個地方。

刪除 pve2 的 MON 區段(如果還在):

[mon.pve2]
    public_addr = 10.10.10.2

從 mon_host 移除 pve2 的 IP:

# 修改前
mon_host = 10.10.10.1 10.10.10.3 10.10.10.2

# 修改後
mon_host = 10.10.10.1 10.10.10.3

mon_host 是用戶端與服務啟動時用來找 MON 的清單,真正的 MON 成員以 monmap 為準。殘留的 IP 不一定會造成問題,但會讓用戶端每次都嘗試連一個不存在的 MON,也會讓之後重新建立時判斷錯誤,建議清乾淨。

改完之後,可以讓其他 MON 重新讀取設定(可以從網頁介面操作,也可以用指令,一台一台來,等前一台恢復再重新啟動下一台):

systemctl restart ceph-mon@pve1
ceph -s
systemctl restart ceph-mon@pve3
ceph -s

注意:只剩兩個 MON 時,任何一個停下來,叢集就會失去 quorum。重新啟動時一定要確認前一個已經回到 quorum,不要兩台同時重新啟動。

重新建立 MON

回到 PVE 網頁介面,「pve2 → Ceph → 監視器 → 建立」,選擇 pve2 建立。或在 pve2 上執行:

pveceph mon create

建立完成後確認:

ceph mon dump
ceph -s

三個 MON 都在 quorum 裡、ceph -s 回到 HEALTH_OK,就完成了。/etc/pve/ceph.conf 的 mon_host 也會自動把 pve2 加回去。

確認穩定之後,再刪除第三步搬走的舊資料:

rm -rf /root/ceph-mon-pve2.bak

步驟整理

步驟在哪裡指令
1任一節點ceph -s、ceph mon dump 確認有 quorum 與殘留狀況
2pve2先試 pveceph mon destroy pve2
3正常的節點ceph mon remove pve2
4pve2停用 ceph-mon@pve2,搬走 /var/lib/ceph/mon/ceph-pve2
5任一節點修改 /etc/pve/ceph.conf,一台一台重新啟動其他 MON
6pve2pveceph mon create 重新建立

結論

殘留 MON 的清理順序是:monmap 移除 → 停止服務、搬走資料 → 清 ceph.conf → 重新建立。整個過程最重要的是隨時確認 quorum:只剩兩個 MON 的時候,任何一個停下來叢集就會卡住,重新啟動一定要一台一台來。

參考資料

Jason Cheng

Jason Cheng

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

關於作者 →

延伸閱讀