Ceph 存儲集群-低級運維
低級集群運維包括啟動、停止、重啟集群內的某個具體守護進程;更改某守護進程或子系統配置;增加或拆除守護進程。低級運維還經常遇到擴展、縮減 Ceph 集群,以及更換老舊、或損壞的硬件。
一、增加/刪除 OSD
如果您的集群已經在運行,你可以在運行時添加或刪除 OSD 。
增加 OSD
你遲早要擴容集群, Ceph 允許在運行時增加 OSD 。在 Ceph 裏,一個 OSD 一般是一個 ceph-osd 守護進程,它運行在硬盤之上,如果你有多個硬盤,可以給每個硬盤啟動一個 ceph-osd 守護進程。
通常,你應該監控集群容量,看是否達到了容量上限,因為達到了它的 near
註意:不要等空間滿了再增加 OSD ,空間使用率達到 near full 比率後, OSD 失敗可能導致集群空間占滿。
部署硬件
如果你通過增加主機來增加 OSD ,關於 OSD 服務器硬件的配置請參見硬件推薦。要把一臺 OSD 主機加入到集群,首先要安裝最新版的 Linux ,而且存儲硬盤要做好必要的準備,詳情參見文件系統推薦。
把 OSD 主機添加到集群機架上,連接好網絡、確保網絡通暢。詳情見網絡配置參考。
安裝必要軟件
在手動部署的集群裏,你必須手動安裝 Ceph 軟件包,詳情見安裝 Ceph (手動)。你應該配置一個無密碼登錄 SSH 的用戶,且他有 root 權限。
增加 OSD (手動)
此過程要設置一個 ceph-osd 守護進程,讓它使用一個硬盤,且讓集群把數據發布到 OSD 。如果一臺主機有多個硬盤,可以重復此過程,把每個硬盤配置為一個 OSD 。
要添加 OSD ,要依次創建數據目錄、把硬盤掛載到目錄、把 OSD 加入集群、然後把它加入 CRUSH 圖。
往 CRUSH 圖裏添加 OSD 時建議設置權重,硬盤容量每年增長 40% ,所以較新的 OSD 主機擁有更大的空間(即它們可以有更大的權重)
1.創建 OSD 。如果未指定 UUID , OSD 啟動時會自動生成一個。下列命令會輸出 OSD 號,後續步驟你會用到
ceph osd create [{uuid} [{id}]]
如果指定了可選參數 {id} ,那麽它將作為 OSD id 。要註意,如果此數字已使用,此命令會出錯。
註意:一般來說,我們不建議指定 {id} 。因為 ID 是按照數組分配的,跳過一些依然會浪費內存;尤其是跳過太多、或者集群很大時,會更明顯。若未指定 {id} ,將用最小可用數字。
2.在新 OSD 主機上創建默認目錄。
ssh {new-osd-host} sudo mkdir /var/lib/ceph/osd/ceph-{osd-number}
3.如果準備用於 OSD 的是單獨的而非系統盤,先把它掛載到剛創建的目錄下:
ssh {new-osd-host} sudo mkfs -t {fstype} /dev/{drive} sudo mount -o user_xattr /dev/{hdd} /var/lib/ceph/osd/ceph-{osd-number}
4.初始化 OSD 數據目錄
ssh {new-osd-host} ceph-osd -i {osd-num} --mkfs --mkkey
運行 ceph-osd 時目錄必須是空的。
5.註冊 OSD 認證密鑰, ceph-{osd-num} 路徑裏的 ceph 值應該是 $cluster-$id ,如果你的集群名字不是 ceph ,那就用改過的名字
ceph auth add osd.{osd-num} osd ‘allow *‘ mon ‘allow rwx‘ -i /var/lib/ceph/osd/ceph-{osd-num}/keyring
6.把 OSD 加入 CRUSH 圖,這樣它才開始收數據。用 ceph osd crush add 命令把 OSD 加入 CRUSH 分級結構的合適位置。如果你指定了不止一個桶,此命令會把它加入你所指定的桶中最具體的一個,並且把此桶挪到你指定的其它桶之內。重要:如果你只指定了 root 桶,此命令會把 OSD 直接掛到 root 下面,但是 CRUSH 規則期望它位於主機內。
若用的是 v0.48 版,執行下列命令:
ceph osd crush add {id} {name} {weight} [{bucket-type}={bucket-name} ...]
若用的是 v0.56 及更高版,執行下列命令:
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
你也可以反編譯 CRUSH 圖、把 OSD 加入設備列表、以桶的形式加入主機(如果它沒在 CRUSH 圖裏)、以條目形式把設備加入主機、分配權重、重編譯並應用它。詳情參見增加/移動 OSD 。
Argonaut 0.48 版最佳實踐
為降低對用戶 I/O 性能的影響,加入 CRUSH 圖時應該把 OSD 的初始權重設為 0 ,然後每次增大一點、逐步增大 CRUSH 權重。例如每次增加 0.2 : ceph osd crush reweight {osd-id} .2 遷移完成前,可以依次把權重重置為 0.4 、 0.6 等等,直到達到期望權重。 為降低 OSD 失敗的影響,你可以設置: mon osd down out interval = 0 它防止掛了的 OSD 自動被標記為 out ,然後逐步降低其權重: ceph osd reweight {osd-num} .8 還是等著集群完成數據遷移,然後再次調整權重,直到權重為 0 。註意,這會阻止集群在發生故障時自動重復制數據,所以要確保監控的及時性,以便管理員迅速介入。 註意,以上經驗在 Bobtail 及後續版本已不再必要。
啟動 OSD
把 OSD 加入 Ceph 後, OSD 就在配置裏了。然而它還沒運行,它現在的狀態為 down 且 out 。你必須先啟動 OSD 它才能收數據。可以用管理主機上的 service ceph 、或從 OSD 所在主機啟動。
在 CentOS/RHEL 上用 sysvinit 。
sudo /etc/init.d/ceph start osd.{osd-num}
一旦你啟動了 OSD ,其狀態就變成了 up 且 in 。
觀察數據遷移
把新 OSD 加入 CRUSH 圖後, Ceph 會重新均衡服務器,一些歸置組會遷移到新 OSD 裏,你可以用 ceph 命令觀察此過程。
ceph -w
你會看到歸置組狀態從 active+clean 變為 active, some degraded objects (有降級的對象)、且遷移完成後回到 active+clean 狀態。( Ctrl-c 退出)
刪除 OSD (手動)
要想縮減集群尺寸或替換硬件,可在運行時刪除 OSD 。在 Ceph 裏,一個 OSD 通常是一臺主機上的一個 ceph-osd 守護進程、它運行在一個硬盤之上。如果一臺主機上有多個數據盤,你得挨個刪除其對應 ceph-osd 。通常,操作前應該檢查集群容量,看是否快達到上限了,確保刪除 OSD 後不會使集群達到 near full 比率。
註意:刪除 OSD 時不要讓集群達到 full ratio 值,刪除 OSD 可能導致集群達到或超過 full ratio 值。
把 OSD 踢出集群
刪除 OSD 前,它通常是 up 且 in 的,要先把它踢出集群,以使 Ceph 啟動重新均衡、把數據拷貝到其他 OSD 。
ceph osd out {osd-num}
觀察數據遷移
一旦把 OSD 踢出( out )集群, Ceph 就會開始重新均衡集群、把歸置組遷出將刪除的 OSD 。你可以用 ceph 工具觀察此過程。
ceph -w
你會看到歸置組狀態從 active+clean 變為 active, some degraded objects 、遷移完成後最終回到 active+clean 狀態。( Ctrl-c 中止)。
有時候,(通常是只有幾臺主機的“小”集群,比如小型測試集群)拿出( out )某個 OSD 可能會使 CRUSH 進入臨界狀態,這時某些 PG 一直卡在 active+remapped 狀態。如果遇到了這種情況,你應該把此 OSD 標記為 in ,用這個命令:
ceph osd in {osd-num}
等回到最初的狀態後,把它的權重設置為 0 ,而不是標記為 out ,用此命令:
ceph osd crush reweight osd.{osd-num} 0
執行後,你可以觀察數據遷移過程,應該可以正常結束。把某一 OSD 標記為 out 和權重改為 0 的區別在於,前者,包含此 OSD 的桶、其權重沒變;而後一種情況下,桶的權重變了(降低了此 OSD 的權重)。某些情況下, reweight 命令更適合“小”集群。
停止 OSD
把 OSD 踢出集群後,它可能仍在運行,就是說其狀態為 up 且 out 。刪除前要先停止 OSD 進程。
ssh {osd-host}
sudo /etc/init.d/ceph stop osd.{osd-num}
停止 OSD 後,狀態變為 down 。
刪除 OSD
此步驟依次把一個 OSD 移出集群 CRUSH 圖、刪除認證密鑰、刪除 OSD 圖條目、刪除 ceph.conf 條目。如果主機有多個硬盤,每個硬盤對應的 OSD 都得重復此步驟。
1.刪除 CRUSH 圖的對應 OSD 條目,它就不再接收數據了。你也可以反編譯 CRUSH 圖、刪除 device 列表條目、刪除對應的 host 桶條目或刪除 host 桶(如果它在 CRUSH 圖裏,而且你想刪除主機),重編譯 CRUSH 圖並應用它。詳情參見刪除 OSD 。
ceph osd crush remove {name}
2.刪除 OSD 認證密鑰:
ceph auth del osd.{osd-num}
ceph-{osd-num} 路徑裏的 ceph 值是 $cluster-$id ,如果集群名字不是 ceph ,這裏要更改。
3.刪除 OSD 。
ceph osd rm {osd-num} #for example ceph osd rm 1
4.登錄到保存 ceph.conf 主拷貝的主機。
ssh {admin-host} cd /etc/ceph vim ceph.conf
5.從 ceph.conf 配置文件裏刪除對應條目。
[osd.1] host = {hostname}
6.從保存 ceph.conf 主拷貝的主機,把更新過的 ceph.conf 拷貝到集群其他主機的 /etc/ceph 目錄下。
備案:http://210.14.131.179:8877/
賬號:admin
密碼:kuaiyun8877c
Ceph 存儲集群-低級運維