cephfs架構(gòu)解讀與測(cè)試分析-part1

前幾天有幸在日知錄社區(qū)里分享了自己對(duì)CephFS的理解與CephFS的測(cè)試分析爆土,然后把內(nèi)容整理如下步势,因?yàn)閮?nèi)容比較多背犯,保持與日知錄社區(qū)的文章一致漠魏,這里先貼出第一部分。

若對(duì)我的分享比較感興趣破讨,可以訪(fǎng)問(wèn)鏈接:日知錄 - CephFS架構(gòu)解讀與測(cè)試分析

CephFS架構(gòu)解讀

cephFS簡(jiǎn)介

CephFS是Ceph提供的兼容Posix協(xié)議的文件系統(tǒng) 提陶,對(duì)比RBD和RGW匹层,它是最晚滿(mǎn)足Production ready的一個(gè)功能。CephFS的底層還是使用rados存儲(chǔ)數(shù)據(jù)撑柔,用MDS管理filesystem的元數(shù)據(jù)铅忿。

在Jewel版本里灵汪,CephFS的基本功能已經(jīng)ready,但是很多feature還是experimental的峻凫,并不建議在生成環(huán)境打開(kāi)這些feature荧琼。

CephFS特性

  1. 可擴(kuò)展性

    CephFS的client端是直接讀寫(xiě)OSDs的,所以O(shè)SDs的擴(kuò)展性也體現(xiàn)在CephFS中

  2. 共享文件系統(tǒng)

    CephFS是一個(gè)共享的文件系統(tǒng)堰乔,支持多個(gè)clients同時(shí)讀寫(xiě)文件系統(tǒng)的一個(gè)file

  3. 高可用性

    CephFS支持配置元數(shù)據(jù)服務(wù)器集群浩考,也可以配置為Active-Standby的主從服務(wù)器被盈,提高可用性

  4. 文件/目錄Layout配置

    CephFS支持配置任一文件/目錄的Layout只怎,文件/目錄若不單獨(dú)配置怜俐,默認(rèn)繼承父目錄的Layout屬性

  5. POSIX ACLs支持

    CephFS支持POSIX的ACLs,在CephFS支持的兩個(gè)client中贴谎,kernel client默認(rèn)支持擅这,F(xiàn)USE client需要修改配置來(lái)支持

  6. Quotas支持

    CephFS在后端沒(méi)有實(shí)現(xiàn)Quota的功能景鼠,它的Quota是在CephFS FUSE client端實(shí)現(xiàn)的铛漓,而kernel client里還沒(méi)有添加

CephFS架構(gòu)

如下圖所示:

cephfs arch

最底層還是基礎(chǔ)的OSDs和Monitors浓恶,添加了MDSs,上層是支持客戶(hù)端的CephFS kernel object湿镀,CephFS FUSE,CephFS Library等算途。

CephFS組件間通信

connections

如上圖所示嘴瓤,CephFS各個(gè)組件間通信如下:

  1. Client <--> MDS

    元數(shù)據(jù)操作和capalities

  2. Client <--> OSD

    數(shù)據(jù)IO

  3. Client <--> Monitor

    認(rèn)證莉钙,集群map信息等

  4. MDS <--> Monitor

    心跳磁玉,集群map信息等

  5. MDS <--> OSD

    元數(shù)據(jù)IO

  6. Monitor <--> OSD

    心跳蚊伞,集群map信息等

CephFS MDS組件

Ceph MDS設(shè)計(jì)的比較強(qiáng)大,作為一個(gè)能存儲(chǔ)PB級(jí)數(shù)據(jù)的文件系統(tǒng)颅停,它充分考慮了對(duì)元數(shù)據(jù)服務(wù)器的要求掠拳,設(shè)計(jì)了MDS集群溺欧。另外也引入了MDS的動(dòng)態(tài)子樹(shù)遷移,MDS的熱度負(fù)載均衡芥牌。

但也正是這么超前的設(shè)計(jì)胳泉,使得MDS集群很難做到穩(wěn)定岩遗,所以目前Jewel版本里默認(rèn)還是單MDS實(shí)例宿礁,用戶(hù)可配置主從MDS實(shí)例,提高可用性控汉。 但在未來(lái),MDS集群的這些屬性都將穩(wěn)定下來(lái)乎婿,為我們提供超強(qiáng)的元數(shù)據(jù)管理性能谢翎。

cephfs mds

上圖描述了CephFS的Dynamic subtree partition功能森逮,它支持目錄分片在多個(gè)MDS之間服務(wù)磁携,并支持基于MDS負(fù)載均衡的動(dòng)態(tài)遷移谊迄。

Client跟MDS通信后,會(huì)緩存對(duì)應(yīng)的“目錄-MDS”映射關(guān)系这吻,這樣Client任何時(shí)候都知道從哪個(gè)MDS上獲取對(duì)應(yīng)的元數(shù)據(jù)信息。

MDS自身的元數(shù)據(jù)有:

  • per-MDS journal

    每個(gè)MDS都有一個(gè)對(duì)應(yīng)的journal文件怠硼,支持大到幾百兆字節(jié)的size香璃,保證元數(shù)據(jù)的一致性和順序提交的性能,它也是直接存儲(chǔ)到OSD cluster里的

  • CephFS MetaData

    MDS管理的CephFS的元數(shù)據(jù)也以文件格式存儲(chǔ)到OSD cluster上姻乓,有些元數(shù)據(jù)信息會(huì)存到object的OMAP里

CephFS使用方式

與通常的網(wǎng)絡(luò)文件系統(tǒng)一樣蹋岩,要訪(fǎng)問(wèn)cephfs学少,需要有對(duì)應(yīng)的client端版确。cephfs現(xiàn)在支持兩種client端:

  • CephFS kernel client
    • since 2.6.34
  • CephFS FUSE
cephfs client

Client端訪(fǎng)問(wèn)CepFS的步驟如下:

  1. client端與MDS節(jié)點(diǎn)通訊,獲取metadata信息(metadata也存在osd上)
  2. client直接寫(xiě)數(shù)據(jù)到OSD

Client端訪(fǎng)問(wèn)CephFS示例

  1. Client發(fā)送open file請(qǐng)求給MDS
  2. MDS返回file inode骂澄,file size惕虑,capability和stripe信息
  3. Client直接Read/Write數(shù)據(jù)到OSDs
  4. MDS管理file的capability
  5. Client發(fā)送close file請(qǐng)求給MDS枷遂,釋放file的capability,更新file詳細(xì)信息

這里cephfs并沒(méi)有像其他分布式文件系統(tǒng)設(shè)計(jì)的那樣矩桂,有分布式文件鎖來(lái)保障數(shù)據(jù)一致性
它是通過(guò)文件的capability來(lái)保證的

CephFS相關(guān)命令

創(chuàng)建MDS Daemon
# ceph-deploy mds create <…>
創(chuàng)建CephFS Data Pool
# ceph osd pool create <…>
創(chuàng)建CephFS Metadata Pool
# ceph osd pool create <…>
創(chuàng)建CephFS
# ceph fs new <…>
查看CephFS
# ceph fs ls 
    name: tstfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
刪除CephFS
# ceph fs rm <fs-name> --yes-i-really-mean-it 

查看MDS狀態(tài)

# ceph mds stat
    e8: tstfs-1/1/1 up tstfs2-0/0/1 up {[tstfs:0]=mds-daemon-1=up:active}
  • e8
    • e表示epoch
    • 8是epoch號(hào)
  • tstfs-1/1/1 up
    • tstfs是cephfs名字
    • 三個(gè)1分別是 mds_map.in/mds_map.up/mds_map.max_mds
    • up是cephfs狀態(tài)
  • {[tstfs:0]=mds-daemon-1=up:active}
    • [tstfs:0]指tstfs的rank 0
    • mds-daemon-1是服務(wù)tstfs的mds daemon name
    • up:active是cephfs的狀態(tài)為 up & active

mount使用CephFS

  1. CephFS kernel client
# mount -t ceph <monitor ip>:6789 /mntdir
# umount /mntdir
  1. CephFS FUSE
安裝ceph-fuse pkg
# yum install -y ceph-fuse
# ceph-fuse -m <monitor ip>:6789 /mntdir 
# fusermount -u /mntdir
centos7里沒(méi)有fusermount命令侄榴,可以用umount替代

FUSE的IO Path較長(zhǎng),會(huì)先從用戶(hù)態(tài)調(diào)用到內(nèi)核態(tài)网沾,再返回到用戶(hù)態(tài)使用CephFS FUSE模塊訪(fǎng)問(wèn)Ceph集群癞蚕,如下圖所示:

fuse io path

對(duì)比

  • 性能:Kernel client > ceph-fuse
  • Quota支持:只有ceph-fuse(client-side quotas)

Quota不是在CephFS后端實(shí)現(xiàn)的,而是在client-side實(shí)現(xiàn)的辉哥。若某些應(yīng)用中要求使用Quota桦山,這時(shí)就必須考慮使用CephFS FUSE了

CephFS Layout

Cephfs支持配置目錄、文件的layout和stripe醋旦,這些元數(shù)據(jù)信息保存在目錄和文件的xattr中恒水。

  • 目錄的layout xattrs為:ceph.dir.layout
  • 文件的layout xattrs為:ceph.file.layout

CephFS支持的layout配置項(xiàng)有:

  • pool
    數(shù)據(jù)存儲(chǔ)到指定pool
  • namespace
    數(shù)據(jù)存儲(chǔ)到指定namespace饲齐,比pool更細(xì)的粒度(rbd/rgw/cephfs都還不支持)
  • stripe_unit
    條帶大小钉凌,單位Byte
  • stripe_count
    條帶個(gè)數(shù)

默認(rèn)文件/目錄繼承父目錄的layout和striping

示例: 配置一個(gè)目錄的Layout

# setfattr -n ceph.dir.layout -v "stripe_unit=524288 stripe_count=8 object_size=4194304 pool=cephfs_data2" /mnt/mike512K/

目錄中一個(gè)9MB的文件的layout分布圖為:

layout example

CephFS認(rèn)證

有時(shí)候可能應(yīng)用有這樣的需求,不同的用戶(hù)訪(fǎng)問(wèn)不同的CephFS目錄捂人,這時(shí)候就需要開(kāi)啟CephFS的認(rèn)證御雕。

不過(guò)首先需要開(kāi)啟的是Ceph集群的認(rèn)證,然后就可以創(chuàng)建CephFS認(rèn)證的client端了滥搭,指定client對(duì)mon酸纲,mds,osd的訪(fǎng)問(wèn)權(quán)限瑟匆。

開(kāi)啟Ceph集群認(rèn)證

配置ceph.conf
# vim /etc/ceph/ceph.conf
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

創(chuàng)建CephFS認(rèn)證的client

# ceph auth get-or-create client.*client_name* \
        mon 'allow r' \
        mds 'allow r, allow rw path=/*specified_directory*' \
        osd 'allow rw pool=<data pool>’

示例與解釋?zhuān)?/strong>

# ceph auth get-or-create client.tst1 mon ‘a(chǎn)llow r’ mds ‘a(chǎn)llow r, allow rw path=/tst1’ osd ‘a(chǎn)llow rw pool=cephfs_data'
  • mon ‘a(chǎn)llow r’

    允許client從monitor讀取數(shù)據(jù)福青;必須配置

  • mds ‘a(chǎn)llow r, allow rw path=/tst1’

    允許client從MDS讀取數(shù)據(jù),允許client對(duì)目錄/tst1讀寫(xiě);
    其中‘ allow r’必須配置无午,不然client不能從mds讀取數(shù)據(jù)媒役,mount會(huì)報(bào)permission error;

  • osd ‘a(chǎn)llow rw pool=cephfs_data’

    允許client從osd pool=cephfs_data 上讀寫(xiě)數(shù)據(jù)宪迟;
    若不配置酣衷,client只能從mds上獲取FS的元數(shù)據(jù)信息,沒(méi)法查看各個(gè)文件的數(shù)據(jù)

對(duì)osd的權(quán)限也是必須配置的次泽,不然client只能從mds上獲取fs的元數(shù)據(jù)信息穿仪,沒(méi)法查看文件的數(shù)據(jù)

檢查ceph auth

# ceph auth get client.tst1 
exported keyring for client.tst1 
[client.tst] 
    key = AQCd+UBZxpi4EBAAUNyBDGdZbPgfd4oUb+u41A== 
    caps mds = allow r, allow rw path=/tst1" 
    caps mon = "allow r"
    caps osd = "allow rw pool=cephfs_data"

mount測(cè)試

# mount -t ceph <ip>:6789:/tst1 /mnt -o name=tst1,secret=AQCd+UBZxpi4EBAAUNyBDGdZbPgfd4oUb+u41A== 

認(rèn)證機(jī)制不完善

CephFS的認(rèn)證機(jī)制還不完善,上述client.tst1可以mount整個(gè)CephFS目錄意荤,能看到并讀取整個(gè)CephFS的文件

# mount -t ceph <ip>:6789:/ /mnt -o name=tst1,secret=AQCd+UBZxpi4EBAAUNyBDGdZbPgfd4oUb+u41A==

另外沒(méi)找到能支持readonly訪(fǎng)問(wèn)某一目錄的方法啊片。

只驗(yàn)證了cephfs kernel client唠倦,沒(méi)試過(guò)ceph-fuse的認(rèn)證

CephFS的 FSCK & Repair

FS的fsck和repair對(duì)一個(gè)文件系統(tǒng)是非常重要的瓦戚,如果這個(gè)沒(méi)搞定,一個(gè)文件系統(tǒng)是不會(huì)有人敢用的纬凤。

Ceph在Jewel版本里提供了Ready的CephFS的scrub和repair工具捐寥,它哪能處理大部分的元數(shù)據(jù)損壞笤昨。
但在使用中請(qǐng)記住兩點(diǎn):

  1. 修復(fù)命令==慎重執(zhí)行==,需要專(zhuān)業(yè)人士操作
  2. 若命令支持握恳,修復(fù)前請(qǐng)先備份元數(shù)據(jù)

cephfs journal工具

cephfs-journal-tool瞒窒,用來(lái)修復(fù)損壞的MDS journal,它支持的命令有下面幾類(lèi)乡洼,詳細(xì)的介紹看下help就明白了崇裁。

cephfs-journal-tool:
    - inspect/import/export/reset 
    - header get/set
    - event get/apply/recover_dentries/splice

cephfs online check/scrub

ceph tell mds.<id> damage ls 
ceph tell mds.<id> damage rm <int>

# scrub an inode and output results
ceph mds mds.<id> scrub_path <path> {force|recursive|repair [force|recursive|repair...]} 

cephfs offline repair

cephfs-data-scan init [--force-init] 
cephfs-data-scan scan_extents [--force-pool] <data pool name> 
cephfs-data-scan scan_inodes [--force-pool] [--force-corrupt] <data pool name>
cephfs-data-scan scan_frags [--force-corrupt]
cephfs-data-scan tmap_upgrade <metadata_pool>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市束昵,隨后出現(xiàn)的幾起案子拔稳,更是在濱河造成了極大的恐慌,老刑警劉巖妻怎,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異泞歉,居然都是意外死亡逼侦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)腰耙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)榛丢,“玉大人,你說(shuō)我怎么就攤上這事挺庞∥蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)掖鱼。 經(jīng)常有香客問(wèn)我然走,道長(zhǎng),這世上最難降的妖魔是什么戏挡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任芍瑞,我火速辦了婚禮,結(jié)果婚禮上褐墅,老公的妹妹穿的比我還像新娘拆檬。我一直安慰自己,他們只是感情好妥凳,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布竟贯。 她就那樣靜靜地躺著,像睡著了一般逝钥。 火紅的嫁衣襯著肌膚如雪屑那。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天晌缘,我揣著相機(jī)與錄音齐莲,去河邊找鬼。 笑死磷箕,一個(gè)胖子當(dāng)著我的面吹牛选酗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岳枷,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芒填,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了空繁?” 一聲冷哼從身側(cè)響起殿衰,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盛泡,沒(méi)想到半個(gè)月后闷祥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡傲诵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年凯砍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拴竹。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悟衩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栓拜,到底是詐尸還是另有隱情座泳,我是刑警寧澤惠昔,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站挑势,受9級(jí)特大地震影響镇防,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜薛耻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一营罢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饼齿,春花似錦饲漾、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至证鸥,卻和暖如春僚楞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枉层。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工泉褐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸟蜡。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓膜赃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親揉忘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跳座,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 系統(tǒng)環(huán)境: centos73.10.0-514.26.2.el7.x86_64 機(jī)器數(shù)量:五臺(tái) 硬盤(pán):四塊一塊為系...
    think_lonely閱讀 4,690評(píng)論 0 5
  • ceph簡(jiǎn)介 Ceph是一個(gè)分布式存儲(chǔ)系統(tǒng),誕生于2004年泣矛,是最早致力于開(kāi)發(fā)下一代高性能分布式文件系統(tǒng)的項(xiàng)目疲眷。隨...
    愛(ài)吃土豆的程序猿閱讀 6,035評(píng)論 0 21
  • 朱 榮澤| 2013.09.09 https://www.ustack.com/blog/ceph_infra/ ...
    守望者_(dá)1065閱讀 2,521評(píng)論 0 1
  • cephfs簡(jiǎn)介 cephfs是ceph提供的兼容POSIX協(xié)議的文件系統(tǒng),對(duì)比rbd和rgw功能您朽,這個(gè)是ceph...
    ictfox閱讀 6,334評(píng)論 0 3
  • RADOS系統(tǒng)主要由兩個(gè)部分組成:◎ OSD:由數(shù)目可變的大規(guī)模OSD(Object Storage Device...
    Cindy_lina閱讀 2,102評(píng)論 0 7