1. 程式人生 > >Ceph 存儲集群-低級運維

Ceph 存儲集群-低級運維

active har 調整 數據 圖片 lin 其他 更換 tor

低級集群運維包括啟動、停止、重啟集群內的某個具體守護進程;更改某守護進程或子系統配置;增加或拆除守護進程。低級運維還經常遇到擴展、縮減 Ceph 集群,以及更換老舊、或損壞的硬件。

一、增加/刪除 OSD

如果您的集群已經在運行,你可以在運行時添加或刪除 OSD 。

增加 OSD

你遲早要擴容集群, Ceph 允許在運行時增加 OSD 。在 Ceph 裏,一個 OSD 一般是一個 ceph-osd 守護進程,它運行在硬盤之上,如果你有多個硬盤,可以給每個硬盤啟動一個 ceph-osd 守護進程。

通常,你應該監控集群容量,看是否達到了容量上限,因為達到了它的 near

full 比率後,要增加一或多個 OSD 來擴容。

註意:不要等空間滿了再增加 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.40.6 等等,直到達到期望權重。

為降低 OSD 失敗的影響,你可以設置:

mon osd down out interval = 0

它防止掛了的 OSD 自動被標記為 out ,然後逐步降低其權重:

ceph osd reweight {osd-num} .8

還是等著集群完成數據遷移,然後再次調整權重,直到權重為 0 。註意,這會阻止集群在發生故障時自動重復制數據,所以要確保監控的及時性,以便管理員迅速介入。

註意,以上經驗在 Bobtail 及後續版本已不再必要。

啟動 OSD

把 OSD 加入 Ceph 後, OSD 就在配置裏了。然而它還沒運行,它現在的狀態為 downout 。你必須先啟動 OSD 它才能收數據。可以用管理主機上的 service ceph 、或從 OSD 所在主機啟動。

在 CentOS/RHEL 上用 sysvinit 。

sudo /etc/init.d/ceph start osd.{osd-num}

一旦你啟動了 OSD ,其狀態就變成了 upin

觀察數據遷移

把新 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 前,它通常是 upin 的,要先把它踢出集群,以使 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 踢出集群後,它可能仍在運行,就是說其狀態為 upout 。刪除前要先停止 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 存儲集群-低級運維