文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485294&idx=1&sn=e9039504a93382a232b9274b49ccb538&chksm=e9fdd29ade8a5b8c4fb19f1c249ab40ac553dd9737c25ff874f43275a86751070069b7232cf5&scene=178&cur_album_id=1600845417376776197#rd

CephFS 文件系统

官网地址:https://docs.ceph.com/en/latest/cephfs/

概念

The Ceph File System, or CephFS, is a POSIX-compliant file system built on top of Ceph’s distributed object store, RADOS. CephFS endeavors to provide a state-of-the-art, multi-use, highly available, and performant file store for a variety of applications, including traditional use-cases like shared home directories, HPC scratch space, and distributed workflow shared storage.

Ceph 文件系统或 CephFS 是一个兼容 POSIX 的文件系统,它构建在 Ceph 的分布式对象存储 RADOS 之上。CephFS 致力于为各种应用程序提供最新,多用途,高可用性和高性能的文件存储,包括传统用例(如共享主目录,HPC 暂存空间和分布式工作流共享存储)。

CephFS achieves these goals through the use of some novel architectural choices. Notably, file metadata is stored in a separate RADOS pool from file data and served via a resizable cluster of Metadata Servers, or MDS, which may scale to support higher throughput metadata workloads. Clients of the file system have direct access to RADOS for reading and writing file data blocks. For this reason, workloads may linearly scale with the size of the underlying RADOS object store; that is, there is no gateway or broker mediating data I/O for clients.

CephFS 实现这些目标,它是通过使用一些新颖的架构选择。 尤其是,文件元数据与文件数据存储在单独的 RADOS 池中(从数据中分离元数据),并通过可调整大小的元数据服务器或 MDS 集群提供服务,该集群可扩展以支持更高吞吐量的元数据工作负载。文件系统的客户端可以直接访问 RADOS 来读写文件数据块。因此,工作负载可能会随着基础 RADOS 对象存储的大小线性扩展。也就是说,没有网关或代理为客户端中介数据I / O。

Access to data is coordinated through the cluster of MDS which serve as authorities for the state of the distributed metadata cache cooperatively maintained by clients and MDS. Mutations to metadata are aggregated by each MDS into a series of efficient writes to a journal on RADOS; no metadata state is stored locally by the MDS. This model allows for coherent and rapid collaboration between clients within the context of a POSIX file system.

通过集群中 MDS 协调对数据的访问,该集群充当由客户端和 MDS 协作维护的分布式元数据缓存状态的授权机构。每个 MDS 都会将对元数据的突变汇总为对 RADOS 上日记的一系列有效写入。MDS 不会在本地存储任何元数据状态。此模型允许在 POSIX 文件系统的上下文中客户端之间进行连贯且快速的协作。

MDS:即 Metadata Servers,它主要存储的是文件的元数据信息,为了高可靠,通常MDS会部署一个集群,一个 Active,多个 Standby。它是如何保证高可靠性呢?它是把文件的元数据信息通过日志的形式写在 Metadata Pool 里面去;MDS 之间会对元数据信息进行交换,一个主的 Active MDS 宕机了,会有另外的 Standby MAD 来接管它,并且变为 Active MDS,因为数据都是写到 Metadata Pool 里面的,所以刚刚变化 Active MDS 拥有整个集群的元数据信息。

CephFS 客户端是直接向 Data Pool 池里面写数据的,Data Pool 与 Metadata Pool 都是直接构建在 RADOS 上面。

CephFS is the subject of numerous academic papers for its novel designs and contributions to file system research. It is the oldest storage interface in Ceph and was once the primary use-case for RADOS. Now it is joined by two other storage interfaces to form a modern unified storage system: RBD (Ceph Block Devices) and RGW (Ceph Object Storage Gateway).

CephFS 成为很多学术论文的主题,因其新颖的设计和对文件系统的研究贡献,它是最老的存储接口在Ceph集群中,并且还是曾经 RADOS 的主要用例。 现在,它与另外两个存储接口结合在一起,形成了一个现代化的统一存储系统:RBD(Ceph块设备)和RGW(Ceph对象存储网关)。

功能

  • POSIX-compliant semantics 兼容 POSIX 语法
  • Separates metadata from data 从数据中分离元数据
  • Dynamic rebalancing 动态再平衡
  • Subdirectory snapshots 子目录快照
  • Configurable striping 可配置条带化
  • Kernel driver support 内核驱动程序支持
  • FUSE support FUSE 支持
  • NFS/CIFS deployable 可部署NFS / CIFS
  • Use with Hadoop (replace HDFS) 与Hadoop一起使用(替换HDFS)

CephFS工作模型

MDS是CephFS文件系统的唯一入口,MDS进程挂掉后,CephFS无法使用,所以MDS需要做冗余,所以我们部署多个MDS进程对元数据分区进行冗余,这几个MDS都是活跃的,所以叫做多主MDS冗余,其中有一个负责根文件系统的MDS,其它MDS只负责一个子树的解析,一般热点子树就会动态分裂,动态子树分区机制;这样一个每一个活动MDS都有可能成为单点,所以我们需要为其提供冗余或者公共冗余都可以;

MDS 集群创建

部署 mds

[root@ceph-node01 ceph-deploy]# ceph-deploy mds create ceph-node01 ceph-node02 ceph-node03

状态查看

[root@ceph-node01 ceph-deploy]# ceph -s
cluster:
id: cc10b0cb-476f-420c-b1d6-e48c1dc929af
health: HEALTH_OK services:
mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03 (age 24h)
mgr: ceph-node01(active, since 11d), standbys: ceph-node03, ceph-node02
mds: 3 up:standby
osd: 7 osds: 7 up (since 24h), 7 in (since 5d)
rgw: 2 daemons active (ceph-node01, ceph-node02) task status: data:
pools: 7 pools, 224 pgs
objects: 2.82k objects, 9.4 GiB
usage: 35 GiB used, 765 GiB / 800 GiB avail
pgs: 224 active+clean [root@ceph-node01 ceph-deploy]#

mds: 3 up:standby ,三个 mds 都处于 standby 状态,这是因为我们还没有创建 mds 相关的文件系统。

[root@ceph-node01 ceph-deploy]# ceph mds stat
3 up:standby
[root@ceph-node01 ceph-deploy]# ceph fs ls
No filesystems enabled
[root@ceph-node01 ceph-deploy]#

创建文件系统

在使用 CephFS 文件系统中,metadata 是比较耗费资源的,它需要访问资源的速度是非常快的,最好使用 SSD 的 OSD 进行 Pool 池进行构建。

# 1. 创建元数据使用的 pool 池
[root@ceph-node01 ceph-deploy]# ceph osd pool create cephfs_metadata 16 16
pool 'cephfs_metadata' created # 2. 创建数据使用的 pool 池
[root@ceph-node01 ceph-deploy]# ceph osd pool create cephfs_data 16 16
pool 'cephfs_data' created # 3. 创建文件系统,关联元数据与数据
[root@ceph-node01 ceph-deploy]# ceph fs new cephfs-demo cephfs_metadata cephfs_data
new fs with metadata pool 9 and data pool 10 # 4. 查看fs文件系统
[root@ceph-node01 ceph-deploy]# ceph fs ls
name: cephfs-demo, metadata pool: cephfs_metadata, data pools: [cephfs_data ] # 5. 查看mds 状态
[root@ceph-node01 ceph-deploy]# ceph mds stat
cephfs-demo:1 {0=ceph-node01=up:active} 2 up:standby # 6. 查看刚才创建的pool池
[root@ceph-node01 ceph-deploy]# ceph osd lspools
。。。
9 cephfs_metadata
10 cephfs_data # 7. 查看集群状态
[root@ceph-node01 ceph-deploy]# ceph -s
cluster:
id: cc10b0cb-476f-420c-b1d6-e48c1dc929af
health: HEALTH_OK services:
mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03 (age 24h)
mgr: ceph-node01(active, since 11d), standbys: ceph-node03, ceph-node02
mds: cephfs-demo:1 {0=ceph-node01=up:active} 2 up:standby
osd: 7 osds: 7 up (since 24h), 7 in (since 6d)
rgw: 2 daemons active (ceph-node01, ceph-node02) task status:
scrub status:
mds.ceph-node01: idle data:
pools: 9 pools, 256 pgs
objects: 2.84k objects, 9.4 GiB
usage: 35 GiB used, 765 GiB / 800 GiB avail
pgs: 256 active+clean [root@ceph-node01 ceph-deploy]#

mds: cephfs-demo:1 {0=ceph-node01=up:active} 2 up:standby 目前ceph-node01是 active,其它的两个是 standby。

[root@ceph-node01 ~]# ceph fs status cephfs-demo
cephfs-demo - 2 clients
===========
+------+--------+-------------+---------------+-------+-------+
| Rank | State | MDS | Activity | dns | inos |
+------+--------+-------------+---------------+-------+-------+
| 0 | active | ceph-node02 | Reqs: 0 /s | 110 | 113 |
+------+--------+-------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
| Pool | type | used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata | 500k | 112G |
| cephfs_data | data | 9331 | 112G |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
| ceph-node03 |
| ceph-node01 |
+-------------+
MDS version: ceph version 14.2.11 (f7fdb2f52131f54b891a2ec99d8205561242cdaf) nautilus (stable)
[root@ceph-node01 ~]#

CephFS 文件系统使用

内核级别的挂载使用

[root@ceph-node01 ~]# rpm -qf /usr/sbin/mount.ceph
ceph-common-14.2.11-0.el7.x86_64
[root@ceph-node01 ~]#

确认这个命令行工具已经安装。通过下面的命令进行挂载,这样即可挂载成功;

[root@ceph-node01 ~]# mkdir -p /mnt/cephfs
[root@ceph-node01 ~]# mount -t ceph 100.73.18.152:6789:/ /mnt/cephfs/ -o name=admin # 这个地址是ceph-node1主机的ip
[root@ceph-node01 ~]# df -h|grep mnt
/dev/rbd0 20G 1.1G 18G 6% /mnt/rbd-demo
100.73.18.152:6789:/ 800G 36G 765G 5% /mnt/cephfs
[root@ceph-node01 ~]#
[root@ceph-node01 cephfs]# echo `date` >>aa
[root@ceph-node01 cephfs]# cat aa
2020年 10月 21日 星期三 09:42:53 EDT
[root@ceph-node01 cephfs]# lsmod |grep ceph
ceph 335973 1
libceph 282661 2 rbd,ceph
dns_resolver 13140 1 libceph
libcrc32c 12644 4 xfs,ip_vs,libceph,nf_conntrack
[root@ceph-node01 cephfs]#

使用的话,和正常文件系统是一样使用即可,我们mount后,会自动加载内核模块,这样性能很高,但有些情况下不支持内核空间挂载,需要在用户空间中进行挂载,下面介绍这种情况 。

用户空间挂载

[root@ceph-node01 ~]# yum -y install ceph-fuse

需要安装ceph-fuse客户端挂载工具;

[root@ceph-node01 ~]# mkdir -p /mnt/ceph-fuse/
[root@ceph-node01 ~]# ceph-fuse -n client.admin -m 100.73.18.153:6789,100.73.18.128:6789 /mnt/ceph-fuse/ # 这俩地址是ceph-node和ceph-node2主机的ip
ceph-fuse[403201]: starting ceph client2020-10-21 09:48:52.938 7fb92e4d4f80 -1 init, newargv = 0x561fdb9f8ec0 newargc=9 ceph-fuse[403201]: starting fuse
[root@ceph-node01 ~]# cd /mnt/ceph-fuse/
[root@ceph-node01 ceph-fuse]# ls
aa
[root@ceph-node01 ceph-fuse]# cat aa
2020年 10月 21日 星期三 09:42:53 EDT
[root@ceph-node01 ceph-fuse]# echo `date` >>bb
[root@ceph-node01 ceph-fuse]# cd ../cephfs/
[root@ceph-node01 cephfs]# ls
caa bb
[root@ceph-node01 cephfs]# cat bb
2020年 10月 21日 星期三 09:49:23 EDT
[root@ceph-node01 cephfs]#

总结

客户端挂载CephFS有两种形式,内核文件系统:libcephfs,用户空间文件系统(FUSE):libcephfs,要想在RADOS Cluster使用CephFS 必须包括以下几步:

1. 至少有一个节点运行ceph-mds 守护进程;
2. 分别创建元数据和数据存储池;
3. 激活CephFS 文件系统,ceph fs new <name> metadata-pool-name data-pool-name;
4. 使用ceph fs status <name> 去查看状态信息,也可以使用ceph mds stat 查看mds状态;

基于内核文件系统挂载:(需要key文件)

5. 通常需要使用指定的用户访问, 我们上面实验中,都是使用的ceph.admin,这里总结下,使用普通用户的方式:ceph auth get-or-create client.fsclient mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs_data' -o ceph.client.fsclient.keyring
6. 生成普通用户的key信息,并copy到客户端的/etc/ceph/目录,注意客户端需要安装ceph-common命令,才可能挂载cephfs文件系统。
ceph auth print-key client.fsclient >/etc/ceph/fsclient.key
7. 客户端挂载 mount -t ceph ceph-node01:6789,ceph-node02:6789:/ /mnt/kube2/ -o name=fsclient,secretfile=/etc/ceph/fsclient.key,通过stat -f /mnt/kube2查看挂载信息;
8. 还可以把挂载信息写到/etc/fatab文件中如下:
ceph-node01:6789,ceph-node02:6789:/ /mnt/kube2/ ceph name=fsclient,secretfile=/etc/ceph/fsclient.key,_netdev,noatime 0 0
_netdev 告诉mount命令,挂载多久没有挂载成功,自动跳过,不需要等待挂载成功才启动,如果ceph集群不在线的时候,不加此选项,操作系统启动时就会卡住;
noatime:不实时更新时间戳选项;
此时使用mount -a 即可加载/etc/fatab文件,自动挂载,使用mount命令查看,使用umount 卸载.

基于用户空间挂载:(需要用keyring文件)

9. 客户端需要安装ceph-fuse,ceph-common命令;
10. 一样需要提供认证账号,同上;需要把keyring密钥环文件copy过去;
11. ceph-fuse -n client.fsclient -m <IP地址>:6789 /mnt/kube2/ 注意这里我使用域名的形式报错了,可以尝试使用IP地址;
12. 也可以写到/etc/fatab文件中:none /mnt/kube2/ fuse.ceph ceph.id=fsclient,ceph.conf=/etc/ceph/ceph.conf,_netdev,defaults 0 0
13. 使用mount -a 挂载,使用umount 卸载。

6.Ceph 基础篇 - CephFS 文件系统的更多相关文章

  1. 1.Ceph 基础篇 - 存储基础及架构介绍

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485232&idx=1&sn=ff0e93b9 ...

  2. 8. Ceph 基础篇 - 运维常用操作

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485300&idx=1&sn=aacff9f7 ...

  3. 3.Ceph 基础篇 - RBD 块存储使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485253&idx=1&sn=24d9b06a ...

  4. 4.Ceph 基础篇 - 对象存储使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485256&idx=1&sn=39e07215 ...

  5. 10.Ceph 基础篇 - RGW 高可用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485316&idx=1&sn=d3a6be41 ...

  6. 9. Ceph 基础篇 - Crush Maps

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485302&idx=1&sn=00a3a204 ...

  7. 5.Ceph 基础篇 - 认证

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485272&idx=1&sn=4b27c357 ...

  8. 2.Ceph 基础篇 - 集群部署及故障排查

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485243&idx=1&sn=e425c31a ...

  9. Linux系统文件系统及文件基础篇

    学习Linux,重难点在于掌握不同类别的文件系统及其作用.通过对Linux系统的安装,我们首先来了解下Linux系统里各个目录文件夹下的大致功能:主要的目录树的有/./root./home./usr. ...

随机推荐

  1. JSP页面+请求转发+EL表达式

    1) JSP全称Java Server Pages,顾名思义就是运行在java服务器中的页面,也就是在我们JavaWeb中的动态页面,其本质就是一个Servlet.2) 其本身是一个动态网页技术标准, ...

  2. spring-security 配置简介

    1.Spring Security 简介 Spring Security 是一个能够基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在 Spring 应用 ...

  3. Unbuntu VS Code启动时闪退暂时的解决方法

    背景: 刚刚试着更新了操作系统,没更新成功,在下载系统更新的时候brave浏览器消失了,wps消失了,搜狗拼音输入法消失了.更新时,卡在Kernal Offset上,然后长按电源键再重启就好了.但是v ...

  4. 攻防世界MISC进阶区—48-51

    48.Become_a_Rockstar 得到无类型文件,010 Editor打开为几段话,看到标示性的NCTF{),怀疑是用脚本加密后的结果,网上查了一下,得知Rockstar是一种语言,用rock ...

  5. 螣龙安科反入侵:EDR的缺点

    EDR解决方案提供了比传统终结点安全解决方案更高的功能,并且可以增加人员数量,但是这些功能都有不少的缺点. EDR功能付出巨大代价 在过去四年中,虽然产品成本平均每年下降约35%,但即使到今天,产品的 ...

  6. 03 MySQL_表相关的SQL

    表相关的SQL 什么是表: 表是数据库中保存数据的单位 数据库表的引擎: innodb:支持数据库的复杂操作,包括外键.事务等; myisam:只支持数据库的增删改查操作: 1. 创建表 格式: cr ...

  7. 零基础学Java(9)在mac上运行命令行提示"找不到或无法加载主类"

    天坑 遇到的问题:使用命令行执行命令:java EightSample,会报以下错误 错误: 找不到或无法加载主类 EightSample 运行环境 mac系统 IntelliJ IDEA编译器 Ja ...

  8. .Net CLR GC 动态加载短暂堆阈值的计算及阈值超量的计算

    前言: 很多书籍或者很多文章,对于CLR或者GC这块只限于长篇大论的理论性概念,对于里面的如何运作模式,却几乎一无所知.高达近百万行的CPP文件,毕竟读懂的没有几个.以下取自CLR.Net 6 Pre ...

  9. [Linux] 如何在 Linux 电脑上制作专业的视频教程

    目录 前言 1.软件工具准备 a. 录音软件 b. 录屏软件 c. 摄像头软件 d. 安卓屏幕操作软件 e. 视频剪辑软件 2.视频教程制作 3.效果 参考链接 前言 博主使用 Arch Linux ...

  10. js实现全屏弹框

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...