增加/刪除 OSD
如果您的集群已經(jīng)在運行九默,你可以在運行時添加或刪除 OSD 。
增加 OSD
你遲早要擴容集群宾毒, Ceph 允許在運行時增加 OSD 驼修。在 Ceph 里,一個 OSD 一般是一個守護進程诈铛,它運行在硬盤之上乙各,如果你有多個硬盤,可以給每個硬盤啟動一個ceph-osd守護進程幢竹。
通常耳峦,你應該監(jiān)控集群容量,看是否達到了容量上限焕毫,因為達到了它的 near full 比率后妇萄,要增加一個或多個 OSD 來擴容。
Warning
不要等空間滿了再增加 OSD 咬荷,空間使用率達到 near full 比率后冠句, OSD 失敗可能導致集群空間占滿。
部署硬件
如果你通過增加主機來增加 OSD 幸乒,關于 OSD 服務器硬件的配置請參見硬件推薦懦底。要把一臺 OSD 主機加入到集群,首先要安裝最新版的 Linux 罕扎,而且存儲硬盤要做好必要的準備聚唐,詳情參見文件系統(tǒng)推薦。
把 OSD 主機添加到集群機架上腔召,連接好網(wǎng)絡杆查、確保網(wǎng)絡通暢。詳情見網(wǎng)絡配置參考臀蛛。
安裝必要軟件
在手動部署的集群里亲桦,你必須手動安裝 Ceph 軟件包,詳情見安裝 Ceph(手動)浊仆。你應該配置一個無密碼登錄 SSH 的用戶客峭,且他有 root 權限。
增加 OSD (手動)
此過程要設置一個 ceph-osd 守護進程抡柿,讓它使用一個硬盤舔琅,且讓集群把數(shù)據(jù)發(fā)布到 OSD 。如果一臺主機有多個硬盤洲劣,可以重復此過程备蚓,把每個硬盤配置為一個 OSD 课蔬。要添加 OSD ,要依次創(chuàng)建數(shù)據(jù)目錄郊尝、把硬盤掛載到目錄购笆、把 OSD 加入集群、然后把它加入 CRUSH map中虚循。
往 CRUSH map里添加 OSD 時建議設置權重同欠,硬盤容量每年增長 40% ,所以較新的 OSD 主機擁有更大的空間(即它們可以有更大的權重)横缔。
Tip
Ceph 喜歡統(tǒng)一的硬件铺遂,與存儲池無關。如果你要新增容量不一的驅(qū)動器茎刚,還需調(diào)整它們的權重襟锐。但是,為實現(xiàn)最佳性能膛锭,CRUSH 的分級結(jié)構最好按類型粮坞、容量定義。
-
創(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ù)字翻斟。
-
在新 OSD 主機上創(chuàng)建默認目錄。
ssh {new-osd-host} sudo mkdir /var/lib/ceph/osd/ceph-{osd-number}
-
如果準備用于 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}
-
初始化 OSD 數(shù)據(jù)目錄访惜。
ssh {new-osd-host} ceph-osd -i {osd-num} --mkfs --mkkey
運行ceph-osd時目錄必須是空的嘹履。
-
注冊 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
-
把 OSD 加入 CRUSH 圖窒篱,這樣它才開始接收數(shù)據(jù)焕刮。用 ceph osd crush add 命令把 OSD 加入 CRUSH 分級結(jié)構的合適位置。如果你指定了不止一個桶墙杯,此命令會把它加入你所指定的桶中最具體的一個配并,并且把此桶挪到你指定的其它桶之內(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 加入設備列表算行、以桶的形式加入主機(如果它沒在 CRUSH 圖里)梧油、以條目形式把設備加入主機、分配權重州邢、重編譯并應用它婶溯。詳情參見增加/移動 OSD 。
Argonaut 0.48 版最佳實踐
為降低對用戶 I/O 性能的影響偷霉,加入 CRUSH 圖時應該把 OSD 的初始權重設為 0 迄委,然后每次增大一點、逐步增大 CRUSH 權重类少。例如每次增加 0.2 :
ceph osd crush reweight {osd-id} .2
遷移完成前叙身,可以依次把權重重置為 0.6 等等,直到達到期望權重硫狞。
為降低 OSD 失敗的影響信轿,你可以設置:
mon osd down out interval = 0
它防止掛了的 OSD 自動被標記為 out ,然后逐步降低其權重:
ceph osd reweight {osd-num} .8
還是等著集群完成數(shù)據(jù)遷移残吩,然后再次調(diào)整權重财忽,直到權重為 0 。注意泣侮,這會阻止集群在發(fā)生故障時自動重復制數(shù)據(jù)即彪,所以要確保監(jiān)控的及時性,以便管理員迅速介入活尊。
注意隶校,以上經(jīng)驗在 Bobtail 及后續(xù)版本已不再必要漏益。
啟動 OSD
把 OSD 加入 Ceph 后, OSD 就在配置里了深胳。然而它還沒運行绰疤,它現(xiàn)在的狀態(tài)為 out 。你必須先啟動 OSD 它才能收數(shù)據(jù)舞终∏崆欤可以用管理主機上的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)就變成了 up 且 in 龙屉。
觀察數(shù)據(jù)遷移
把新 OSD 加入 CRUSH 圖后, Ceph 會重新均衡服務器满俗,一些歸置組會遷移到新 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ù)盤醉途,你得挨個刪除其對應ceph-osd。通常砖茸,操作前應該檢查集群容量隘擎,看是否快達到上限了,確保刪除 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)扎阶。如果遇到了這種情況,你應該把此 OSD 標記為in 婶芭,用這個命令:
ceph osd in {osd-num}
等回到最初的狀態(tài)后东臀,把它的權重設置為 0 ,而不是標記為out 犀农,用此命令:
ceph osd crush reweight osd.{osd-num} 0
執(zhí)行后惰赋,你可以觀察數(shù)據(jù)遷移過程,應該可以正常結(jié)束呵哨。把某一 OSD 標記為 out 和權重改為 0 的區(qū)別在于赁濒,前者,包含此 OSD 的桶孟害、其權重沒變拒炎;而后一種情況下,桶的權重變了(降低了此 OSD 的權重)挨务。某些情況下击你, reweight 命令更適合“小”集群。
停止 OSD
把 OSD 踢出集群后谎柄,它可能仍在運行丁侄,就是說其狀態(tài)為up 且 out。刪除前要先停止 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 條目糙臼。如果主機有多個硬盤庐镐,每個硬盤對應的 OSD 都得重復此步驟。
-
刪除 CRUSH 圖的對應 OSD 條目变逃,它就不再接收數(shù)據(jù)了必逆。你也可以反編譯 CRUSH 圖、刪除 device 列表條目、刪除對應的 host 桶條目或刪除 host 桶(如果它在 CRUSH 圖里名眉,而且你想刪除主機)粟矿,重編譯 CRUSH 圖并應用它。詳情參見刪除 OSD 损拢。
ceph osd crush remove {name}
-
刪除 OSD 認證密鑰:
ceph auth del osd.{osd-num}</pre>
ceph-{osd-num} 路徑里的 ceph值是$cluster-$id 陌粹,如果集群名字不是 ceph,這里要更改福压。
-
刪除 OSD 掏秩。
ceph osd rm {osd-num} #for example ceph osd rm 1
-
登錄到保存ceph.conf 主拷貝的主機。
ssh {admin-host} cd /etc/ceph vim ceph.conf</pre>
-
從ceph.conf配置文件里刪除對應條目荆姆。
[osd.1] host = {hostname}
從保存ceph.conf主機作為拷貝的主機蒙幻,把更新過的ceph.conf拷貝到集群其他主機的/etc/ceph/目錄下。
備注:
此內(nèi)容來自于ceph社區(qū)胆筒。