Ceph Jewel 版本osd添加和刪除

增加/刪除 OSD

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

增加 OSD

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

通常,你應(yīng)該監(jiān)控集群容量,看是否達到了容量上限,因為達到了它的 near full 比率后,要增加一個或多個 OSD 來擴容。

Warning

不要等空間滿了再增加 OSD ,空間使用率達到 near full 比率后, OSD 失敗可能導致集群空間占滿。

部署硬件

如果你通過增加主機來增加 OSD ,關(guān)于 OSD 服務(wù)器硬件的配置請參見硬件推薦。要把一臺 OSD 主機加入到集群,首先要安裝最新版的 Linux ,而且存儲硬盤要做好必要的準備,詳情參見文件系統(tǒng)推薦。

把 OSD 主機添加到集群機架上,連接好網(wǎng)絡(luò)、確保網(wǎng)絡(luò)通暢。詳情見網(wǎng)絡(luò)配置參考。

安裝必要軟件

在手動部署的集群里,你必須手動安裝 Ceph 軟件包,詳情見安裝 Ceph(手動)。你應(yīng)該配置一個無密碼登錄 SSH 的用戶,且他有 root 權(quán)限。

增加 OSD (手動)

此過程要設(shè)置一個 ceph-osd 守護進程,讓它使用一個硬盤,且讓集群把數(shù)據(jù)發(fā)布到 OSD 。如果一臺主機有多個硬盤,可以重復(fù)此過程,把每個硬盤配置為一個 OSD 。要添加 OSD ,要依次創(chuàng)建數(shù)據(jù)目錄、把硬盤掛載到目錄、把 OSD 加入集群、然后把它加入 CRUSH map中。

往 CRUSH map里添加 OSD 時建議設(shè)置權(quán)重,硬盤容量每年增長 40% ,所以較新的 OSD 主機擁有更大的空間(即它們可以有更大的權(quán)重)。

Tip

Ceph 喜歡統(tǒng)一的硬件,與存儲池無關(guān)。如果你要新增容量不一的驅(qū)動器,還需調(diào)整它們的權(quán)重。但是,為實現(xiàn)最佳性能,CRUSH 的分級結(jié)構(gòu)最好按類型、容量定義。

  1. 創(chuàng)建 OSD 。如果未指定 UUID , OSD 啟動時會自動生成一個。下列命令會輸出 OSD 號,后續(xù)步驟你會用到。

    ceph osd create [{uuid} [{id}]]
    

如果指定了可選參數(shù) {id} ,那么它將作為 OSD id 。要注意,如果此數(shù)字已使用,此命令會出錯。

Warning
一般來說,我們不建議指定 {id} 。因為 ID 是按照數(shù)組分配的,跳過一些依然會浪費內(nèi)存;尤其是跳過太多、或者集群很大時,會更明顯。若未指定 {id} ,將用最小可用數(shù)字。

  1. 在新 OSD 主機上創(chuàng)建默認目錄。

    ssh {new-osd-host}
    sudo mkdir /var/lib/ceph/osd/ceph-{osd-number}
    
  2. 如果準備用于 OSD 的是單獨的而非系統(tǒng)盤,先把它掛載到剛創(chuàng)建的目錄下:

    ssh {new-osd-host}
    sudo mkfs -t {fstype} /dev/{drive}
    sudo mount -o user_xattr /dev/{hdd} /var/lib/ceph/osd/ceph-{osd-number}
    
  3. 初始化 OSD 數(shù)據(jù)目錄。

    ssh {new-osd-host}
    ceph-osd -i {osd-num} --mkfs --mkkey
    

    運行ceph-osd時目錄必須是空的。

  4. 注冊 OSD 認證密鑰,ceph-{osd-num} 路徑里的 ceph 值應(yīng)該是$cluster-$id ,如果你的集群名字不是 ceph,那就用改過的名字。

    ceph auth add osd.{osd-num} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-num}/keyring
    
  5. 把 OSD 加入 CRUSH 圖,這樣它才開始接收數(shù)據(jù)。用 ceph osd crush add 命令把 OSD 加入 CRUSH 分級結(jié)構(gòu)的合適位置。如果你指定了不止一個桶,此命令會把它加入你所指定的桶中最具體的一個,并且把此桶挪到你指定的其它桶之內(nèi)。重要:如果你只指定了 root 桶,此命令會把 OSD 直接掛到 root 下面,但是 CRUSH 規(guī)則期望它位于主機內(nèi)。

    若用的是 v0.48 版,執(zhí)行下列命令:

    ceph osd crush add {id} {name} {weight}  [{bucket-type}={bucket-name} ...]
    

    若用的是 v0.56 及更高版,執(zhí)行下列命令:

    ceph osd crush add {id-or-name} {weight}  [{bucket-type}={bucket-name} ...]
    

    你也可以反編譯 CRUSH 圖、把 OSD 加入設(shè)備列表、以桶的形式加入主機(如果它沒在 CRUSH 圖里)、以條目形式把設(shè)備加入主機、分配權(quán)重、重編譯并應(yīng)用它。詳情參見增加/移動 OSD 。

Argonaut 0.48 版最佳實踐

為降低對用戶 I/O 性能的影響,加入 CRUSH 圖時應(yīng)該把 OSD 的初始權(quán)重設(shè)為 0 ,然后每次增大一點、逐步增大 CRUSH 權(quán)重。例如每次增加 0.2

ceph osd crush reweight {osd-id} .2

遷移完成前,可以依次把權(quán)重重置為 0.6 等等,直到達到期望權(quán)重。

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

mon osd down out interval = 0

它防止掛了的 OSD 自動被標記為 out ,然后逐步降低其權(quán)重:

ceph osd reweight {osd-num} .8

還是等著集群完成數(shù)據(jù)遷移,然后再次調(diào)整權(quán)重,直到權(quán)重為 0 。注意,這會阻止集群在發(fā)生故障時自動重復(fù)制數(shù)據(jù),所以要確保監(jiān)控的及時性,以便管理員迅速介入。

注意,以上經(jīng)驗在 Bobtail 及后續(xù)版本已不再必要。

啟動 OSD

把 OSD 加入 Ceph 后, OSD 就在配置里了。然而它還沒運行,它現(xiàn)在的狀態(tài)為 out 。你必須先啟動 OSD 它才能收數(shù)據(jù)??梢杂霉芾碇鳈C上的service ceph 、或從 OSD 所在主機啟動。

在 Debian/Ubuntu 上用 Upstart。

sudo start ceph-osd id={osd-num}

在 CentOS/RHEL 上用 sysvinit 。

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

一旦你啟動了 OSD ,其狀態(tài)就變成了 upin

觀察數(shù)據(jù)遷移

把新 OSD 加入 CRUSH 圖后, Ceph 會重新均衡服務(wù)器,一些歸置組會遷移到新 OSD 里,你可以用 ceph 命令觀察此過程。

ceph -w

你會看到歸置組狀態(tài)從 active+clean 變?yōu)?active, some degraded objects (有降級的對象)、且遷移完成后回到 active+clean 狀態(tài)。( Ctrl-c 退出)

刪除 OSD (手動)

要想縮減集群尺寸或替換硬件,可在運行時刪除 OSD 。在 Ceph 里,一個 OSD 通常是一臺主機上的一個 ceph-osd守護進程、它運行在一個硬盤之上。如果一臺主機上有多個數(shù)據(jù)盤,你得挨個刪除其對應(yīng)ceph-osd。通常,操作前應(yīng)該檢查集群容量,看是否快達到上限了,確保刪除 OSD 后不會使集群達到near full 比率。

Warning

刪除 OSD 時不要讓集群達到full ratio 值,刪除 OSD 可能導致集群達到或超過 full ratio值。

把 OSD 踢出集群[]

刪除 OSD 前,它通常是in 的,要先把它踢出集群,以使 Ceph 啟動重新均衡、把數(shù)據(jù)拷貝到其他 OSD 。

ceph osd out {osd-num}

觀察數(shù)據(jù)遷移

一旦把 OSD 踢出集群, Ceph 就會開始重新均衡集群、把歸置組遷出將刪除的 OSD 。你可以用 ceph 工具觀察此過程。

ceph -w

你會看到歸置組狀態(tài)從active+clean 變?yōu)?active, some degraded objects 、遷移完成后最終回到 active+clean 狀態(tài)。( Ctrl-c 中止)

Note

有時候,(通常是只有幾臺主機的“小”集群,比如小型測試集群)拿出( out )某個 OSD 可能會使 CRUSH 進入臨界狀態(tài),這時某些 PG 一直卡在active+remapped狀態(tài)。如果遇到了這種情況,你應(yīng)該把此 OSD 標記為in ,用這個命令:

ceph osd in {osd-num}

等回到最初的狀態(tài)后,把它的權(quán)重設(shè)置為 0 ,而不是標記為out ,用此命令:

ceph osd crush reweight osd.{osd-num} 0

執(zhí)行后,你可以觀察數(shù)據(jù)遷移過程,應(yīng)該可以正常結(jié)束。把某一 OSD 標記為 out 和權(quán)重改為 0 的區(qū)別在于,前者,包含此 OSD 的桶、其權(quán)重沒變;而后一種情況下,桶的權(quán)重變了(降低了此 OSD 的權(quán)重)。某些情況下, reweight 命令更適合“小”集群。

停止 OSD

把 OSD 踢出集群后,它可能仍在運行,就是說其狀態(tài)為upout。刪除前要先停止 OSD 進程。

ssh {osd-host}
sudo /etc/init.d/ceph stop osd.{osd-num}

停止 OSD 后,狀態(tài)變?yōu)?strong>down。

刪除 OSD

此步驟依次把一個 OSD 移出集群 CRUSH 圖、刪除認證密鑰、刪除 OSD 圖條目、刪除ceph.conf 條目。如果主機有多個硬盤,每個硬盤對應(yīng)的 OSD 都得重復(fù)此步驟。

  1. 刪除 CRUSH 圖的對應(yīng) OSD 條目,它就不再接收數(shù)據(jù)了。你也可以反編譯 CRUSH 圖、刪除 device 列表條目、刪除對應(yīng)的 host 桶條目或刪除 host 桶(如果它在 CRUSH 圖里,而且你想刪除主機),重編譯 CRUSH 圖并應(yīng)用它。詳情參見刪除 OSD

    ceph osd crush remove {name}
    
  2. 刪除 OSD 認證密鑰:

    ceph auth del osd.{osd-num}</pre>
    

    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</pre>
    
  5. 從ceph.conf配置文件里刪除對應(yīng)條目。

     [osd.1]
         host = {hostname}
    
  6. 從保存ceph.conf主機作為拷貝的主機,把更新過的ceph.conf拷貝到集群其他主機的/etc/ceph/目錄下。

備注:

此內(nèi)容來自于ceph社區(qū)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容