cephfs架构解读与测试分析-part1

前几天有幸在日知录社区里分享了自己对CephFS的理解与CephFS的测试分析,然后把内容整理如下,因为内容比较多,保持与日知录社区的文章一致,这里先贴出第一部分。

若对我的分享比较感兴趣,可以访问链接:日知录 - CephFS架构解读与测试分析

CephFS架构解读

cephFS简介

CephFS是Ceph提供的兼容Posix协议的文件系统 ,对比RBD和RGW,它是最晚满足Production ready的一个功能。CephFS的底层还是使用rados存储数据,用MDS管理filesystem的元数据。

在Jewel版本里,CephFS的基本功能已经ready,但是很多feature还是experimental的,并不建议在生成环境打开这些feature。

CephFS特性

  1. 可扩展性

    CephFS的client端是直接读写OSDs的,所以OSDs的扩展性也体现在CephFS中

  2. 共享文件系统

    CephFS是一个共享的文件系统,支持多个clients同时读写文件系统的一个file

  3. 高可用性

    CephFS支持配置元数据服务器集群,也可以配置为Active-Standby的主从服务器,提高可用性

  4. 文件/目录Layout配置

    CephFS支持配置任一文件/目录的Layout,文件/目录若不单独配置,默认继承父目录的Layout属性

  5. POSIX ACLs支持

    CephFS支持POSIX的ACLs,在CephFS支持的两个client中,kernel client默认支持,FUSE client需要修改配置来支持

  6. Quotas支持

    CephFS在后端没有实现Quota的功能,它的Quota是在CephFS FUSE client端实现的,而kernel client里还没有添加

CephFS架构

如下图所示:

cephfs arch

最底层还是基础的OSDs和Monitors,添加了MDSs,上层是支持客户端的CephFS kernel object,CephFS FUSE,CephFS Library等。

CephFS组件间通信

connections

如上图所示,CephFS各个组件间通信如下:

  1. Client <--> MDS

    元数据操作和capalities

  2. Client <--> OSD

    数据IO

  3. Client <--> Monitor

    认证,集群map信息等

  4. MDS <--> Monitor

    心跳,集群map信息等

  5. MDS <--> OSD

    元数据IO

  6. Monitor <--> OSD

    心跳,集群map信息等

CephFS MDS组件

Ceph MDS设计的比较强大,作为一个能存储PB级数据的文件系统,它充分考虑了对元数据服务器的要求,设计了MDS集群。另外也引入了MDS的动态子树迁移,MDS的热度负载均衡。

但也正是这么超前的设计,使得MDS集群很难做到稳定,所以目前Jewel版本里默认还是单MDS实例,用户可配置主从MDS实例,提高可用性。 但在未来,MDS集群的这些属性都将稳定下来,为我们提供超强的元数据管理性能。

cephfs mds

上图描述了CephFS的Dynamic subtree partition功能,它支持目录分片在多个MDS之间服务,并支持基于MDS负载均衡的动态迁移。

Client跟MDS通信后,会缓存对应的“目录-MDS”映射关系,这样Client任何时候都知道从哪个MDS上获取对应的元数据信息。

MDS自身的元数据有:

  • per-MDS journal

    每个MDS都有一个对应的journal文件,支持大到几百兆字节的size,保证元数据的一致性和顺序提交的性能,它也是直接存储到OSD cluster里的

  • CephFS MetaData

    MDS管理的CephFS的元数据也以文件格式存储到OSD cluster上,有些元数据信息会存到object的OMAP里

CephFS使用方式

与通常的网络文件系统一样,要访问cephfs,需要有对应的client端。cephfs现在支持两种client端:

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

Client端访问CepFS的步骤如下:

  1. client端与MDS节点通讯,获取metadata信息(metadata也存在osd上)
  2. client直接写数据到OSD

Client端访问CephFS示例

  1. Client发送open file请求给MDS
  2. MDS返回file inode,file size,capability和stripe信息
  3. Client直接Read/Write数据到OSDs
  4. MDS管理file的capability
  5. Client发送close file请求给MDS,释放file的capability,更新file详细信息

这里cephfs并没有像其他分布式文件系统设计的那样,有分布式文件锁来保障数据一致性
它是通过文件的capability来保证的

CephFS相关命令

创建MDS Daemon
# ceph-deploy mds create <…>
创建CephFS Data Pool
# ceph osd pool create <…>
创建CephFS Metadata Pool
# ceph osd pool create <…>
创建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状态

# 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号
  • tstfs-1/1/1 up
    • tstfs是cephfs名字
    • 三个1分别是 mds_map.in/mds_map.up/mds_map.max_mds
    • up是cephfs状态
  • {[tstfs:0]=mds-daemon-1=up:active}
    • [tstfs:0]指tstfs的rank 0
    • mds-daemon-1是服务tstfs的mds daemon name
    • up:active是cephfs的状态为 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里没有fusermount命令,可以用umount替代

FUSE的IO Path较长,会先从用户态调用到内核态,再返回到用户态使用CephFS FUSE模块访问Ceph集群,如下图所示:

fuse io path

对比

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

Quota不是在CephFS后端实现的,而是在client-side实现的。若某些应用中要求使用Quota,这时就必须考虑使用CephFS FUSE了

CephFS Layout

Cephfs支持配置目录、文件的layout和stripe,这些元数据信息保存在目录和文件的xattr中。

  • 目录的layout xattrs为:ceph.dir.layout
  • 文件的layout xattrs为:ceph.file.layout

CephFS支持的layout配置项有:

  • pool
    数据存储到指定pool
  • namespace
    数据存储到指定namespace,比pool更细的粒度(rbd/rgw/cephfs都还不支持)
  • stripe_unit
    条带大小,单位Byte
  • stripe_count
    条带个数

默认文件/目录继承父目录的layout和striping

示例: 配置一个目录的Layout

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

目录中一个9MB的文件的layout分布图为:

layout example

CephFS认证

有时候可能应用有这样的需求,不同的用户访问不同的CephFS目录,这时候就需要开启CephFS的认证。

不过首先需要开启的是Ceph集群的认证,然后就可以创建CephFS认证的client端了,指定client对mon,mds,osd的访问权限。

开启Ceph集群认证

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

创建CephFS认证的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>’

示例与解释:

# ceph auth get-or-create client.tst1 mon ‘allow r’ mds ‘allow r, allow rw path=/tst1’ osd ‘allow rw pool=cephfs_data'
  • mon ‘allow r’

    允许client从monitor读取数据;必须配置

  • mds ‘allow r, allow rw path=/tst1’

    允许client从MDS读取数据,允许client对目录/tst1读写;
    其中‘ allow r’必须配置,不然client不能从mds读取数据,mount会报permission error;

  • osd ‘allow rw pool=cephfs_data’

    允许client从osd pool=cephfs_data 上读写数据;
    若不配置,client只能从mds上获取FS的元数据信息,没法查看各个文件的数据

对osd的权限也是必须配置的,不然client只能从mds上获取fs的元数据信息,没法查看文件的数据

检查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测试

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

认证机制不完善

CephFS的认证机制还不完善,上述client.tst1可以mount整个CephFS目录,能看到并读取整个CephFS的文件

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

另外没找到能支持readonly访问某一目录的方法。

只验证了cephfs kernel client,没试过ceph-fuse的认证

CephFS的 FSCK & Repair

FS的fsck和repair对一个文件系统是非常重要的,如果这个没搞定,一个文件系统是不会有人敢用的。

Ceph在Jewel版本里提供了Ready的CephFS的scrub和repair工具,它哪能处理大部分的元数据损坏。
但在使用中请记住两点:

  1. 修复命令==慎重执行==,需要专业人士操作
  2. 若命令支持,修复前请先备份元数据

cephfs journal工具

cephfs-journal-tool,用来修复损坏的MDS journal,它支持的命令有下面几类,详细的介绍看下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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 系统环境: centos73.10.0-514.26.2.el7.x86_64 机器数量:五台 硬盘:四块一块为系...
    think_lonely阅读 4,631评论 0 5
  • ceph简介 Ceph是一个分布式存储系统,诞生于2004年,是最早致力于开发下一代高性能分布式文件系统的项目。随...
    爱吃土豆的程序猿阅读 6,013评论 0 21
  • 朱 荣泽| 2013.09.09 https://www.ustack.com/blog/ceph_infra/ ...
    守望者_1065阅读 2,509评论 0 1
  • cephfs简介 cephfs是ceph提供的兼容POSIX协议的文件系统,对比rbd和rgw功能,这个是ceph...
    ictfox阅读 6,303评论 0 3
  • RADOS系统主要由两个部分组成:◎ OSD:由数目可变的大规模OSD(Object Storage Device...
    Cindy_lina阅读 2,052评论 0 7