CephFS 常用命令以及問(wèn)題分析

CephFS

最近公司的生產(chǎn)環(huán)境已經(jīng)開(kāi)始使用 CephFS 作為文件系統(tǒng)存儲(chǔ)攘乒,記錄一下使用過(guò)程中遇到的問(wèn)題啄清,已經(jīng)一些常用的命令拄轻。

1. 常用命令

1.1 ceph daemon mds.xxx help

ceph daemon 是一個(gè)很常用的命令遗嗽,可以用來(lái)查看 Ceph 的各個(gè)守護(hù)進(jìn)程的狀態(tài)宪祥,這個(gè) help 命令可以看到 MDS daemon 都支持哪些子命令:

$ sudo ceph daemon mds.cephfs-master1 help
{
    "cache status": "show cache status",
    "config diff": "dump diff of current config and default config",
    "config diff get": "dump diff get <field>: dump diff of current and default config setting <field>",
    "config get": "config get <field>: get the config value",
    "config help": "get config setting schema and descriptions",
    "config set": "config set <field> <val> [<val> ...]: set a config variable",
    "config show": "dump current config settings",
    "dirfrag ls": "List fragments in directory",
    "dirfrag merge": "De-fragment directory by path",
    "dirfrag split": "Fragment directory by path",
    "dump cache": "dump metadata cache (optionally to a file)",
    "dump loads": "dump metadata loads",
    "dump tree": "dump metadata cache for subtree",
    "dump_blocked_ops": "show the blocked ops currently in flight",
    "dump_historic_ops": "show slowest recent ops",
    "dump_historic_ops_by_duration": "show slowest recent ops, sorted by op duration",
    "dump_mempools": "get mempool stats",
    "dump_ops_in_flight": "show the ops currently in flight",
    "export dir": "migrate a subtree to named MDS",
    "flush journal": "Flush the journal to the backing store",
    "flush_path": "flush an inode (and its dirfrags)",
    "force_readonly": "Force MDS to read-only mode",
    "get subtrees": "Return the subtree map",
    "get_command_descriptions": "list available commands",
    "git_version": "get git sha1",
    "help": "list available commands",
    "log dump": "dump recent log entries to log file",
    "log flush": "flush log entries to log file",
    "log reopen": "reopen log file",
    "objecter_requests": "show in-progress osd requests",
    "ops": "show the ops currently in flight",
    "osdmap barrier": "Wait until the MDS has this OSD map epoch",
    "perf dump": "dump perfcounters value",
    "perf histogram dump": "dump perf histogram values",
    "perf histogram schema": "dump perf histogram schema",
    "perf reset": "perf reset <name>: perf reset all or one perfcounter name",
    "perf schema": "dump perfcounters schema",
    "scrub_path": "scrub an inode and output results",
    "session evict": "Evict a CephFS client",
    "session ls": "Enumerate connected CephFS clients",
    "status": "high-level status of MDS",
    "tag path": "Apply scrub tag recursively",
    "version": "get ceph version"
}

1.2 ceph daemon mds.xxx cache status

這個(gè)命令是用來(lái)查看 Ceph MDS 緩存的使用情況志鞍,默認(rèn)的配置是使用 1G 內(nèi)存作為緩存瞭亮,不過(guò)這不是一個(gè)固定的上限,實(shí)際用量可能突破配置固棚。

$ sudo ceph daemon mds.cephfs-master1 cache status
{
    "pool": {
        "items": 321121429,
        "bytes": 25797208658
    }
}

1.3 ceph mds stat

查看 MDS 組件狀態(tài)统翩,下面的例子輸出的結(jié)果表示只有一個(gè) MDS,而且 MDS 已經(jīng)處于正常工作狀態(tài)此洲。

$ ceph mds stat
cephfs-1/1/1 up  {0=cephfs-master1=up:active}

1.4 ceph daemon mds.xxx perf dump mds

查看 MDS 的性能指標(biāo)厂汗。

$ sudo ceph daemon mds.cephfs-master1 perf dump mds
{
    "mds": {
        "request": 4812776,
        "reply": 4812772,
        "reply_latency": {
            "avgcount": 4812772,
            "sum": 4018.941028931,
            "avgtime": 0.000835057
        },
        "forward": 0,
        "dir_fetch": 170753,
        "dir_commit": 3253,
        "dir_split": 9,
        "dir_merge": 6,
        "inode_max": 2147483647,
        "inodes": 9305913,
        "inodes_top": 1617338,
        "inodes_bottom": 7688575,
        "inodes_pin_tail": 0,
        "inodes_pinned": 6995430,
        "inodes_expired": 13937,
        "inodes_with_caps": 6995443,
        "caps": 7002958,
        "subtrees": 2,
        "traverse": 5076658,
        "traverse_hit": 4835068,
        "traverse_forward": 0,
        "traverse_discover": 0,
        "traverse_dir_fetch": 91030,
        "traverse_remote_ino": 0,
        "traverse_lock": 109,
        "load_cent": 5356538,
        "q": 1,
        "exported": 0,
        "exported_inodes": 0,
        "imported": 0,
        "imported_inodes": 0
    }
}

1.5 ceph daemon mds.xxx dirfrag ls /

這個(gè)命令是用來(lái)查看文件系統(tǒng)某個(gè)目錄下是否有臟數(shù)據(jù)。

$  sudo ceph daemon mds.cephfs-master1 dirfrag ls /
[
    {
        "value": 0,
        "bits": 0,
        "str": "0/0"
    }
]

1.6

該命令是用來(lái)查看 CephFS 的 session 連接呜师。

$ sudo ceph daemon mds.cephfs-master1 session ls

[
    {
        "id": 9872,
        "num_leases": 0,
        "num_caps": 1,
        "state": "open",
        "replay_requests": 0,
        "completed_requests": 0,
        "reconnecting": false,
        "inst": "client.9872 192.168.250.1:0/1887245819",
        "client_metadata": {
            "entity_id": "k8s.training.cephfs-teamvolume-aaaaaa-pvc",
            "hostname": "GPU-P100",
            "kernel_version": "4.9.107-0409107-generic",
            "root": "/prod/training/cephfs-teamvolume-aaaaaa-pvc"
        }
    },
    ......
]    

2. 問(wèn)題分析

2.1 Client cephfs-master1 failing to respond to cache pressure client_id: 9807

正巧是我修改了 MDS cache 之后出現(xiàn)了這個(gè)告警娶桦,所以一開(kāi)始懷疑是是不是因?yàn)楦拇罅?cache 造成了這個(gè)問(wèn)題,但當(dāng)我恢復(fù)了 cache 的默認(rèn)值之后,問(wèn)題依然存在衷畦。于是在 Ceph 的郵件列表中搜索類(lèi)似問(wèn)題栗涂,發(fā)現(xiàn)該問(wèn)題一般都是 inode_max 這個(gè)數(shù)值設(shè)置的不夠大造成的,于是查看了一下當(dāng)前的 inode 和 inode_max 信息:

$ sudo ceph daemon mds.cephfs-master1 perf dump mds
{
    "mds": {
        "request": 404611246,
        "reply": 404611201,
        "reply_latency": {
            "avgcount": 404611201,
            "sum": 9613563.153437701,
            "avgtime": 0.023760002
        },
        ......
        "inode_max": 2147483647,
        "inodes": 3907095,
        ......
}

inodes 遠(yuǎn)小于 inode_max祈争,所以這里的配置也沒(méi)有問(wèn)題斤程。繼續(xù)搜索發(fā)現(xiàn)不只是 inodes 的數(shù)量會(huì)造成這個(gè)問(wèn)題,已經(jīng)過(guò)期的 inodes 也是有影響的菩混。

$ sudo ceph daemon mds.cephfs-master1 perf dump mds
{
        ......
        "inodes_expired": 21999096501,
        ......
}

果然忿墅,inodes_expired 的數(shù)值已經(jīng)非常大了。進(jìn)一步搜索發(fā)現(xiàn)沮峡,造成這個(gè)問(wèn)題的主因是 cephfs 不會(huì)自動(dòng)清理過(guò)期的 inodes疚脐,所以積累時(shí)間久了,就容易出現(xiàn)不夠用的現(xiàn)象帖烘。解決方法如下:

$ sudo vim /etc/ceph/ceph.conf
……
[client]
client_try_dentry_invalidate = false
……

$ sudo systemctl restart ceph-mds@cephfs-master1.service

2.2 MDS cache 配置

MDS 目前官方推薦的配置還是單活的亮曹,也就是說(shuō)一個(gè)集群內(nèi)只有一個(gè)提供服務(wù)的 MDS,雖然 Ceph MDS 性能很高秘症,但畢竟是單點(diǎn)照卦,再加上 MDS 運(yùn)行的物理機(jī)上內(nèi)存資源還是比較富裕的,自然想到通過(guò)使用內(nèi)存作為緩存來(lái)提高 MDS 的性能乡摹。但是 MDS 的緩存配置項(xiàng)很多役耕,一時(shí)還真不確定應(yīng)該用哪個(gè)選項(xiàng),而且配置成多大合適也拿不準(zhǔn)聪廉。

經(jīng)過(guò)進(jìn)一步的整理后瞬痘,把緩存配置進(jìn)一步分解為以下四個(gè)小問(wèn)題。

  • 到底使用哪個(gè)選項(xiàng)配置緩存的大小
  • 為什么大部分時(shí)間用不到配置的內(nèi)存量
  • 為什么有時(shí) MDS 占用的內(nèi)存遠(yuǎn)大于緩存的配置
  • 應(yīng)該將緩存配置成多大

2.2.1 到底使用哪個(gè)選項(xiàng)配置緩存的大小

相關(guān)的配置項(xiàng)主要有兩個(gè):
mds_cache_sizemds_cache_memory_limit板熊,mds_cache_size 是老版本的配置參數(shù)框全,單位是 inode,目前的默認(rèn)值是 0干签,表示沒(méi)有限制津辩;mds_cache_memory_limit 是建議使用的值,單位是 byte容劳,默認(rèn)值為 1G喘沿。所以要調(diào)整 cache 大小,當(dāng)然是要改 mds_cache_memory_limit 竭贩。

2.2.2 為什么大部分時(shí)間用不到配置的內(nèi)存量

例如將 mds_cache_memory_limit 配置為 30G(mds_cache_memory_limit = 32212254726)蚜印,而實(shí)際運(yùn)行時(shí),看到的緩存用量卻是這樣的:

$ sudo ceph daemon mds.cephfs-master1 cache status
{
    "pool": {
        "items": 321121429,
        "bytes": 31197237046
    }
}

雖然差距不大留量,但為什么總是用不到配置的內(nèi)存量呢窄赋?
原因在于這個(gè)參數(shù):mds_cache_reservation哟冬,這個(gè)參數(shù)表示 MDS 預(yù)留一部分內(nèi)存,沒(méi)有具體的作用寝凌,就是為了留有余地柒傻。當(dāng) MDS 開(kāi)始侵占這部分內(nèi)存時(shí),系統(tǒng)會(huì)自動(dòng)釋放掉超過(guò)配額的那部分较木。

mds_cache_reservation 的默認(rèn)值是 5%,所以造成了我們看到的現(xiàn)象青柄。

2.2.3 為什么有時(shí) MDS 占用的內(nèi)存遠(yuǎn)大于緩存的配置

但有時(shí) MDS 占用的內(nèi)存又遠(yuǎn)遠(yuǎn)大于配置的緩存伐债,這個(gè)原因是 mds_cache_memory_limit 并非一個(gè)固定死不能突破的上限,程序運(yùn)行時(shí)可能會(huì)在特定情況下突破配置的上限致开,所以建議不要把這個(gè)值配置的和系統(tǒng)內(nèi)存總量太接近峰锁。不然有可能會(huì)占滿(mǎn)整個(gè)服務(wù)器的內(nèi)存資源。

2.2.4 應(yīng)該將緩存配置成多大

官方文檔有明確的說(shuō)明双戳,不推薦大于 64G虹蒋,這里面的原因主要是 Ceph 的 bug,有很多使用者發(fā)現(xiàn)當(dāng)高于 64g 時(shí)飒货,MDS 有較高的概率占用遠(yuǎn)高于實(shí)際配置的內(nèi)存魄衅,目前該 bug 還沒(méi)有解決。

3. 參考文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末塘辅,一起剝皮案震驚了整個(gè)濱河市晃虫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扣墩,老刑警劉巖哲银,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呻惕,居然都是意外死亡荆责,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)亚脆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)做院,“玉大人,你說(shuō)我怎么就攤上這事型酥∩胶” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵弥喉,是天一觀的道長(zhǎng)郁竟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)由境,這世上最難降的妖魔是什么棚亩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任蓖议,我火速辦了婚禮,結(jié)果婚禮上讥蟆,老公的妹妹穿的比我還像新娘勒虾。我一直安慰自己,他們只是感情好瘸彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布修然。 她就那樣靜靜地躺著,像睡著了一般质况。 火紅的嫁衣襯著肌膚如雪愕宋。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天结榄,我揣著相機(jī)與錄音中贝,去河邊找鬼。 笑死臼朗,一個(gè)胖子當(dāng)著我的面吹牛邻寿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播视哑,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绣否,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了黎炉?” 一聲冷哼從身側(cè)響起枝秤,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慷嗜,沒(méi)想到半個(gè)月后淀弹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庆械,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年薇溃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缭乘。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沐序,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堕绩,到底是詐尸還是另有隱情策幼,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布奴紧,位于F島的核電站特姐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏黍氮。R本人自食惡果不足惜唐含,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一浅浮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捷枯,春花似錦滚秩、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至争剿,卻和暖如春已艰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚕苇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凿叠,地道東北人涩笤。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像盒件,于是被迫代替她去往敵國(guó)和親蹬碧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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