Ceph實(shí)踐之Crushmap相關(guān)

初識(shí)crushmap

CRUSH Map 包含 OSD 列表、“桶”類型醋粟、把設(shè)備匯聚為物理位置的“桶”列表靡菇、和指示 CRUSH 如何復(fù)制存儲(chǔ)池里的數(shù)據(jù)的規(guī)則列表。

Crushmap devices

搭建好集群后(本文所有操作基于ceph版本luminous)米愿,在沒有添加osd進(jìn)集群時(shí)厦凤,此時(shí)通過'ceph osd crush dump'查看crushmap的設(shè)備,你會(huì)發(fā)現(xiàn)此時(shí)的devices為空。形如:


初始devices狀態(tài).png

那么育苟,什么操作會(huì)導(dǎo)致crushmap的devices寫入信息呢较鼓?答:將osd加入到集群時(shí)。我們來實(shí)踐一下违柏。


本文使用的部署集群osd命令如下:
///////準(zhǔn)備格式化LVM設(shè)備并將其與OSD關(guān)聯(lián):
ceph-volume lvm prepare --bluestore --data {device-path}
//////列出與Ceph相關(guān)的邏輯卷和設(shè)備;可用于查看{osd id} {osd fsid}
ceph-volume lvm list
//////激活發(fā)現(xiàn)并安裝與OSD ID關(guān)聯(lián)的LVM設(shè)備并啟動(dòng)Ceph OSD
ceph-volume lvm activate {osd-id} {osd-fsid}
/////當(dāng)需要激活的osd較多時(shí)博烂,可以一次性激活所有
ceph-volume lvm activate --all


部署集群osd后,觀察crushmap devices如下:


部署osd后devices狀態(tài).png

Crushmap types

Crushmap中的types定義了所有bucket的類型漱竖,集群搭建好后禽篱,這些類型就可以查看到。通過ceph osd crush dump查看如下:


types.png

在定義bucket分級(jí)拓?fù)浣Y(jié)構(gòu)中馍惹,root類型的桶為改分級(jí)結(jié)構(gòu)的根節(jié)點(diǎn)躺率。

Crushmap buckets

Ceph在存儲(chǔ)數(shù)據(jù)的過程中,其CRUSH算法會(huì)根據(jù)各設(shè)備的權(quán)重(weight值反映)万矾、大致統(tǒng)一的將數(shù)據(jù)對(duì)象分布到存儲(chǔ)設(shè)備上悼吱。crushmap中的buckets是一系列分級(jí)桶實(shí)例的集合,其表達(dá)的是一種邏輯上的分級(jí)拓?fù)浣Y(jié)構(gòu) (樹型結(jié)構(gòu))勤众。創(chuàng)建桶分級(jí)拓?fù)浣涌诘哪康氖荂RUSH在存儲(chǔ)數(shù)據(jù)時(shí)按故障域隔離葉子節(jié)點(diǎn)(osd舆绎、host、rock....)们颜,數(shù)據(jù)冗余吕朵,達(dá)到數(shù)據(jù)安全。
在ceph的集群中有一個(gè)特殊的名為"default"的桶分級(jí)拓?fù)浣Y(jié)構(gòu)窥突,它從集群搭建好就存在努溃。如下:


集群搭建完成default桶實(shí)例.png

default桶分級(jí)結(jié)構(gòu)包含root、host阻问、osd三種桶類型梧税,其應(yīng)該如實(shí)的反映集群存儲(chǔ)設(shè)備的關(guān)系(集群幾個(gè)主機(jī)、每個(gè)主機(jī)下有哪些osd).當(dāng)osd出問題時(shí)称近,可根據(jù)該拓?fù)湔业綄?duì)應(yīng)的物理硬件第队。


操作crushmap bucket相關(guān)命令詳述:
1.添加一個(gè)bucket實(shí)例:
ceph osd crush add-bucket {bucket-name} {bucket-type}
上述命令執(zhí)行后,集群crushmap會(huì)多一條形如:
{
"id": -9, //唯一id標(biāo)識(shí)
"name": "data", //bucket_name刨秆,該bucket_name不能重復(fù)
"type_id": 1, //buckt_type id ,對(duì)應(yīng)于crushmap的types中的一項(xiàng)
"type_name": "host",//bucket 實(shí)例類型
"weight": 0,//該bucket的權(quán)重
"alg": "straw2",
"hash": "rjenkins1",
"items": []// 該bucket的子bucket信息(樹形理解)
}

2.移動(dòng)bucket層級(jí)
ceph osd crush move {bucket-name} {args...}
執(zhí)行上述命令后凳谦,可以將{buckt-name}移動(dòng)到{args}指定的層級(jí)下, 作為{args}的孩子節(jié)點(diǎn),其中args形如{bucket_type}={name}衡未。

3.添加osd到一個(gè)分級(jí)結(jié)構(gòu)
ceph osd crush add/set osd.{osd-id} {weight} {args}
上述命令中的{weight}值表明該osd的存儲(chǔ)能力(容量)尸执,一般1T的盤家凯,weight設(shè)為1,{args}知道該osd位置如失。

  1. 刪除層級(jí)結(jié)構(gòu)
    將子bucket從父bucket下刪除:
    ceph osd crush rm {bucket_name} {parent_bucket_name}
    只有當(dāng)一個(gè)bucket下沒有子bucket時(shí)绊诲,它才能被刪除,否則會(huì)報(bào)錯(cuò)褪贵。
    將root bucket刪除:
    ceph osd crush rm {bucket_name}

  • 調(diào)整dafault層級(jí)結(jié)構(gòu)真實(shí)反映物理設(shè)備情況

如果不調(diào)整default的層級(jí)掂之,只是將osd加入集群中,此時(shí)是沒有分級(jí)結(jié)構(gòu)的脆丁,如下:


default分級(jí)結(jié)構(gòu)初始態(tài).png

本文實(shí)踐的集群環(huán)境:3個(gè)主機(jī)板惑、每個(gè)主機(jī)下2個(gè)osd,其拓?fù)浣Y(jié)構(gòu)如下:


default拓?fù)?png

調(diào)整過程命令如下:

#添加3個(gè)主機(jī)
 1082  ceph osd crush  add-bucket node81 host
 1083  ceph osd crush  add-bucket node82 host
 1084  ceph osd crush  add-bucket node85 host
 1085  ceph osd tree
#將3個(gè)主機(jī)移動(dòng)到default下
 1086  ceph osd crush move node81 root=default
 1087  ceph osd tree
 1088  ceph osd crush move node82 root=default
 1089  ceph osd crush move node85 root=default
 1090  ceph osd tree
#添加osd.0/osd.1到node81下
 1091  ceph osd crush add osd.0 0.00977 root=default host=node81
 1092  ceph osd tree
 1093  ceph osd crush add osd.1 0.00977 root=default host=node81
#添加osd.0/osd.1到node82下
 1094  ceph osd crush add osd.2 0.00977 root=default host=node82
 1095  ceph osd crush add osd.3 0.00977 root=default host=node82
#添加osd.0/osd.1到node85下
 1096  ceph osd crush add osd.4 0.00977 root=default host=node85
 1097  ceph osd crush add osd.5 0.00977 root=default host=node85
 1098  ceph osd tree
 1099  history

創(chuàng)建完成后偎快,集群的default拓?fù)鋱D如下:


創(chuàng)建完成后default層級(jí).png
  • 完整創(chuàng)建一個(gè)自定義分級(jí)拓?fù)洌?/li>
#創(chuàng)建root bucket
 1105  ceph osd crush add-bucket data root
#創(chuàng)建各層級(jí)
 1106  ceph osd crush add-bucket data_node81 host
 1107  ceph osd crush add-bucket data_node82 host
 1108  ceph osd crush add-bucket data_node85 host
#調(diào)整各層級(jí)
 1109  ceph osd crush move data_node81 root=data
 1110  ceph osd crush move data_node82 root=data
 1111  ceph osd crush move data_node85 root=data
#添加osd
 1112  ceph osd crush add osd.1 0.00977 root=data host=data_node81
 1113  ceph osd crush add osd.0 0.00977 root=data host=data_node81
 1114  ceph osd crush add osd.2 0.00977 root=data host=data_node82
 1115  ceph osd crush add osd.3 0.00977 root=data host=data_node82
 1116  ceph osd crush add osd.4 0.00977 root=data host=data_node85
 1117  ceph osd crush add osd.5 0.00977 root=data host=data_node85
 1118  ceph osd tree
 1119  history

完成后如下:


6.png
  • 刪除一個(gè)完整的層級(jí)結(jié)構(gòu)實(shí)踐
#將osd.0冯乘、osd.1從node81刪除(刪除葉子節(jié)點(diǎn))
 1129  ceph osd crush rm osd.0 data_node81
 1130  ceph osd crush rm osd.1 data_node81
 1131  ceph osd tree
#將主機(jī)data_node81從data下刪除
 1132  ceph osd crush rm data_node81 data
#將osd.2、osd.3從node82刪除
 1133  ceph osd crush rm osd.2 data_node82
 1134  ceph osd crush rm osd.3 data_node82
 1135  ceph osd crush rm data_node82 data
#將osd.4晒夹、osd.5從node85刪除
 1136  ceph osd crush rm osd.4 data_node85
 1137  ceph osd crush rm osd.5 data_node85
 1138  ceph osd crush rm data_node85 data
 1139  ceph osd tree
刪除root bucket(data)
 1140  ceph osd crush rm data
 1141  history

Crushmap rules

crushmap中的rules是一系列存儲(chǔ)池規(guī)則的集合裆馒。存儲(chǔ)池規(guī)則(rule)確定一個(gè)存儲(chǔ)池的數(shù)據(jù)如何歸置:數(shù)據(jù)的冗余份數(shù)、數(shù)據(jù)隔離級(jí)別等丐怯。下面簡(jiǎn)單的查看說明一下:

//查看當(dāng)前集群所有的的crush rule name
[root@node81 ~]# ceph osd crush rule list
replicated_rule

//查看當(dāng)前集群所有的的crush rule詳情
[root@node81 ~]# ceph osd crush rule dump
[
    {
        "rule_id": 0,  #rule id(唯一表示)
        "rule_name": "replicated_rule",#rule name
        "ruleset": 0,#區(qū)分一條規(guī)則屬于某個(gè)規(guī)則集的手段
        "type": 1,#rule 類型(糾刪碼或副本)
        "min_size": 1,#可以選擇此規(guī)則的存儲(chǔ)池最小副本數(shù)
        "max_size": 10,#可以選擇此規(guī)則的存儲(chǔ)池最大副本數(shù)
        "steps": [
            {
                "op": "take",
                "item": -1,
                "item_name": "default" #root bucket(根節(jié)點(diǎn))
            },
            {
                "op": "chooseleaf_firstn",
                "num": 0,
                "type": "host"  #隔離數(shù)據(jù)粒度(故障域級(jí)別)
            },
            {
                "op": "emit"
            }
        ]
    }
]

[root@node81 ~]# 

編輯crushmap

1.獲取集群crushmap
ceph osd getcrushmap -o {file1}
{file1}為自定義的文件名喷好,該文件為二進(jìn)制文件,不可編輯读跷。要想編輯此文件梗搅,需要用工具將其反編譯解析,如crushtool工具效览。

2反編譯crushmap
crushtool -d {file1} -o {file2}
反編譯二進(jìn)制文件{file1}得到可編輯文件{file2}

3.編輯crushmap
按自我需求修改可編輯文件{file2}

4.編譯crushmap
要想編輯后的文件機(jī)器能夠識(shí)別无切,必須用工具編譯它生成二進(jìn)制文件。
crushtool -c {file2} -o {file3}

5.注入crushmap
要想新的crushmap在集群中生效丐枉,必須將其注入要集群哆键。
ceph osd setcrushmap -i {file3}

參考資料:
1.ceph 官方文檔
更多詳情,詳見官網(wǎng):
http://docs.ceph.org.cn/rados/operations/crush-map/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘦锹,一起剝皮案震驚了整個(gè)濱河市籍嘹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弯院,老刑警劉巖辱士,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異听绳,居然都是意外死亡颂碘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門辫红,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凭涂,“玉大人,你說我怎么就攤上這事贴妻∏杏停” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵名惩,是天一觀的道長(zhǎng)澎胡。 經(jīng)常有香客問我,道長(zhǎng)娩鹉,這世上最難降的妖魔是什么攻谁? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮弯予,結(jié)果婚禮上戚宦,老公的妹妹穿的比我還像新娘。我一直安慰自己锈嫩,他們只是感情好受楼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呼寸,像睡著了一般艳汽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上对雪,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天河狐,我揣著相機(jī)與錄音,去河邊找鬼瑟捣。 笑死馋艺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迈套。 我是一名探鬼主播丈钙,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼交汤!你這毒婦竟也來了雏赦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤芙扎,失蹤者是張志新(化名)和其女友劉穎星岗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戒洼,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俏橘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了圈浇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寥掐。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靴寂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出召耘,到底是詐尸還是另有隱情百炬,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布污它,位于F島的核電站剖踊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏衫贬。R本人自食惡果不足惜德澈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望固惯。 院中可真熱鬧梆造,春花似錦、人聲如沸葬毫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽供常。三九已至摊聋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栈暇,已是汗流浹背麻裁。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留源祈,地道東北人煎源。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像香缺,于是被迫代替她去往敵國(guó)和親手销。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容